[{"data":1,"prerenderedAt":174485},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi":3,"wiki-doc-nav":1936},{"id":4,"title":5,"body":6,"description":63,"extension":1930,"meta":1931,"navigation":630,"path":1932,"seo":1933,"stem":1934,"__hash__":1935},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":8,"toc":1906},"minimark",[9,13,18,22,25,54,57,89,92,96,99,137,140,158,161,211,214,241,245,248,290,293,306,309,381,390,395,398,442,448,451,455,494,497,517,521,564,566,595,598,606,609,613,1114,1117,1130,1133,1144,1147,1150,1180,1188,1191,1226,1229,1232,1241,1244,1247,1258,1269,1290,1293,1329,1341,1393,1415,1457,1470,1498,1503,1525,1536,1554,1557,1591,1594,1614,1617,1637,1644,1648,1651,1657,1663,1673,1676,1682,1693,1697,1745,1749,1755,1761,1764,1767,1787,1790,1796,1802,1805,1828,1831,1834,1843,1846,1886,1890,1893,1899,1902],[10,11,5],"h1",{"id":12},"_4关节actuator-与力控制",[14,15,17],"h2",{"id":16},"_1目标说明","1.目标说明",[19,20,21],"p",{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,23,24],{},"你将学习:",[26,27,28,36,41,46,51],"ol",{},[29,30,31,35],"li",{},[32,33,34],"code",{},"hinge"," 关节",[29,37,38],{},[32,39,40],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[29,42,43],{},[32,44,45],{},"data.ctrl",[29,47,48],{},[32,49,50],{},"ctrlrange",[29,52,53],{},"读取关节角和角速度",[19,55,56],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[58,59,64],"pre",{"className":60,"code":61,"language":62,"meta":63,"style":63},"language-python shiki shiki-themes github-light github-dark","data.ctrl[0] = ...\n","python","",[32,65,66],{"__ignoreMap":63},[67,68,71,75,79,82,86],"span",{"class":69,"line":70},"line",1,[67,72,74],{"class":73},"sVt8B","data.ctrl[",[67,76,78],{"class":77},"sj4cs","0",[67,80,81],{"class":73},"] ",[67,83,85],{"class":84},"szBVR","=",[67,87,88],{"class":77}," ...\n",[19,90,91],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,93,95],{"id":94},"_2环境与依赖安装","2.环境与依赖安装",[19,97,98],{},"Fedora 44 系统依赖:",[58,100,104],{"className":101,"code":102,"language":103,"meta":63,"style":63},"language-bash shiki shiki-themes github-light github-dark","sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n","bash",[32,105,106],{"__ignoreMap":63},[67,107,108,112,116,119,122,125,128,131,134],{"class":69,"line":70},[67,109,111],{"class":110},"sScJk","sudo",[67,113,115],{"class":114},"sZZnC"," dnf",[67,117,118],{"class":114}," install",[67,120,121],{"class":77}," -y",[67,123,124],{"class":114}," python3",[67,126,127],{"class":114}," python3-pip",[67,129,130],{"class":114}," mesa-libGL",[67,132,133],{"class":114}," mesa-dri-drivers",[67,135,136],{"class":114}," glfw\n",[19,138,139],{},"pip:",[58,141,143],{"className":101,"code":142,"language":103,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy\n",[32,144,145],{"__ignoreMap":63},[67,146,147,150,152,155],{"class":69,"line":70},[67,148,149],{"class":110},"pip",[67,151,118],{"class":114},[67,153,154],{"class":114}," \"mujoco>=2.3\"",[67,156,157],{"class":114}," numpy\n",[19,159,160],{},"conda:",[58,162,164],{"className":101,"code":163,"language":103,"meta":63,"style":63},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[32,165,166,189,200],{"__ignoreMap":63},[67,167,168,171,174,177,180,183,186],{"class":69,"line":70},[67,169,170],{"class":110},"conda",[67,172,173],{"class":114}," create",[67,175,176],{"class":77}," -n",[67,178,179],{"class":114}," mujoco-control",[67,181,182],{"class":114}," python=",[67,184,185],{"class":77},"3.10",[67,187,188],{"class":77}," -y\n",[67,190,192,194,197],{"class":69,"line":191},2,[67,193,170],{"class":110},[67,195,196],{"class":114}," activate",[67,198,199],{"class":114}," mujoco-control\n",[67,201,203,205,207,209],{"class":69,"line":202},3,[67,204,149],{"class":110},[67,206,118],{"class":114},[67,208,154],{"class":114},[67,210,157],{"class":114},[19,212,213],{},"版本冲突说明:",[26,215,216,222,231,238],{},[29,217,218,221],{},[32,219,220],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[29,223,224,226,227,230],{},[32,225,45],{}," 长度等于 ",[32,228,229],{},"model.nu","。",[29,232,233,234,237],{},"如果 ",[32,235,236],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[29,239,240],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,242,244],{"id":243},"_3核心概念解释","3.核心概念解释",[19,246,247],{},"关节决定 body 如何运动:",[58,249,253],{"className":250,"code":251,"language":252,"meta":63,"style":63},"language-xml shiki shiki-themes github-light github-dark","\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n","xml",[32,254,255],{"__ignoreMap":63},[67,256,257,260,264,267,269,272,275,277,279,282,284,287],{"class":69,"line":70},[67,258,259],{"class":73},"\u003C",[67,261,263],{"class":262},"s9eBZ","joint",[67,265,266],{"class":110}," name",[67,268,85],{"class":73},[67,270,271],{"class":114},"\"hinge\"",[67,273,274],{"class":110}," type",[67,276,85],{"class":73},[67,278,271],{"class":114},[67,280,281],{"class":110}," axis",[67,283,85],{"class":73},[67,285,286],{"class":114},"\"0 1 0\"",[67,288,289],{"class":73},"\u002F>\n",[19,291,292],{},"含义:",[26,294,295,300,303],{},[29,296,297,298],{},"名字是 ",[32,299,34],{},[29,301,302],{},"类型是旋转关节",[29,304,305],{},"绕 y 轴旋转",[19,307,308],{},"actuator 决定如何施加控制:",[58,310,312],{"className":250,"code":311,"language":252,"meta":63,"style":63},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[32,313,314,324,372],{"__ignoreMap":63},[67,315,316,318,321],{"class":69,"line":70},[67,317,259],{"class":73},[67,319,320],{"class":262},"actuator",[67,322,323],{"class":73},">\n",[67,325,326,329,332,334,336,339,342,344,346,349,351,354,357,359,362,365,367,370],{"class":69,"line":191},[67,327,328],{"class":73},"  \u003C",[67,330,331],{"class":262},"motor",[67,333,266],{"class":110},[67,335,85],{"class":73},[67,337,338],{"class":114},"\"hinge_motor\"",[67,340,341],{"class":110}," joint",[67,343,85],{"class":73},[67,345,271],{"class":114},[67,347,348],{"class":110}," gear",[67,350,85],{"class":73},[67,352,353],{"class":114},"\"1\"",[67,355,356],{"class":110}," ctrlrange",[67,358,85],{"class":73},[67,360,361],{"class":114},"\"-2 2\"",[67,363,364],{"class":110}," ctrllimited",[67,366,85],{"class":73},[67,368,369],{"class":114},"\"true\"",[67,371,289],{"class":73},[67,373,374,377,379],{"class":69,"line":202},[67,375,376],{"class":73},"\u003C\u002F",[67,378,320],{"class":262},[67,380,323],{"class":73},[19,382,383,386,387,230],{},[32,384,385],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[32,388,389],{},"[-2, 2]",[391,392,394],"h3",{"id":393},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,396,397],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[399,400,401,418],"table",{},[402,403,404],"thead",{},[405,406,407,412,415],"tr",{},[408,409,411],"th",{"align":410},"left","概念",[408,413,414],{"align":410},"作用",[408,416,417],{"align":410},"类比",[419,420,421,432],"tbody",{},[405,422,423,426,429],{},[424,425,263],"td",{"align":410},[424,427,428],{"align":410},"定义能怎么动",[424,430,431],{"align":410},"门轴允许门旋转",[405,433,434,436,439],{},[424,435,320],{"align":410},[424,437,438],{"align":410},"定义怎么施力或控制",[424,440,441],{"align":410},"人推门、马达带动门",[19,443,444,445,447],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[32,446,45],{}," 主动控制它。",[19,449,450],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[391,452,454],{"id":453},"hinge-joint","hinge joint",[58,456,458],{"className":250,"code":457,"language":252,"meta":63,"style":63},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[32,459,460],{"__ignoreMap":63},[67,461,462,464,466,468,470,472,474,476,478,480,482,484,487,489,492],{"class":69,"line":70},[67,463,259],{"class":73},[67,465,263],{"class":262},[67,467,266],{"class":110},[67,469,85],{"class":73},[67,471,271],{"class":114},[67,473,274],{"class":110},[67,475,85],{"class":73},[67,477,271],{"class":114},[67,479,281],{"class":110},[67,481,85],{"class":73},[67,483,286],{"class":114},[67,485,486],{"class":110}," damping",[67,488,85],{"class":73},[67,490,491],{"class":114},"\"0.1\"",[67,493,289],{"class":73},[19,495,496],{},"含义：",[26,498,499,505,511],{},[29,500,501,504],{},[32,502,503],{},"type=\"hinge\"","：只能绕一个轴旋转。",[29,506,507,510],{},[32,508,509],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[29,512,513,516],{},[32,514,515],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[391,518,520],{"id":519},"motor-actuator","motor actuator",[58,522,524],{"className":250,"code":523,"language":252,"meta":63,"style":63},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[32,525,526],{"__ignoreMap":63},[67,527,528,530,532,534,536,538,540,542,544,546,548,550,552,554,556,558,560,562],{"class":69,"line":70},[67,529,259],{"class":73},[67,531,331],{"class":262},[67,533,266],{"class":110},[67,535,85],{"class":73},[67,537,338],{"class":114},[67,539,341],{"class":110},[67,541,85],{"class":73},[67,543,271],{"class":114},[67,545,348],{"class":110},[67,547,85],{"class":73},[67,549,353],{"class":114},[67,551,356],{"class":110},[67,553,85],{"class":73},[67,555,361],{"class":114},[67,557,364],{"class":110},[67,559,85],{"class":73},[67,561,369],{"class":114},[67,563,289],{"class":73},[19,565,496],{},[26,567,568,577,583,589],{},[29,569,570,573,574,576],{},[32,571,572],{},"joint=\"hinge\"","：这个电机作用在名为 ",[32,575,34],{}," 的关节上。",[29,578,579,582],{},[32,580,581],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[29,584,585,588],{},[32,586,587],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[29,590,591,594],{},[32,592,593],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,596,597],{},"简单理解：",[58,599,604],{"className":600,"code":602,"language":603,"meta":63},[601],"language-text","实际施加效果 ≈ data.ctrl[0] * gear\n","text",[32,605,602],{"__ignoreMap":63},[19,607,608],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,610,612],{"id":611},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[58,614,616],{"className":60,"code":615,"language":62,"meta":63,"style":63},"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",[32,617,618,626,632,639,653,658,663,675,681,687,692,698,704,710,715,721,727,733,739,745,751,756,762,768,774,780,786,791,796,814,830,841,846,861,874,887,892,909,925,930,953,969,1008,1014,1019,1032,1051,1068,1081,1086,1091,1108],{"__ignoreMap":63},[67,619,620,623],{"class":69,"line":70},[67,621,622],{"class":84},"import",[67,624,625],{"class":73}," math\n",[67,627,628],{"class":69,"line":191},[67,629,631],{"emptyLinePlaceholder":630},true,"\n",[67,633,634,636],{"class":69,"line":202},[67,635,622],{"class":84},[67,637,638],{"class":73}," mujoco\n",[67,640,642,644,647,650],{"class":69,"line":641},4,[67,643,622],{"class":84},[67,645,646],{"class":73}," numpy ",[67,648,649],{"class":84},"as",[67,651,652],{"class":73}," np\n",[67,654,656],{"class":69,"line":655},5,[67,657,631],{"emptyLinePlaceholder":630},[67,659,661],{"class":69,"line":660},6,[67,662,631],{"emptyLinePlaceholder":630},[67,664,666,669,672],{"class":69,"line":665},7,[67,667,668],{"class":77},"XML",[67,670,671],{"class":84}," =",[67,673,674],{"class":114}," \"\"\"\n",[67,676,678],{"class":69,"line":677},8,[67,679,680],{"class":114},"\u003Cmujoco model=\"one_link_motor\">\n",[67,682,684],{"class":69,"line":683},9,[67,685,686],{"class":114},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[67,688,690],{"class":69,"line":689},10,[67,691,631],{"emptyLinePlaceholder":630},[67,693,695],{"class":69,"line":694},11,[67,696,697],{"class":114},"  \u003Cworldbody>\n",[67,699,701],{"class":69,"line":700},12,[67,702,703],{"class":114},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[67,705,707],{"class":69,"line":706},13,[67,708,709],{"class":114},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[67,711,713],{"class":69,"line":712},14,[67,714,631],{"emptyLinePlaceholder":630},[67,716,718],{"class":69,"line":717},15,[67,719,720],{"class":114},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[67,722,724],{"class":69,"line":723},16,[67,725,726],{"class":114},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[67,728,730],{"class":69,"line":729},17,[67,731,732],{"class":114},"        \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",[67,734,736],{"class":69,"line":735},18,[67,737,738],{"class":114},"      \u003C\u002Fbody>\n",[67,740,742],{"class":69,"line":741},19,[67,743,744],{"class":114},"    \u003C\u002Fbody>\n",[67,746,748],{"class":69,"line":747},20,[67,749,750],{"class":114},"  \u003C\u002Fworldbody>\n",[67,752,754],{"class":69,"line":753},21,[67,755,631],{"emptyLinePlaceholder":630},[67,757,759],{"class":69,"line":758},22,[67,760,761],{"class":114},"  \u003Cactuator>\n",[67,763,765],{"class":69,"line":764},23,[67,766,767],{"class":114},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[67,769,771],{"class":69,"line":770},24,[67,772,773],{"class":114},"  \u003C\u002Factuator>\n",[67,775,777],{"class":69,"line":776},25,[67,778,779],{"class":114},"\u003C\u002Fmujoco>\n",[67,781,783],{"class":69,"line":782},26,[67,784,785],{"class":114},"\"\"\"\n",[67,787,789],{"class":69,"line":788},27,[67,790,631],{"emptyLinePlaceholder":630},[67,792,794],{"class":69,"line":793},28,[67,795,631],{"emptyLinePlaceholder":630},[67,797,799,802,805,808,811],{"class":69,"line":798},29,[67,800,801],{"class":84},"def",[67,803,804],{"class":110}," main",[67,806,807],{"class":73},"() -> ",[67,809,810],{"class":77},"None",[67,812,813],{"class":73},":\n",[67,815,817,820,822,825,827],{"class":69,"line":816},30,[67,818,819],{"class":73},"    model ",[67,821,85],{"class":84},[67,823,824],{"class":73}," mujoco.MjModel.from_xml_string(",[67,826,668],{"class":77},[67,828,829],{"class":73},")\n",[67,831,833,836,838],{"class":69,"line":832},31,[67,834,835],{"class":73},"    data ",[67,837,85],{"class":84},[67,839,840],{"class":73}," mujoco.MjData(model)\n",[67,842,844],{"class":69,"line":843},32,[67,845,631],{"emptyLinePlaceholder":630},[67,847,849,852,855,858],{"class":69,"line":848},33,[67,850,851],{"class":77},"    print",[67,853,854],{"class":73},"(",[67,856,857],{"class":114},"\"nq:\"",[67,859,860],{"class":73},", model.nq)\n",[67,862,864,866,868,871],{"class":69,"line":863},34,[67,865,851],{"class":77},[67,867,854],{"class":73},[67,869,870],{"class":114},"\"nv:\"",[67,872,873],{"class":73},", model.nv)\n",[67,875,877,879,881,884],{"class":69,"line":876},35,[67,878,851],{"class":77},[67,880,854],{"class":73},[67,882,883],{"class":114},"\"nu:\"",[67,885,886],{"class":73},", model.nu)\n",[67,888,890],{"class":69,"line":889},36,[67,891,631],{"emptyLinePlaceholder":630},[67,893,895,898,901,904,907],{"class":69,"line":894},37,[67,896,897],{"class":84},"    if",[67,899,900],{"class":73}," model.nu ",[67,902,903],{"class":84},"!=",[67,905,906],{"class":77}," 1",[67,908,813],{"class":73},[67,910,912,915,918,920,923],{"class":69,"line":911},38,[67,913,914],{"class":84},"        raise",[67,916,917],{"class":77}," RuntimeError",[67,919,854],{"class":73},[67,921,922],{"class":114},"\"expected exactly one actuator\"",[67,924,829],{"class":73},[67,926,928],{"class":69,"line":927},39,[67,929,631],{"emptyLinePlaceholder":630},[67,931,933,936,939,942,945,947,950],{"class":69,"line":932},40,[67,934,935],{"class":84},"    for",[67,937,938],{"class":73}," step ",[67,940,941],{"class":84},"in",[67,943,944],{"class":77}," range",[67,946,854],{"class":73},[67,948,949],{"class":77},"2000",[67,951,952],{"class":73},"):\n",[67,954,956,959,961,963,966],{"class":69,"line":955},41,[67,957,958],{"class":73},"        t ",[67,960,85],{"class":84},[67,962,938],{"class":73},[67,964,965],{"class":84},"*",[67,967,968],{"class":73}," model.opt.timestep\n",[67,970,972,975,977,979,981,984,987,990,993,995,998,1000,1003,1005],{"class":69,"line":971},42,[67,973,974],{"class":73},"        data.ctrl[",[67,976,78],{"class":77},[67,978,81],{"class":73},[67,980,85],{"class":84},[67,982,983],{"class":77}," 1.5",[67,985,986],{"class":84}," *",[67,988,989],{"class":73}," math.sin(",[67,991,992],{"class":77},"2.0",[67,994,986],{"class":84},[67,996,997],{"class":73}," math.pi ",[67,999,965],{"class":84},[67,1001,1002],{"class":77}," 0.5",[67,1004,986],{"class":84},[67,1006,1007],{"class":73}," t)\n",[67,1009,1011],{"class":69,"line":1010},43,[67,1012,1013],{"class":73},"        mujoco.mj_step(model, data)\n",[67,1015,1017],{"class":69,"line":1016},44,[67,1018,631],{"emptyLinePlaceholder":630},[67,1020,1022,1024,1026,1029],{"class":69,"line":1021},45,[67,1023,851],{"class":77},[67,1025,854],{"class":73},[67,1027,1028],{"class":114},"\"time:\"",[67,1030,1031],{"class":73},", data.time)\n",[67,1033,1035,1037,1039,1042,1045,1048],{"class":69,"line":1034},46,[67,1036,851],{"class":77},[67,1038,854],{"class":73},[67,1040,1041],{"class":114},"\"joint qpos:\"",[67,1043,1044],{"class":73},", np.round(data.qpos.copy(), ",[67,1046,1047],{"class":77},"4",[67,1049,1050],{"class":73},"))\n",[67,1052,1054,1056,1058,1061,1064,1066],{"class":69,"line":1053},47,[67,1055,851],{"class":77},[67,1057,854],{"class":73},[67,1059,1060],{"class":114},"\"joint qvel:\"",[67,1062,1063],{"class":73},", np.round(data.qvel.copy(), ",[67,1065,1047],{"class":77},[67,1067,1050],{"class":73},[67,1069,1071,1073,1075,1078],{"class":69,"line":1070},48,[67,1072,851],{"class":77},[67,1074,854],{"class":73},[67,1076,1077],{"class":114},"\"last ctrl:\"",[67,1079,1080],{"class":73},", data.ctrl.copy())\n",[67,1082,1084],{"class":69,"line":1083},49,[67,1085,631],{"emptyLinePlaceholder":630},[67,1087,1089],{"class":69,"line":1088},50,[67,1090,631],{"emptyLinePlaceholder":630},[67,1092,1094,1097,1100,1103,1106],{"class":69,"line":1093},51,[67,1095,1096],{"class":84},"if",[67,1098,1099],{"class":77}," __name__",[67,1101,1102],{"class":84}," ==",[67,1104,1105],{"class":114}," \"__main__\"",[67,1107,813],{"class":73},[67,1109,1111],{"class":69,"line":1110},52,[67,1112,1113],{"class":73},"    main()\n",[19,1115,1116],{},"保存为：",[58,1118,1120],{"className":101,"code":1119,"language":103,"meta":63,"style":63},"touch ch4_joint_motor.py\n",[32,1121,1122],{"__ignoreMap":63},[67,1123,1124,1127],{"class":69,"line":70},[67,1125,1126],{"class":110},"touch",[67,1128,1129],{"class":114}," ch4_joint_motor.py\n",[19,1131,1132],{},"运行:",[58,1134,1136],{"className":101,"code":1135,"language":103,"meta":63,"style":63},"python ch4_joint_motor.py\n",[32,1137,1138],{"__ignoreMap":63},[67,1139,1140,1142],{"class":69,"line":70},[67,1141,62],{"class":110},[67,1143,1129],{"class":114},[391,1145,1146],{"id":1146},"代码逐段解释",[19,1148,1149],{},"检查 actuator 数量：",[58,1151,1153],{"className":60,"code":1152,"language":62,"meta":63,"style":63},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[32,1154,1155,1167],{"__ignoreMap":63},[67,1156,1157,1159,1161,1163,1165],{"class":69,"line":70},[67,1158,1096],{"class":84},[67,1160,900],{"class":73},[67,1162,903],{"class":84},[67,1164,906],{"class":77},[67,1166,813],{"class":73},[67,1168,1169,1172,1174,1176,1178],{"class":69,"line":191},[67,1170,1171],{"class":84},"    raise",[67,1173,917],{"class":77},[67,1175,854],{"class":73},[67,1177,922],{"class":114},[67,1179,829],{"class":73},[19,1181,1182,1184,1185,1187],{},[32,1183,229],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[32,1186,45],{}," 长度应该是 1。",[19,1189,1190],{},"产生正弦控制信号：",[58,1192,1194],{"className":60,"code":1193,"language":62,"meta":63,"style":63},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[32,1195,1196],{"__ignoreMap":63},[67,1197,1198,1200,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224],{"class":69,"line":70},[67,1199,74],{"class":73},[67,1201,78],{"class":77},[67,1203,81],{"class":73},[67,1205,85],{"class":84},[67,1207,983],{"class":77},[67,1209,986],{"class":84},[67,1211,989],{"class":73},[67,1213,992],{"class":77},[67,1215,986],{"class":84},[67,1217,997],{"class":73},[67,1219,965],{"class":84},[67,1221,1002],{"class":77},[67,1223,986],{"class":84},[67,1225,1007],{"class":73},[19,1227,1228],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,1230,1231],{},"推进仿真：",[58,1233,1235],{"className":60,"code":1234,"language":62,"meta":63,"style":63},"mujoco.mj_step(model, data)\n",[32,1236,1237],{"__ignoreMap":63},[67,1238,1239],{"class":69,"line":70},[67,1240,1234],{"class":73},[19,1242,1243],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[391,1245,1246],{"id":1246},"代码逐行细讲",[58,1248,1250],{"className":60,"code":1249,"language":62,"meta":63,"style":63},"import math\n",[32,1251,1252],{"__ignoreMap":63},[67,1253,1254,1256],{"class":69,"line":70},[67,1255,622],{"class":84},[67,1257,625],{"class":73},[19,1259,1260,1261,1264,1265,1268],{},"导入 Python 标准库里的数学模块。后面要用 ",[32,1262,1263],{},"math.sin"," 和 ",[32,1266,1267],{},"math.pi"," 生成周期变化的控制信号。",[58,1270,1272],{"className":60,"code":1271,"language":62,"meta":63,"style":63},"import mujoco\nimport numpy as np\n",[32,1273,1274,1280],{"__ignoreMap":63},[67,1275,1276,1278],{"class":69,"line":70},[67,1277,622],{"class":84},[67,1279,638],{"class":73},[67,1281,1282,1284,1286,1288],{"class":69,"line":191},[67,1283,622],{"class":84},[67,1285,646],{"class":73},[67,1287,649],{"class":84},[67,1289,652],{"class":73},[19,1291,1292],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[58,1294,1295],{"className":250,"code":457,"language":252,"meta":63,"style":63},[32,1296,1297],{"__ignoreMap":63},[67,1298,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327],{"class":69,"line":70},[67,1300,259],{"class":73},[67,1302,263],{"class":262},[67,1304,266],{"class":110},[67,1306,85],{"class":73},[67,1308,271],{"class":114},[67,1310,274],{"class":110},[67,1312,85],{"class":73},[67,1314,271],{"class":114},[67,1316,281],{"class":110},[67,1318,85],{"class":73},[67,1320,286],{"class":114},[67,1322,486],{"class":110},[67,1324,85],{"class":73},[67,1326,491],{"class":114},[67,1328,289],{"class":73},[19,1330,1331,1332,1334,1335,1337,1338,1340],{},"这行定义关节。",[32,1333,34],{}," 表示旋转关节。",[32,1336,509],{}," 表示绕 y 轴旋转。",[32,1339,515],{}," 表示有一点阻尼，运动不会完全无损耗。",[58,1342,1344],{"className":250,"code":1343,"language":252,"meta":63,"style":63},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[32,1345,1346],{"__ignoreMap":63},[67,1347,1348,1350,1353,1355,1357,1360,1362,1364,1367,1370,1372,1375,1378,1380,1383,1386,1388,1391],{"class":69,"line":70},[67,1349,259],{"class":73},[67,1351,1352],{"class":262},"geom",[67,1354,266],{"class":110},[67,1356,85],{"class":73},[67,1358,1359],{"class":114},"\"link_geom\"",[67,1361,274],{"class":110},[67,1363,85],{"class":73},[67,1365,1366],{"class":114},"\"capsule\"",[67,1368,1369],{"class":110}," fromto",[67,1371,85],{"class":73},[67,1373,1374],{"class":114},"\"0 0 0 0 0 0.5\"",[67,1376,1377],{"class":110}," size",[67,1379,85],{"class":73},[67,1381,1382],{"class":114},"\"0.03\"",[67,1384,1385],{"class":110}," mass",[67,1387,85],{"class":73},[67,1389,1390],{"class":114},"\"0.5\"",[67,1392,289],{"class":73},[19,1394,1395,1396,1399,1400,1403,1404,1407,1408,230,1411,1414],{},"这行定义摆杆的形状。",[32,1397,1398],{},"capsule"," 是胶囊体，适合表示杆子。",[32,1401,1402],{},"fromto"," 前三个数是起点，后三个数是终点，所以这根杆从 ",[32,1405,1406],{},"(0,0,0)"," 延伸到 ",[32,1409,1410],{},"(0,0,0.5)",[32,1412,1413],{},"size=\"0.03\""," 是半径。",[58,1416,1417],{"className":250,"code":523,"language":252,"meta":63,"style":63},[32,1418,1419],{"__ignoreMap":63},[67,1420,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455],{"class":69,"line":70},[67,1422,259],{"class":73},[67,1424,331],{"class":262},[67,1426,266],{"class":110},[67,1428,85],{"class":73},[67,1430,338],{"class":114},[67,1432,341],{"class":110},[67,1434,85],{"class":73},[67,1436,271],{"class":114},[67,1438,348],{"class":110},[67,1440,85],{"class":73},[67,1442,353],{"class":114},[67,1444,356],{"class":110},[67,1446,85],{"class":73},[67,1448,361],{"class":114},[67,1450,364],{"class":110},[67,1452,85],{"class":73},[67,1454,369],{"class":114},[67,1456,289],{"class":73},[19,1458,1459,1460,1462,1463,1466,1467,1469],{},"这行定义电机。它作用在 ",[32,1461,34],{}," 关节上。",[32,1464,1465],{},"gear"," 可以理解成放大倍数。",[32,1468,50],{}," 限制控制输入范围。",[58,1471,1472],{"className":60,"code":1152,"language":62,"meta":63,"style":63},[32,1473,1474,1486],{"__ignoreMap":63},[67,1475,1476,1478,1480,1482,1484],{"class":69,"line":70},[67,1477,1096],{"class":84},[67,1479,900],{"class":73},[67,1481,903],{"class":84},[67,1483,906],{"class":77},[67,1485,813],{"class":73},[67,1487,1488,1490,1492,1494,1496],{"class":69,"line":191},[67,1489,1171],{"class":84},[67,1491,917],{"class":77},[67,1493,854],{"class":73},[67,1495,922],{"class":114},[67,1497,829],{"class":73},[19,1499,1500,1502],{},[32,1501,229],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[58,1504,1506],{"className":60,"code":1505,"language":62,"meta":63,"style":63},"for step in range(2000):\n",[32,1507,1508],{"__ignoreMap":63},[67,1509,1510,1513,1515,1517,1519,1521,1523],{"class":69,"line":70},[67,1511,1512],{"class":84},"for",[67,1514,938],{"class":73},[67,1516,941],{"class":84},[67,1518,944],{"class":77},[67,1520,854],{"class":73},[67,1522,949],{"class":77},[67,1524,952],{"class":73},[19,1526,1527,1528,1531,1532,1535],{},"循环 2000 步。这里没有用 ",[32,1529,1530],{},"_","，而是用 ",[32,1533,1534],{},"step","，因为后面要用当前步数计算时间。",[58,1537,1539],{"className":60,"code":1538,"language":62,"meta":63,"style":63},"t = step * model.opt.timestep\n",[32,1540,1541],{"__ignoreMap":63},[67,1542,1543,1546,1548,1550,1552],{"class":69,"line":70},[67,1544,1545],{"class":73},"t ",[67,1547,85],{"class":84},[67,1549,938],{"class":73},[67,1551,965],{"class":84},[67,1553,968],{"class":73},[19,1555,1556],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[58,1558,1559],{"className":60,"code":1193,"language":62,"meta":63,"style":63},[32,1560,1561],{"__ignoreMap":63},[67,1562,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587,1589],{"class":69,"line":70},[67,1564,74],{"class":73},[67,1566,78],{"class":77},[67,1568,81],{"class":73},[67,1570,85],{"class":84},[67,1572,983],{"class":77},[67,1574,986],{"class":84},[67,1576,989],{"class":73},[67,1578,992],{"class":77},[67,1580,986],{"class":84},[67,1582,997],{"class":73},[67,1584,965],{"class":84},[67,1586,1002],{"class":77},[67,1588,986],{"class":84},[67,1590,1007],{"class":73},[19,1592,1593],{},"这行给电机输入一个正弦波。拆开看：",[26,1595,1596,1602,1608],{},[29,1597,1598,1601],{},[32,1599,1600],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[29,1603,1604,1607],{},[32,1605,1606],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[29,1609,1610,1613],{},[32,1611,1612],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,1615,1616],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[58,1618,1620],{"className":60,"code":1619,"language":62,"meta":63,"style":63},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[32,1621,1622],{"__ignoreMap":63},[67,1623,1624,1627,1629,1631,1633,1635],{"class":69,"line":70},[67,1625,1626],{"class":77},"print",[67,1628,854],{"class":73},[67,1630,1041],{"class":114},[67,1632,1044],{"class":73},[67,1634,1047],{"class":77},[67,1636,1050],{"class":73},[19,1638,1639,1640,1643],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[32,1641,1642],{},"data.qpos"," 只有一个数。",[14,1645,1647],{"id":1646},"_5运行结果说明","5.运行结果说明",[19,1649,1650],{},"输出类似:",[58,1652,1655],{"className":1653,"code":1654,"language":603,"meta":63},[601],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[32,1656,1654],{"__ignoreMap":63},[19,1658,1659,1660,1662],{},"这里 ",[32,1661,385],{}," 是电机输入。",[19,1664,1665,1668,1669,1672],{},[32,1666,1667],{},"joint qpos"," 是关节角度，单位通常是弧度。",[32,1670,1671],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,1674,1675],{},"角度单位提示：",[58,1677,1680],{"className":1678,"code":1679,"language":603,"meta":63},[601],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[32,1681,1679],{"__ignoreMap":63},[19,1683,1684,1685,1688,1689,1692],{},"如果你看到 ",[32,1686,1687],{},"qpos"," 是 ",[32,1690,1691],{},"0.5","，大约就是 28.6 度。",[14,1694,1696],{"id":1695},"_6验证步骤","6.验证步骤",[26,1698,1699,1708,1711,1718,1721,1729,1737],{},[29,1700,1701,1702,1704,1705,230],{},"把 ",[32,1703,581],{}," 改成 ",[32,1706,1707],{},"gear=\"5\"",[29,1709,1710],{},"重新运行，观察关节运动是否更剧烈。",[29,1712,1701,1713,1704,1715,230],{},[32,1714,50],{},[32,1716,1717],{},"-0.2 0.2",[29,1719,1720],{},"重新运行，观察控制能力是否变弱。",[29,1722,1723,1724,1726,1727,230],{},"去掉 actuator，确认 ",[32,1725,229],{}," 变成 ",[32,1728,78],{},[29,1730,1701,1731,1704,1733,1736],{},[32,1732,515],{},[32,1734,1735],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[29,1738,1701,1739,1704,1741,1744],{},[32,1740,509],{},[32,1742,1743],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,1746,1748],{"id":1747},"_7常见错误与解决方案","7.常见错误与解决方案",[391,1750,1752],{"id":1751},"indexerror-index-0-is-out-of-bounds",[32,1753,1754],{},"IndexError: index 0 is out of bounds",[19,1756,1757,1758,1760],{},"原因是 ",[32,1759,236],{},"，没有 actuator。",[391,1762,1763],{"id":1763},"关节几乎不动",[19,1765,1766],{},"可能原因:",[26,1768,1769,1774,1778,1784],{},[29,1770,1771,1773],{},[32,1772,1465],{}," 太小",[29,1775,1776,1773],{},[32,1777,50],{},[29,1779,1780,1783],{},[32,1781,1782],{},"damping"," 太大",[29,1785,1786],{},"重力方向导致运动不明显",[391,1788,1789],{"id":1789},"模型编译失败",[19,1791,1792,1793,1795],{},"检查 actuator 引用的 ",[32,1794,572],{}," 是否存在，joint 名称是否拼写一致。",[391,1797,1799,1801],{"id":1798},"datactrl0-写了但没有效果",[32,1800,385],{}," 写了但没有效果",[19,1803,1804],{},"检查：",[26,1806,1807,1812,1815,1820,1825],{},[29,1808,1809,1811],{},[32,1810,229],{}," 是否大于 0。",[29,1813,1814],{},"motor 是否引用了正确 joint。",[29,1816,1817,1819],{},[32,1818,1465],{}," 是否太小。",[29,1821,1822,1824],{},[32,1823,50],{}," 是否把输入限制得太小。",[29,1826,1827],{},"body 是否真的有可动 joint。",[391,1829,1830],{"id":1830},"控制输入超过范围会怎样",[19,1832,1833],{},"如果设置了：",[58,1835,1837],{"className":250,"code":1836,"language":252,"meta":63,"style":63},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[32,1838,1839],{"__ignoreMap":63},[67,1840,1841],{"class":69,"line":70},[67,1842,1836],{"class":73},[19,1844,1845],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[58,1847,1849],{"className":60,"code":1848,"language":62,"meta":63,"style":63},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[32,1850,1851,1873],{"__ignoreMap":63},[67,1852,1853,1856,1858,1861,1864,1866,1869,1871],{"class":69,"line":70},[67,1854,1855],{"class":73},"action ",[67,1857,85],{"class":84},[67,1859,1860],{"class":73}," np.clip(action, ",[67,1862,1863],{"class":84},"-",[67,1865,992],{"class":77},[67,1867,1868],{"class":73},", ",[67,1870,992],{"class":77},[67,1872,829],{"class":73},[67,1874,1875,1877,1879,1881,1883],{"class":69,"line":191},[67,1876,74],{"class":73},[67,1878,78],{"class":77},[67,1880,81],{"class":73},[67,1882,85],{"class":84},[67,1884,1885],{"class":73}," action\n",[14,1887,1889],{"id":1888},"_8本章小结","8.本章小结",[19,1891,1892],{},"这一章建立了控制任务的基本形式：",[58,1894,1897],{"className":1895,"code":1896,"language":603,"meta":63},[601],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[32,1898,1896],{"__ignoreMap":63},[19,1900,1901],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1903,1904,1905],"style",{},"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":63,"searchDepth":191,"depth":191,"links":1907},[1908,1909,1910,1915,1919,1920,1921,1929],{"id":16,"depth":191,"text":17},{"id":94,"depth":191,"text":95},{"id":243,"depth":191,"text":244,"children":1911},[1912,1913,1914],{"id":393,"depth":202,"text":394},{"id":453,"depth":202,"text":454},{"id":519,"depth":202,"text":520},{"id":611,"depth":191,"text":612,"children":1916},[1917,1918],{"id":1146,"depth":202,"text":1146},{"id":1246,"depth":202,"text":1246},{"id":1646,"depth":191,"text":1647},{"id":1695,"depth":191,"text":1696},{"id":1747,"depth":191,"text":1748,"children":1922},[1923,1924,1925,1926,1928],{"id":1751,"depth":202,"text":1754},{"id":1763,"depth":202,"text":1763},{"id":1789,"depth":202,"text":1789},{"id":1798,"depth":202,"text":1927},"data.ctrl[0] 写了但没有效果",{"id":1830,"depth":202,"text":1830},{"id":1888,"depth":191,"text":1889},"md",{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":5,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",[1937,6981,8087,9506,12479,13830,15318,16406,25167,25180,25774,25800,25924,26165,26230,26248,26261,26308,26431,26600,26799,26977,27182,27318,27413,27450,27463,27772,28510,29218,29239,30258,31888,32039,32052,32064,32359,52161,52176,52193,52226,55092,78438,94582,94603,94716,94837,95607,96270,96631,96669,96775,96875,96918,96944,97005,98657,98758,98783,99274,99774,100854,101137,101879,102381,102393,104341,105990,107485,108955,110872,112791,114813,118283,118715,119178,119927,122871,123219,123241,123597,126904,126916,127319,127342,127489,127656,127861,128162,128719,129376,131307,132905,133554,135048,136479,137714,139408,141160,143570,143686,144621,144832,145717,146952,147180,147193,148348,150760,153128,156449,158926,160570,162347,164360,167412,169592,172119,174313],{"id":1938,"title":1939,"body":1940,"description":63,"extension":1930,"meta":6976,"navigation":630,"path":6977,"seo":6978,"stem":6979,"__hash__":6980},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1941,"toc":6948},[1942,1945,1949,1952,1956,1967,1971,1975,1978,1981,1984,1987,1990,2016,2020,2023,2026,2029,2032,2083,2087,2105,2107,2121,2124,2132,2135,2986,2993,3010,3014,3100,3104,3110,3196,3200,3238,3242,3306,3310,3314,3321,3332,3336,3341,3345,3350,3354,3359,3363,3367,3372,3622,3627,3765,3770,4025,4028,4036,4040,4045,4148,4151,4449,4458,4559,4562,4565,4568,4571,4831,4836,4974,4977,5155,5158,5286,5289,5441,5445,5450,5453,5464,5472,5475,5580,5584,5588,5593,5643,5648,5653,5677,5682,5735,5738,5743,5920,5925,6210,6215,6611,6615,6620,6677,6682,6690,6693,6833,6836,6945],[10,1943,1939],{"id":1944},"_1基础入门",[14,1946,1948],{"id":1947},"_11注释","1.1注释",[19,1950,1951],{},"\u002F\u002F或者\u002F* *\u002F",[14,1953,1955],{"id":1954},"_12命名","1.2命名",[26,1957,1958,1961,1964],{},[29,1959,1960],{},"字母数字下划线",[29,1962,1963],{},"开头必须是字母或_",[29,1965,1966],{},"不能使用关键词",[14,1968,1970],{"id":1969},"_13数据类型","1.3数据类型",[391,1972,1974],{"id":1973},"_131整形","1.3.1整形",[19,1976,1977],{},"short 短整形 2",[19,1979,1980],{},"int 整形 4",[19,1982,1983],{},"long 长整形 win4 linux32位4 linux64位8",[19,1985,1986],{},"long long 长长整形 8",[19,1988,1989],{},"利用sizeof可以求数据类型占用的内存空间大小",[58,1991,1995],{"className":1992,"code":1993,"language":1994,"meta":63,"style":63},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[32,1996,1997,2009],{"__ignoreMap":63},[67,1998,1999,2002,2004,2007],{"class":69,"line":70},[67,2000,2001],{"class":84},"sizeof",[67,2003,854],{"class":73},[67,2005,2006],{"class":84},"int",[67,2008,829],{"class":73},[67,2010,2011,2013],{"class":69,"line":191},[67,2012,2001],{"class":84},[67,2014,2015],{"class":73},"(num)\n",[391,2017,2019],{"id":2018},"_132浮点型","1.3.2浮点型",[19,2021,2022],{},"float 单精度 4节 7位有效数字",[19,2024,2025],{},"double 双精度 8节 15-16有效数字",[19,2027,2028],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2030,2031],{},"注意点：",[58,2033,2035],{"className":1992,"code":2034,"language":1994,"meta":63,"style":63},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[32,2036,2037,2060],{"__ignoreMap":63},[67,2038,2039,2042,2045,2047,2050,2053,2056],{"class":69,"line":70},[67,2040,2041],{"class":84},"float",[67,2043,2044],{"class":73}," f1",[67,2046,85],{"class":84},[67,2048,2049],{"class":77},"3.14",[67,2051,2052],{"class":84},"f",[67,2054,2055],{"class":73},";",[67,2057,2059],{"class":2058},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[67,2061,2062,2064,2067,2069,2072,2075,2078,2080],{"class":69,"line":191},[67,2063,2041],{"class":84},[67,2065,2066],{"class":73}," f2",[67,2068,85],{"class":84},[67,2070,2071],{"class":77},"3",[67,2073,2074],{"class":84},"e",[67,2076,2077],{"class":77},"2",[67,2079,2055],{"class":73},[67,2081,2082],{"class":2058}," \u002F\u002F科学记数法\n",[391,2084,2086],{"id":2085},"_133字符型","1.3.3字符型",[58,2088,2090],{"className":1992,"code":2089,"language":1994,"meta":63,"style":63},"char ch='a'\n",[32,2091,2092],{"__ignoreMap":63},[67,2093,2094,2097,2100,2102],{"class":69,"line":70},[67,2095,2096],{"class":84},"char",[67,2098,2099],{"class":73}," ch",[67,2101,85],{"class":84},[67,2103,2104],{"class":114},"'a'\n",[19,2106,2031],{},[26,2108,2109,2112,2115,2118],{},[29,2110,2111],{},"在显示字符型变量时，只能单引号，双引号x",[29,2113,2114],{},"单引号内只能一个字符，不能字符串",[29,2116,2117],{},"c和c++字符型变量只占用一个字符",[29,2119,2120],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2122,2123],{},"ASCII码大致由以下两部分组成：",[26,2125,2126,2129],{},[29,2127,2128],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[29,2130,2131],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2133,2134],{},"ASCII码表格：",[399,2136,2137,2178],{},[402,2138,2139],{},[405,2140,2141,2148,2153,2157,2162,2166,2170,2174],{},[408,2142,2143,2147],{},[2144,2145,2146],"strong",{},"ASCII","值",[408,2149,2150],{},[2144,2151,2152],{},"控制字符",[408,2154,2155,2147],{},[2144,2156,2146],{},[408,2158,2159],{},[2144,2160,2161],{},"字符",[408,2163,2164,2147],{},[2144,2165,2146],{},[408,2167,2168],{},[2144,2169,2161],{},[408,2171,2172,2147],{},[2144,2173,2146],{},[408,2175,2176],{},[2144,2177,2161],{},[419,2179,2180,2205,2231,2256,2281,2306,2331,2356,2382,2407,2433,2458,2484,2509,2534,2560,2586,2610,2635,2660,2685,2710,2735,2760,2785,2810,2835,2861,2886,2910,2935,2961],{},[405,2181,2182,2184,2187,2190,2193,2196,2199,2202],{},[424,2183,78],{},[424,2185,2186],{},"NUT",[424,2188,2189],{},"32",[424,2191,2192],{},"(space)",[424,2194,2195],{},"64",[424,2197,2198],{},"@",[424,2200,2201],{},"96",[424,2203,2204],{},"、",[405,2206,2207,2210,2213,2216,2219,2222,2225,2228],{},[424,2208,2209],{},"1",[424,2211,2212],{},"SOH",[424,2214,2215],{},"33",[424,2217,2218],{},"!",[424,2220,2221],{},"65",[424,2223,2224],{},"A",[424,2226,2227],{},"97",[424,2229,2230],{},"a",[405,2232,2233,2235,2238,2241,2244,2247,2250,2253],{},[424,2234,2077],{},[424,2236,2237],{},"STX",[424,2239,2240],{},"34",[424,2242,2243],{},"\"",[424,2245,2246],{},"66",[424,2248,2249],{},"B",[424,2251,2252],{},"98",[424,2254,2255],{},"b",[405,2257,2258,2260,2263,2266,2269,2272,2275,2278],{},[424,2259,2071],{},[424,2261,2262],{},"ETX",[424,2264,2265],{},"35",[424,2267,2268],{},"#",[424,2270,2271],{},"67",[424,2273,2274],{},"C",[424,2276,2277],{},"99",[424,2279,2280],{},"c",[405,2282,2283,2285,2288,2291,2294,2297,2300,2303],{},[424,2284,1047],{},[424,2286,2287],{},"EOT",[424,2289,2290],{},"36",[424,2292,2293],{},"$",[424,2295,2296],{},"68",[424,2298,2299],{},"D",[424,2301,2302],{},"100",[424,2304,2305],{},"d",[405,2307,2308,2311,2314,2317,2320,2323,2326,2329],{},[424,2309,2310],{},"5",[424,2312,2313],{},"ENQ",[424,2315,2316],{},"37",[424,2318,2319],{},"%",[424,2321,2322],{},"69",[424,2324,2325],{},"E",[424,2327,2328],{},"101",[424,2330,2074],{},[405,2332,2333,2336,2339,2342,2345,2348,2351,2354],{},[424,2334,2335],{},"6",[424,2337,2338],{},"ACK",[424,2340,2341],{},"38",[424,2343,2344],{},"&",[424,2346,2347],{},"70",[424,2349,2350],{},"F",[424,2352,2353],{},"102",[424,2355,2052],{},[405,2357,2358,2361,2364,2367,2370,2373,2376,2379],{},[424,2359,2360],{},"7",[424,2362,2363],{},"BEL",[424,2365,2366],{},"39",[424,2368,2369],{},",",[424,2371,2372],{},"71",[424,2374,2375],{},"G",[424,2377,2378],{},"103",[424,2380,2381],{},"g",[405,2383,2384,2387,2390,2393,2395,2398,2401,2404],{},[424,2385,2386],{},"8",[424,2388,2389],{},"BS",[424,2391,2392],{},"40",[424,2394,854],{},[424,2396,2397],{},"72",[424,2399,2400],{},"H",[424,2402,2403],{},"104",[424,2405,2406],{},"h",[405,2408,2409,2412,2415,2418,2421,2424,2427,2430],{},[424,2410,2411],{},"9",[424,2413,2414],{},"HT",[424,2416,2417],{},"41",[424,2419,2420],{},")",[424,2422,2423],{},"73",[424,2425,2426],{},"I",[424,2428,2429],{},"105",[424,2431,2432],{},"i",[405,2434,2435,2438,2441,2444,2446,2449,2452,2455],{},[424,2436,2437],{},"10",[424,2439,2440],{},"LF",[424,2442,2443],{},"42",[424,2445,965],{},[424,2447,2448],{},"74",[424,2450,2451],{},"J",[424,2453,2454],{},"106",[424,2456,2457],{},"j",[405,2459,2460,2463,2466,2469,2472,2475,2478,2481],{},[424,2461,2462],{},"11",[424,2464,2465],{},"VT",[424,2467,2468],{},"43",[424,2470,2471],{},"+",[424,2473,2474],{},"75",[424,2476,2477],{},"K",[424,2479,2480],{},"107",[424,2482,2483],{},"k",[405,2485,2486,2489,2492,2495,2497,2500,2503,2506],{},[424,2487,2488],{},"12",[424,2490,2491],{},"FF",[424,2493,2494],{},"44",[424,2496,2369],{},[424,2498,2499],{},"76",[424,2501,2502],{},"L",[424,2504,2505],{},"108",[424,2507,2508],{},"l",[405,2510,2511,2514,2517,2520,2522,2525,2528,2531],{},[424,2512,2513],{},"13",[424,2515,2516],{},"CR",[424,2518,2519],{},"45",[424,2521,1863],{},[424,2523,2524],{},"77",[424,2526,2527],{},"M",[424,2529,2530],{},"109",[424,2532,2533],{},"m",[405,2535,2536,2539,2542,2545,2548,2551,2554,2557],{},[424,2537,2538],{},"14",[424,2540,2541],{},"SO",[424,2543,2544],{},"46",[424,2546,2547],{},".",[424,2549,2550],{},"78",[424,2552,2553],{},"N",[424,2555,2556],{},"110",[424,2558,2559],{},"n",[405,2561,2562,2565,2568,2571,2574,2577,2580,2583],{},[424,2563,2564],{},"15",[424,2566,2567],{},"SI",[424,2569,2570],{},"47",[424,2572,2573],{},"\u002F",[424,2575,2576],{},"79",[424,2578,2579],{},"O",[424,2581,2582],{},"111",[424,2584,2585],{},"o",[405,2587,2588,2591,2594,2597,2599,2602,2605,2608],{},[424,2589,2590],{},"16",[424,2592,2593],{},"DLE",[424,2595,2596],{},"48",[424,2598,78],{},[424,2600,2601],{},"80",[424,2603,2604],{},"P",[424,2606,2607],{},"112",[424,2609,19],{},[405,2611,2612,2615,2618,2621,2623,2626,2629,2632],{},[424,2613,2614],{},"17",[424,2616,2617],{},"DCI",[424,2619,2620],{},"49",[424,2622,2209],{},[424,2624,2625],{},"81",[424,2627,2628],{},"Q",[424,2630,2631],{},"113",[424,2633,2634],{},"q",[405,2636,2637,2640,2643,2646,2648,2651,2654,2657],{},[424,2638,2639],{},"18",[424,2641,2642],{},"DC2",[424,2644,2645],{},"50",[424,2647,2077],{},[424,2649,2650],{},"82",[424,2652,2653],{},"R",[424,2655,2656],{},"114",[424,2658,2659],{},"r",[405,2661,2662,2665,2668,2671,2673,2676,2679,2682],{},[424,2663,2664],{},"19",[424,2666,2667],{},"DC3",[424,2669,2670],{},"51",[424,2672,2071],{},[424,2674,2675],{},"83",[424,2677,2678],{},"S",[424,2680,2681],{},"115",[424,2683,2684],{},"s",[405,2686,2687,2690,2693,2696,2698,2701,2704,2707],{},[424,2688,2689],{},"20",[424,2691,2692],{},"DC4",[424,2694,2695],{},"52",[424,2697,1047],{},[424,2699,2700],{},"84",[424,2702,2703],{},"T",[424,2705,2706],{},"116",[424,2708,2709],{},"t",[405,2711,2712,2715,2718,2721,2723,2726,2729,2732],{},[424,2713,2714],{},"21",[424,2716,2717],{},"NAK",[424,2719,2720],{},"53",[424,2722,2310],{},[424,2724,2725],{},"85",[424,2727,2728],{},"U",[424,2730,2731],{},"117",[424,2733,2734],{},"u",[405,2736,2737,2740,2743,2746,2748,2751,2754,2757],{},[424,2738,2739],{},"22",[424,2741,2742],{},"SYN",[424,2744,2745],{},"54",[424,2747,2335],{},[424,2749,2750],{},"86",[424,2752,2753],{},"V",[424,2755,2756],{},"118",[424,2758,2759],{},"v",[405,2761,2762,2765,2768,2771,2773,2776,2779,2782],{},[424,2763,2764],{},"23",[424,2766,2767],{},"TB",[424,2769,2770],{},"55",[424,2772,2360],{},[424,2774,2775],{},"87",[424,2777,2778],{},"W",[424,2780,2781],{},"119",[424,2783,2784],{},"w",[405,2786,2787,2790,2793,2796,2798,2801,2804,2807],{},[424,2788,2789],{},"24",[424,2791,2792],{},"CAN",[424,2794,2795],{},"56",[424,2797,2386],{},[424,2799,2800],{},"88",[424,2802,2803],{},"X",[424,2805,2806],{},"120",[424,2808,2809],{},"x",[405,2811,2812,2815,2818,2821,2823,2826,2829,2832],{},[424,2813,2814],{},"25",[424,2816,2817],{},"EM",[424,2819,2820],{},"57",[424,2822,2411],{},[424,2824,2825],{},"89",[424,2827,2828],{},"Y",[424,2830,2831],{},"121",[424,2833,2834],{},"y",[405,2836,2837,2840,2843,2846,2849,2852,2855,2858],{},[424,2838,2839],{},"26",[424,2841,2842],{},"SUB",[424,2844,2845],{},"58",[424,2847,2848],{},":",[424,2850,2851],{},"90",[424,2853,2854],{},"Z",[424,2856,2857],{},"122",[424,2859,2860],{},"z",[405,2862,2863,2866,2869,2872,2874,2877,2880,2883],{},[424,2864,2865],{},"27",[424,2867,2868],{},"ESC",[424,2870,2871],{},"59",[424,2873,2055],{},[424,2875,2876],{},"91",[424,2878,2879],{},"[",[424,2881,2882],{},"123",[424,2884,2885],{},"{",[405,2887,2888,2891,2894,2897,2899,2902,2904,2907],{},[424,2889,2890],{},"28",[424,2892,2893],{},"FS",[424,2895,2896],{},"60",[424,2898,259],{},[424,2900,2901],{},"92",[424,2903,2573],{},[424,2905,2906],{},"124",[424,2908,2909],{},"|",[405,2911,2912,2915,2918,2921,2923,2926,2929,2932],{},[424,2913,2914],{},"29",[424,2916,2917],{},"GS",[424,2919,2920],{},"61",[424,2922,85],{},[424,2924,2925],{},"93",[424,2927,2928],{},"]",[424,2930,2931],{},"125",[424,2933,2934],{},"}",[405,2936,2937,2940,2943,2946,2949,2952,2955,2958],{},[424,2938,2939],{},"30",[424,2941,2942],{},"RS",[424,2944,2945],{},"62",[424,2947,2948],{},">",[424,2950,2951],{},"94",[424,2953,2954],{},"^",[424,2956,2957],{},"126",[424,2959,2960],{},"`",[405,2962,2963,2966,2969,2972,2975,2978,2980,2983],{},[424,2964,2965],{},"31",[424,2967,2968],{},"US",[424,2970,2971],{},"63",[424,2973,2974],{},"?",[424,2976,2977],{},"95",[424,2979,1530],{},[424,2981,2982],{},"127",[424,2984,2985],{},"DEL",[19,2987,2988,2989,2992],{},"ASCII 码大致由以下",[2144,2990,2991],{},"两部分组","成：",[2994,2995,2996,3003],"ul",{},[29,2997,2998,2999,3002],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2144,3000,3001],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[29,3004,3005,3006,3009],{},"ASCII 打印字符：数字 ",[2144,3007,3008],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[391,3011,3013],{"id":3012},"_134转义字符","1.3.4转义字符",[58,3015,3017],{"className":1992,"code":3016,"language":1994,"meta":63,"style":63},"\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",[32,3018,3019,3024,3040,3054,3059,3072,3077],{"__ignoreMap":63},[67,3020,3021],{"class":69,"line":70},[67,3022,3023],{"class":2058},"\u002F\u002F换行符\n",[67,3025,3026,3029,3032,3035,3037],{"class":69,"line":191},[67,3027,3028],{"class":73},"cout ",[67,3030,3031],{"class":84},"\u003C\u003C",[67,3033,3034],{"class":114},"\"hello world\u002Fn\"",[67,3036,2055],{"class":73},[67,3038,3039],{"class":2058}," \u002F\u002F就等同于如下：\n",[67,3041,3042,3044,3046,3049,3051],{"class":69,"line":202},[67,3043,3028],{"class":73},[67,3045,3031],{"class":84},[67,3047,3048],{"class":114},"\"hello world\"",[67,3050,3031],{"class":84},[67,3052,3053],{"class":73},"endl;\n",[67,3055,3056],{"class":69,"line":641},[67,3057,3058],{"class":2058},"\u002F\u002F反斜杠\n",[67,3060,3061,3063,3065,3068,3070],{"class":69,"line":655},[67,3062,3028],{"class":73},[67,3064,3031],{"class":84},[67,3066,3067],{"class":114},"\"\u002F\u002F\"",[67,3069,3031],{"class":84},[67,3071,3053],{"class":73},[67,3073,3074],{"class":69,"line":660},[67,3075,3076],{"class":2058},"\u002F\u002F水平制表符\n",[67,3078,3079,3081,3083,3086,3089,3092,3094,3097],{"class":69,"line":665},[67,3080,3028],{"class":73},[67,3082,3031],{"class":84},[67,3084,3085],{"class":114},"\"aaaa",[67,3087,3088],{"class":77},"\\t",[67,3090,3091],{"class":114},"helloworld\"",[67,3093,3031],{"class":84},[67,3095,3096],{"class":73},"endl;",[67,3098,3099],{"class":2058}," \u002F\u002F输出窗口时有对齐效果\n",[391,3101,3103],{"id":3102},"_135字符串型","1.3.5字符串型",[19,3105,3106,3107,3109],{},"char 变量名",[67,3108],{},"=\"字符串值\"",[58,3111,3113],{"className":1992,"code":3112,"language":1994,"meta":63,"style":63},"\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",[32,3114,3115,3120,3125,3130,3135,3149,3162,3167,3172,3183],{"__ignoreMap":63},[67,3116,3117],{"class":69,"line":70},[67,3118,3119],{"class":2058},"\u002F\u002Fc风格字符串\n",[67,3121,3122],{"class":69,"line":191},[67,3123,3124],{"class":2058},"\u002F\u002F注意事项：\n",[67,3126,3127],{"class":69,"line":202},[67,3128,3129],{"class":2058},"\u002F\u002F1.char字符串名[]\n",[67,3131,3132],{"class":69,"line":641},[67,3133,3134],{"class":2058},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[67,3136,3137,3139,3142,3144,3146],{"class":69,"line":655},[67,3138,2096],{"class":84},[67,3140,3141],{"class":73}," str[]",[67,3143,85],{"class":84},[67,3145,3048],{"class":114},[67,3147,3148],{"class":73},";\n",[67,3150,3151,3153,3155,3158,3160],{"class":69,"line":660},[67,3152,3028],{"class":73},[67,3154,3031],{"class":84},[67,3156,3157],{"class":73},"str",[67,3159,3031],{"class":84},[67,3161,3053],{"class":73},[67,3163,3164],{"class":69,"line":665},[67,3165,3166],{"class":2058},"\u002F\u002Fc++风格字符串\n",[67,3168,3169],{"class":69,"line":677},[67,3170,3171],{"class":2058},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[67,3173,3174,3177,3179,3181],{"class":69,"line":683},[67,3175,3176],{"class":73},"string str2",[67,3178,85],{"class":84},[67,3180,3048],{"class":114},[67,3182,3148],{"class":73},[67,3184,3185,3187,3189,3192,3194],{"class":69,"line":689},[67,3186,3028],{"class":73},[67,3188,3031],{"class":84},[67,3190,3191],{"class":73},"str2",[67,3193,3031],{"class":84},[67,3195,3053],{"class":73},[391,3197,3199],{"id":3198},"_136布尔类型bool","1.3.6布尔类型bool",[58,3201,3203],{"className":1992,"code":3202,"language":1994,"meta":63,"style":63},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[32,3204,3205,3220],{"__ignoreMap":63},[67,3206,3207,3210,3213,3215,3218],{"class":69,"line":70},[67,3208,3209],{"class":84},"bool",[67,3211,3212],{"class":73}," flag",[67,3214,85],{"class":84},[67,3216,3217],{"class":77},"true",[67,3219,3148],{"class":73},[67,3221,3222,3225,3228,3231,3233,3235],{"class":69,"line":191},[67,3223,3224],{"class":73},"cout",[67,3226,3227],{"class":84},"\u003C\u003Csizeof",[67,3229,3230],{"class":73},"(flag)",[67,3232,3031],{"class":84},[67,3234,3096],{"class":73},[67,3236,3237],{"class":2058}," \u002F\u002F查看布尔占内存空间\n",[14,3239,3241],{"id":3240},"_14键盘输入cin","1.4键盘输入cin",[58,3243,3245],{"className":1992,"code":3244,"language":1994,"meta":63,"style":63},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[32,3246,3247,3260,3277,3288],{"__ignoreMap":63},[67,3248,3249,3251,3254,3256,3258],{"class":69,"line":70},[67,3250,2006],{"class":84},[67,3252,3253],{"class":73}," a",[67,3255,85],{"class":84},[67,3257,78],{"class":77},[67,3259,3148],{"class":73},[67,3261,3262,3264,3266,3269,3271,3273,3275],{"class":69,"line":191},[67,3263,3224],{"class":73},[67,3265,3031],{"class":84},[67,3267,3268],{"class":114},"\"请给整型变量a赋值\"",[67,3270,3031],{"class":84},[67,3272,2230],{"class":73},[67,3274,3031],{"class":84},[67,3276,3053],{"class":73},[67,3278,3279,3282,3285],{"class":69,"line":202},[67,3280,3281],{"class":73},"cin ",[67,3283,3284],{"class":84},">>",[67,3286,3287],{"class":73}," a;\n",[67,3289,3290,3292,3294,3297,3300,3302,3304],{"class":69,"line":641},[67,3291,3028],{"class":73},[67,3293,3031],{"class":84},[67,3295,3296],{"class":114}," \"整型变量a=\"",[67,3298,3299],{"class":84}," \u003C\u003C",[67,3301,2230],{"class":73},[67,3303,3031],{"class":84},[67,3305,3053],{"class":73},[14,3307,3309],{"id":3308},"_15运算符","1.5运算符",[391,3311,3313],{"id":3312},"_151算术运算符","1.5.1算术运算符",[19,3315,3316,3320],{},[3317,3318],"img",{"alt":63,"src":3319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[26,3322,3323,3326,3329],{},[29,3324,3325],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[29,3327,3328],{},"两个小数不可以做取模运算",[29,3330,3331],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[391,3333,3335],{"id":3334},"_152赋值运算符","1.5.2赋值运算符",[19,3337,3338],{},[3317,3339],{"alt":63,"src":3340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[391,3342,3344],{"id":3343},"_153比较运算符","1.5.3比较运算符",[19,3346,3347],{},[3317,3348],{"alt":63,"src":3349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[391,3351,3353],{"id":3352},"_154逻辑运算符","1.5.4逻辑运算符",[19,3355,3356],{},[3317,3357],{"alt":63,"src":3358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3360,3362],{"id":3361},"_16程序流程结构","1.6程序流程结构",[391,3364,3366],{"id":3365},"_161选择结构","1.6.1选择结构",[26,3368,3369],{},[29,3370,3371],{},"if语句\n单行、多行、多条件if语句",[58,3373,3375],{"className":1992,"code":3374,"language":1994,"meta":63,"style":63},"\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",[32,3376,3377,3382,3396,3401,3415,3420,3425,3434,3447,3451,3464,3468,3473,3477,3490,3494,3499,3519,3523,3536,3540,3568,3572,3588,3592,3596,3600,3613,3617],{"__ignoreMap":63},[67,3378,3379],{"class":69,"line":70},[67,3380,3381],{"class":2058},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[67,3383,3384,3386,3389,3391,3394],{"class":69,"line":191},[67,3385,1096],{"class":84},[67,3387,3388],{"class":73},"(score",[67,3390,2948],{"class":84},[67,3392,3393],{"class":77},"600",[67,3395,829],{"class":73},[67,3397,3398],{"class":69,"line":202},[67,3399,3400],{"class":73},"{\n",[67,3402,3403,3406,3408,3411,3413],{"class":69,"line":641},[67,3404,3405],{"class":73},"    cout",[67,3407,3031],{"class":84},[67,3409,3410],{"class":114},"'这是单行if语句'",[67,3412,3031],{"class":84},[67,3414,3053],{"class":73},[67,3416,3417],{"class":69,"line":655},[67,3418,3419],{"class":73},"}\n",[67,3421,3422],{"class":69,"line":660},[67,3423,3424],{"class":2058},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[67,3426,3427,3429,3431],{"class":69,"line":665},[67,3428,3281],{"class":73},[67,3430,3284],{"class":84},[67,3432,3433],{"class":73}," score\n",[67,3435,3436,3438,3440,3443,3445],{"class":69,"line":677},[67,3437,1096],{"class":84},[67,3439,3388],{"class":73},[67,3441,3442],{"class":84},"\u003C=",[67,3444,3393],{"class":77},[67,3446,829],{"class":73},[67,3448,3449],{"class":69,"line":683},[67,3450,3400],{"class":73},[67,3452,3453,3455,3457,3460,3462],{"class":69,"line":689},[67,3454,3405],{"class":73},[67,3456,3284],{"class":84},[67,3458,3459],{"class":114},"\"小于等于600\"",[67,3461,3031],{"class":84},[67,3463,3053],{"class":73},[67,3465,3466],{"class":69,"line":694},[67,3467,3419],{"class":73},[67,3469,3470],{"class":69,"line":700},[67,3471,3472],{"class":84},"else\n",[67,3474,3475],{"class":69,"line":706},[67,3476,3400],{"class":73},[67,3478,3479,3481,3483,3486,3488],{"class":69,"line":712},[67,3480,3405],{"class":73},[67,3482,3284],{"class":84},[67,3484,3485],{"class":114},"\"大于600\"",[67,3487,3284],{"class":84},[67,3489,3053],{"class":73},[67,3491,3492],{"class":69,"line":717},[67,3493,3419],{"class":73},[67,3495,3496],{"class":69,"line":723},[67,3497,3498],{"class":2058},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[67,3500,3501,3503,3506,3508,3510,3513,3515,3517],{"class":69,"line":729},[67,3502,1096],{"class":84},[67,3504,3505],{"class":73}," (",[67,3507,78],{"class":77},[67,3509,259],{"class":84},[67,3511,3512],{"class":73},"num",[67,3514,259],{"class":84},[67,3516,2302],{"class":77},[67,3518,829],{"class":73},[67,3520,3521],{"class":69,"line":735},[67,3522,3400],{"class":73},[67,3524,3525,3527,3529,3532,3534],{"class":69,"line":741},[67,3526,3405],{"class":73},[67,3528,3031],{"class":84},[67,3530,3531],{"class":114},"\"小于100\"",[67,3533,3031],{"class":84},[67,3535,3053],{"class":73},[67,3537,3538],{"class":69,"line":747},[67,3539,3419],{"class":73},[67,3541,3542,3545,3548,3551,3554,3556,3559,3561,3563,3566],{"class":69,"line":753},[67,3543,3544],{"class":84},"else",[67,3546,3547],{"class":84}," if",[67,3549,3550],{"class":73}," (nmu",[67,3552,3553],{"class":84},">=",[67,3555,2302],{"class":77},[67,3557,3558],{"class":84},"&&",[67,3560,3512],{"class":73},[67,3562,259],{"class":84},[67,3564,3565],{"class":77},"200",[67,3567,829],{"class":73},[67,3569,3570],{"class":69,"line":758},[67,3571,3400],{"class":73},[67,3573,3574,3576,3578,3581,3583,3585],{"class":69,"line":764},[67,3575,3405],{"class":73},[67,3577,3031],{"class":84},[67,3579,3580],{"class":114},"\"不小于100且小于200\"",[67,3582,3031],{"class":84},[67,3584,3096],{"class":73},[67,3586,3587],{"class":2058}," \u002F\u002F可以无限else if,python中是elif：\n",[67,3589,3590],{"class":69,"line":770},[67,3591,3419],{"class":73},[67,3593,3594],{"class":69,"line":776},[67,3595,3472],{"class":84},[67,3597,3598],{"class":69,"line":782},[67,3599,3400],{"class":73},[67,3601,3602,3604,3606,3609,3611],{"class":69,"line":788},[67,3603,3405],{"class":73},[67,3605,3031],{"class":84},[67,3607,3608],{"class":114},"\"不小于200\"",[67,3610,3031],{"class":84},[67,3612,3053],{"class":73},[67,3614,3615],{"class":69,"line":793},[67,3616,3419],{"class":73},[67,3618,3619],{"class":69,"line":798},[67,3620,3621],{"class":2058},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[26,3623,3624],{"start":191},[29,3625,3626],{},"三目运算符",[58,3628,3630],{"className":1992,"code":3629,"language":1994,"meta":63,"style":63},"\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",[32,3631,3632,3637,3642,3668,3690,3707,3712,3735,3750],{"__ignoreMap":63},[67,3633,3634],{"class":69,"line":70},[67,3635,3636],{"class":2058},"\u002F\u002F创建三个变量a,b,c\n",[67,3638,3639],{"class":69,"line":191},[67,3640,3641],{"class":2058},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[67,3643,3644,3646,3648,3650,3652,3655,3657,3659,3662,3664,3666],{"class":69,"line":202},[67,3645,2006],{"class":84},[67,3647,3253],{"class":73},[67,3649,85],{"class":84},[67,3651,2689],{"class":77},[67,3653,3654],{"class":73},",b",[67,3656,85],{"class":84},[67,3658,2437],{"class":77},[67,3660,3661],{"class":73},",c",[67,3663,85],{"class":84},[67,3665,78],{"class":77},[67,3667,3148],{"class":73},[67,3669,3670,3672,3674,3677,3679,3681,3683,3685,3687],{"class":69,"line":641},[67,3671,2280],{"class":73},[67,3673,85],{"class":84},[67,3675,3676],{"class":73},"(a",[67,3678,2948],{"class":84},[67,3680,2255],{"class":73},[67,3682,2974],{"class":84},[67,3684,2230],{"class":73},[67,3686,2848],{"class":84},[67,3688,3689],{"class":73},"b)\n",[67,3691,3692,3694,3696,3699,3701,3703,3705],{"class":69,"line":655},[67,3693,3224],{"class":73},[67,3695,3031],{"class":84},[67,3697,3698],{"class":114},"\"c=\"",[67,3700,3031],{"class":84},[67,3702,2280],{"class":73},[67,3704,3031],{"class":84},[67,3706,3053],{"class":73},[67,3708,3709],{"class":69,"line":660},[67,3710,3711],{"class":2058},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[67,3713,3714,3716,3718,3720,3722,3724,3726,3729,3731,3733],{"class":69,"line":665},[67,3715,3676],{"class":73},[67,3717,2948],{"class":84},[67,3719,2255],{"class":73},[67,3721,2974],{"class":84},[67,3723,2230],{"class":73},[67,3725,2848],{"class":84},[67,3727,3728],{"class":73},"b)",[67,3730,85],{"class":84},[67,3732,2302],{"class":77},[67,3734,3148],{"class":73},[67,3736,3737,3739,3741,3743,3745,3747],{"class":69,"line":677},[67,3738,3224],{"class":73},[67,3740,3031],{"class":84},[67,3742,2230],{"class":73},[67,3744,3031],{"class":84},[67,3746,3096],{"class":73},[67,3748,3749],{"class":2058}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[67,3751,3752,3754,3756,3758,3760,3762],{"class":69,"line":683},[67,3753,3224],{"class":73},[67,3755,3031],{"class":84},[67,3757,2255],{"class":73},[67,3759,3031],{"class":84},[67,3761,3096],{"class":73},[67,3763,3764],{"class":2058}," \u002F\u002F10   a>b,b还是原值\n",[26,3766,3767],{"start":202},[29,3768,3769],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[58,3771,3773],{"className":1992,"code":3772,"language":1994,"meta":63,"style":63},"\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",[32,3774,3775,3780,3788,3801,3810,3814,3828,3841,3851,3859,3864,3889,3910,3932,3953,3975,3996,4016,4021],{"__ignoreMap":63},[67,3776,3777],{"class":69,"line":70},[67,3778,3779],{"class":2058},"\u002F\u002F案例-电影打分\n",[67,3781,3782,3785],{"class":69,"line":191},[67,3783,3784],{"class":84},"#include",[67,3786,3787],{"class":114},"\u003Ciostream>\n",[67,3789,3790,3793,3796,3799],{"class":69,"line":202},[67,3791,3792],{"class":84},"using",[67,3794,3795],{"class":84}," namespace",[67,3797,3798],{"class":110}," std",[67,3800,3148],{"class":73},[67,3802,3803,3805,3807],{"class":69,"line":641},[67,3804,2006],{"class":84},[67,3806,804],{"class":110},[67,3808,3809],{"class":73},"()\n",[67,3811,3812],{"class":69,"line":655},[67,3813,3400],{"class":73},[67,3815,3816,3819,3822,3824,3826],{"class":69,"line":660},[67,3817,3818],{"class":84},"    int",[67,3820,3821],{"class":73}," score",[67,3823,85],{"class":84},[67,3825,78],{"class":77},[67,3827,3148],{"class":73},[67,3829,3830,3832,3834,3837,3839],{"class":69,"line":665},[67,3831,3405],{"class":73},[67,3833,3031],{"class":84},[67,3835,3836],{"class":114},"\"电影打分：\"",[67,3838,3031],{"class":84},[67,3840,3053],{"class":73},[67,3842,3843,3846,3848],{"class":69,"line":677},[67,3844,3845],{"class":73},"    cin",[67,3847,3284],{"class":84},[67,3849,3850],{"class":73},"score;\n",[67,3852,3853,3856],{"class":69,"line":683},[67,3854,3855],{"class":84},"    switch",[67,3857,3858],{"class":73},"(score)\n",[67,3860,3861],{"class":69,"line":689},[67,3862,3863],{"class":73},"    {\n",[67,3865,3866,3869,3872,3875,3877,3880,3882,3884,3887],{"class":69,"line":694},[67,3867,3868],{"class":84},"        case",[67,3870,3871],{"class":77}," 10",[67,3873,3874],{"class":73},":cout",[67,3876,3031],{"class":84},[67,3878,3879],{"class":114},"\"经典\"",[67,3881,3031],{"class":84},[67,3883,3096],{"class":73},[67,3885,3886],{"class":84},"break",[67,3888,3148],{"class":73},[67,3890,3891,3893,3896,3898,3900,3902,3904,3906,3908],{"class":69,"line":700},[67,3892,3868],{"class":84},[67,3894,3895],{"class":77}," 9",[67,3897,3874],{"class":73},[67,3899,3031],{"class":84},[67,3901,3879],{"class":114},[67,3903,3031],{"class":84},[67,3905,3096],{"class":73},[67,3907,3886],{"class":84},[67,3909,3148],{"class":73},[67,3911,3912,3914,3917,3919,3921,3924,3926,3928,3930],{"class":69,"line":706},[67,3913,3868],{"class":84},[67,3915,3916],{"class":77}," 8",[67,3918,3874],{"class":73},[67,3920,3031],{"class":84},[67,3922,3923],{"class":114},"\"非常好\"",[67,3925,3031],{"class":84},[67,3927,3096],{"class":73},[67,3929,3886],{"class":84},[67,3931,3148],{"class":73},[67,3933,3934,3936,3939,3941,3943,3945,3947,3949,3951],{"class":69,"line":712},[67,3935,3868],{"class":84},[67,3937,3938],{"class":77}," 7",[67,3940,3874],{"class":73},[67,3942,3031],{"class":84},[67,3944,3923],{"class":114},[67,3946,3031],{"class":84},[67,3948,3096],{"class":73},[67,3950,3886],{"class":84},[67,3952,3148],{"class":73},[67,3954,3955,3957,3960,3962,3964,3967,3969,3971,3973],{"class":69,"line":717},[67,3956,3868],{"class":84},[67,3958,3959],{"class":77}," 6",[67,3961,3874],{"class":73},[67,3963,3031],{"class":84},[67,3965,3966],{"class":114},"\"一般\"",[67,3968,3031],{"class":84},[67,3970,3096],{"class":73},[67,3972,3886],{"class":84},[67,3974,3148],{"class":73},[67,3976,3977,3979,3982,3984,3986,3988,3990,3992,3994],{"class":69,"line":723},[67,3978,3868],{"class":84},[67,3980,3981],{"class":77}," 5",[67,3983,3874],{"class":73},[67,3985,3031],{"class":84},[67,3987,3966],{"class":114},[67,3989,3031],{"class":84},[67,3991,3096],{"class":73},[67,3993,3886],{"class":84},[67,3995,3148],{"class":73},[67,3997,3998,4001,4003,4005,4008,4010,4012,4014],{"class":69,"line":729},[67,3999,4000],{"class":84},"        default",[67,4002,3874],{"class":73},[67,4004,3031],{"class":84},[67,4006,4007],{"class":114},"\"烂片\"",[67,4009,3031],{"class":84},[67,4011,3096],{"class":73},[67,4013,3886],{"class":84},[67,4015,3148],{"class":73},[67,4017,4018],{"class":69,"line":735},[67,4019,4020],{"class":73},"    }\n",[67,4022,4023],{"class":69,"line":741},[67,4024,3419],{"class":73},[19,4026,4027],{},"if和switch区别：",[2994,4029,4030,4033],{},[29,4031,4032],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[29,4034,4035],{},"switch优点：结构清晰，执行效率高",[391,4037,4039],{"id":4038},"_162循环结构","1.6.2循环结构",[26,4041,4042],{},[29,4043,4044],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[58,4046,4048],{"className":1992,"code":4047,"language":1994,"meta":63,"style":63},"\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",[32,4049,4050,4055,4063,4067,4080,4094,4098,4118,4128,4132,4144],{"__ignoreMap":63},[67,4051,4052],{"class":69,"line":70},[67,4053,4054],{"class":2058},"\u002F\u002F打印0-9数字\n",[67,4056,4057,4059,4061],{"class":69,"line":191},[67,4058,2006],{"class":84},[67,4060,804],{"class":110},[67,4062,3809],{"class":73},[67,4064,4065],{"class":69,"line":202},[67,4066,3400],{"class":73},[67,4068,4069,4071,4074,4076,4078],{"class":69,"line":641},[67,4070,3818],{"class":84},[67,4072,4073],{"class":73}," num",[67,4075,85],{"class":84},[67,4077,78],{"class":77},[67,4079,3148],{"class":73},[67,4081,4082,4085,4088,4090,4092],{"class":69,"line":655},[67,4083,4084],{"class":84},"    while",[67,4086,4087],{"class":73},"(num",[67,4089,259],{"class":84},[67,4091,2437],{"class":77},[67,4093,829],{"class":73},[67,4095,4096],{"class":69,"line":660},[67,4097,3863],{"class":73},[67,4099,4100,4103,4106,4108,4110,4112,4115],{"class":69,"line":665},[67,4101,4102],{"class":110},"       std",[67,4104,4105],{"class":73},"::cout",[67,4107,3031],{"class":84},[67,4109,3512],{"class":73},[67,4111,3031],{"class":84},[67,4113,4114],{"class":110},"std",[67,4116,4117],{"class":73},"::endl;\n",[67,4119,4120,4123,4126],{"class":69,"line":677},[67,4121,4122],{"class":73},"        num",[67,4124,4125],{"class":84},"++",[67,4127,3148],{"class":73},[67,4129,4130],{"class":69,"line":683},[67,4131,4020],{"class":73},[67,4133,4134,4137,4139,4142],{"class":69,"line":689},[67,4135,4136],{"class":110},"    system",[67,4138,854],{"class":73},[67,4140,4141],{"class":114},"\"pause\"",[67,4143,829],{"class":73},[67,4145,4146],{"class":69,"line":694},[67,4147,3419],{"class":73},[19,4149,4150],{},"注意：写好循环条件，避免死循环情况",[58,4152,4154],{"className":1992,"code":4153,"language":1994,"meta":63,"style":63},"\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",[32,4155,4156,4161,4168,4175,4185,4193,4197,4202,4229,4233,4238,4246,4273,4278,4283,4296,4306,4310,4320,4325,4338,4343,4357,4362,4377,4381,4394,4398,4403,4407,4420,4427,4431,4436,4441,4445],{"__ignoreMap":63},[67,4157,4158],{"class":69,"line":70},[67,4159,4160],{"class":2058},"\u002F\u002F循环结构-猜数字\n",[67,4162,4163,4165],{"class":69,"line":191},[67,4164,3784],{"class":84},[67,4166,4167],{"class":114}," \u003Ciostream>\n",[67,4169,4170,4172],{"class":69,"line":202},[67,4171,3784],{"class":84},[67,4173,4174],{"class":114}," \u003Cctime>\n",[67,4176,4177,4179,4181,4183],{"class":69,"line":641},[67,4178,3792],{"class":84},[67,4180,3795],{"class":84},[67,4182,3798],{"class":110},[67,4184,3148],{"class":73},[67,4186,4187,4189,4191],{"class":69,"line":655},[67,4188,2006],{"class":84},[67,4190,804],{"class":110},[67,4192,3809],{"class":73},[67,4194,4195],{"class":69,"line":660},[67,4196,3400],{"class":73},[67,4198,4199],{"class":69,"line":665},[67,4200,4201],{"class":2058},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[67,4203,4204,4207,4210,4213,4216,4218,4221,4223,4226],{"class":69,"line":677},[67,4205,4206],{"class":110},"    srand",[67,4208,4209],{"class":73},"((",[67,4211,4212],{"class":84},"unsigned",[67,4214,4215],{"class":84}," int",[67,4217,2420],{"class":73},[67,4219,4220],{"class":110},"time",[67,4222,854],{"class":73},[67,4224,4225],{"class":77},"NULL",[67,4227,4228],{"class":73},"));\n",[67,4230,4231],{"class":69,"line":683},[67,4232,631],{"emptyLinePlaceholder":630},[67,4234,4235],{"class":69,"line":689},[67,4236,4237],{"class":2058},"    \u002F\u002F1.系统生成随机数\n",[67,4239,4240,4243],{"class":69,"line":694},[67,4241,4242],{"class":2058},"    \u002F\u002Frand()%100",[67,4244,4245],{"class":2058}," \u002F\u002F生成0-99的随机数\n",[67,4247,4248,4250,4252,4254,4257,4260,4262,4264,4266,4268,4270],{"class":69,"line":700},[67,4249,3818],{"class":84},[67,4251,4073],{"class":73},[67,4253,85],{"class":84},[67,4255,4256],{"class":110},"rand",[67,4258,4259],{"class":73},"()",[67,4261,2319],{"class":84},[67,4263,2302],{"class":77},[67,4265,2471],{"class":84},[67,4267,2209],{"class":77},[67,4269,2055],{"class":73},[67,4271,4272],{"class":2058}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[67,4274,4275],{"class":69,"line":706},[67,4276,4277],{"class":2058},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[67,4279,4280],{"class":69,"line":712},[67,4281,4282],{"class":2058},"    \u002F\u002F2.玩家猜测\n",[67,4284,4285,4287,4290,4292,4294],{"class":69,"line":717},[67,4286,3818],{"class":84},[67,4288,4289],{"class":73}," val",[67,4291,85],{"class":84},[67,4293,78],{"class":77},[67,4295,3148],{"class":73},[67,4297,4298,4300,4302,4304],{"class":69,"line":723},[67,4299,4084],{"class":84},[67,4301,3505],{"class":73},[67,4303,2209],{"class":77},[67,4305,829],{"class":73},[67,4307,4308],{"class":69,"line":729},[67,4309,3863],{"class":73},[67,4311,4312,4315,4317],{"class":69,"line":735},[67,4313,4314],{"class":73},"        cin",[67,4316,3284],{"class":84},[67,4318,4319],{"class":73},"val;\n",[67,4321,4322],{"class":69,"line":741},[67,4323,4324],{"class":2058},"        \u002F\u002F3.判断玩家猜测\n",[67,4326,4327,4330,4333,4335],{"class":69,"line":747},[67,4328,4329],{"class":84},"        if",[67,4331,4332],{"class":73},"(val",[67,4334,259],{"class":84},[67,4336,4337],{"class":73},"num) \n",[67,4339,4340],{"class":69,"line":753},[67,4341,4342],{"class":73},"        {\n",[67,4344,4345,4348,4350,4353,4355],{"class":69,"line":758},[67,4346,4347],{"class":73},"            cout",[67,4349,3031],{"class":84},[67,4351,4352],{"class":114},"\"猜小了！\"",[67,4354,3031],{"class":84},[67,4356,3053],{"class":73},[67,4358,4359],{"class":69,"line":764},[67,4360,4361],{"class":73},"        }\n",[67,4363,4364,4367,4369,4372,4374],{"class":69,"line":770},[67,4365,4366],{"class":84},"        else",[67,4368,3547],{"class":84},[67,4370,4371],{"class":73}," (val",[67,4373,2948],{"class":84},[67,4375,4376],{"class":73},"num)\n",[67,4378,4379],{"class":69,"line":776},[67,4380,4342],{"class":73},[67,4382,4383,4385,4387,4390,4392],{"class":69,"line":782},[67,4384,4347],{"class":73},[67,4386,3031],{"class":84},[67,4388,4389],{"class":114},"\"猜大了！\"",[67,4391,3031],{"class":84},[67,4393,3053],{"class":73},[67,4395,4396],{"class":69,"line":788},[67,4397,4361],{"class":73},[67,4399,4400],{"class":69,"line":793},[67,4401,4402],{"class":84},"        else\n",[67,4404,4405],{"class":69,"line":798},[67,4406,4342],{"class":73},[67,4408,4409,4411,4413,4416,4418],{"class":69,"line":816},[67,4410,4347],{"class":73},[67,4412,3031],{"class":84},[67,4414,4415],{"class":114},"\"猜对了！\"",[67,4417,3031],{"class":84},[67,4419,3053],{"class":73},[67,4421,4422,4425],{"class":69,"line":832},[67,4423,4424],{"class":84},"            break",[67,4426,3148],{"class":73},[67,4428,4429],{"class":69,"line":843},[67,4430,4361],{"class":73},[67,4432,4433],{"class":69,"line":848},[67,4434,4435],{"class":2058},"        \u002F\u002F猜对 退出游戏\n",[67,4437,4438],{"class":69,"line":863},[67,4439,4440],{"class":2058},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[67,4442,4443],{"class":69,"line":876},[67,4444,4020],{"class":73},[67,4446,4447],{"class":69,"line":889},[67,4448,3419],{"class":73},[26,4450,4451],{"start":191},[29,4452,4453,4454,4457],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2144,4455,4456],{},"do...while会先执行一次循环语句","，在判断循环语句",[58,4459,4461],{"className":1992,"code":4460,"language":1994,"meta":63,"style":63},"\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",[32,4462,4463,4468,4476,4480,4492,4500,4504,4521,4528,4532,4545,4555],{"__ignoreMap":63},[67,4464,4465],{"class":69,"line":70},[67,4466,4467],{"class":2058},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[67,4469,4470,4472,4474],{"class":69,"line":191},[67,4471,2006],{"class":84},[67,4473,804],{"class":110},[67,4475,3809],{"class":73},[67,4477,4478],{"class":69,"line":202},[67,4479,3400],{"class":73},[67,4481,4482,4484,4486,4488,4490],{"class":69,"line":641},[67,4483,3818],{"class":84},[67,4485,4073],{"class":73},[67,4487,85],{"class":84},[67,4489,78],{"class":77},[67,4491,3148],{"class":73},[67,4493,4494,4497],{"class":69,"line":655},[67,4495,4496],{"class":84},"    do",[67,4498,4499],{"class":73}," \n",[67,4501,4502],{"class":69,"line":660},[67,4503,3863],{"class":73},[67,4505,4506,4509,4511,4513,4515,4517,4519],{"class":69,"line":665},[67,4507,4508],{"class":110},"        std",[67,4510,4105],{"class":73},[67,4512,3031],{"class":84},[67,4514,3512],{"class":73},[67,4516,3031],{"class":84},[67,4518,4114],{"class":110},[67,4520,4117],{"class":73},[67,4522,4523,4525],{"class":69,"line":677},[67,4524,4122],{"class":73},[67,4526,4527],{"class":84},"++\n",[67,4529,4530],{"class":69,"line":683},[67,4531,4020],{"class":73},[67,4533,4534,4536,4538,4540,4542],{"class":69,"line":689},[67,4535,4084],{"class":84},[67,4537,4087],{"class":73},[67,4539,259],{"class":84},[67,4541,2437],{"class":77},[67,4543,4544],{"class":73},");\n",[67,4546,4547,4549,4551,4553],{"class":69,"line":694},[67,4548,4136],{"class":110},[67,4550,854],{"class":73},[67,4552,4141],{"class":114},[67,4554,4544],{"class":73},[67,4556,4557],{"class":69,"line":700},[67,4558,3419],{"class":73},[19,4560,4561],{},"案例-水仙花数",[19,4563,4564],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4566,4567],{},"例如：1^3+5^3+3^3=153",[19,4569,4570],{},"请用do...while语句，求出所有3位数的水仙花数",[58,4572,4574],{"className":1992,"code":4573,"language":1994,"meta":63,"style":63},"#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",[32,4575,4576,4582,4592,4600,4604,4609,4621,4627,4631,4636,4652,4668,4684,4699,4718,4733,4781,4785,4797,4801,4809,4813,4827],{"__ignoreMap":63},[67,4577,4578,4580],{"class":69,"line":70},[67,4579,3784],{"class":84},[67,4581,4167],{"class":114},[67,4583,4584,4586,4588,4590],{"class":69,"line":191},[67,4585,3792],{"class":84},[67,4587,3795],{"class":84},[67,4589,3798],{"class":110},[67,4591,3148],{"class":73},[67,4593,4594,4596,4598],{"class":69,"line":202},[67,4595,2006],{"class":84},[67,4597,804],{"class":110},[67,4599,3809],{"class":73},[67,4601,4602],{"class":69,"line":641},[67,4603,3400],{"class":73},[67,4605,4606],{"class":69,"line":655},[67,4607,4608],{"class":2058},"    \u002F\u002F1.先打印所有三位数字\n",[67,4610,4611,4613,4615,4617,4619],{"class":69,"line":660},[67,4612,3818],{"class":84},[67,4614,4073],{"class":73},[67,4616,85],{"class":84},[67,4618,2302],{"class":77},[67,4620,3148],{"class":73},[67,4622,4623,4625],{"class":69,"line":665},[67,4624,4496],{"class":84},[67,4626,4499],{"class":73},[67,4628,4629],{"class":69,"line":677},[67,4630,3863],{"class":73},[67,4632,4633],{"class":69,"line":683},[67,4634,4635],{"class":2058},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[67,4637,4638,4641,4643,4645,4647,4649],{"class":69,"line":689},[67,4639,4640],{"class":84},"        int",[67,4642,3253],{"class":73},[67,4644,85],{"class":84},[67,4646,78],{"class":77},[67,4648,2055],{"class":73},[67,4650,4651],{"class":2058}," \u002F\u002F个位\n",[67,4653,4654,4656,4659,4661,4663,4665],{"class":69,"line":694},[67,4655,4640],{"class":84},[67,4657,4658],{"class":73}," b",[67,4660,85],{"class":84},[67,4662,78],{"class":77},[67,4664,2055],{"class":73},[67,4666,4667],{"class":2058}," \u002F\u002F十位\n",[67,4669,4670,4672,4675,4677,4679,4681],{"class":69,"line":700},[67,4671,4640],{"class":84},[67,4673,4674],{"class":73}," c",[67,4676,85],{"class":84},[67,4678,78],{"class":77},[67,4680,2055],{"class":73},[67,4682,4683],{"class":2058}," \u002F\u002F百位\n",[67,4685,4686,4689,4691,4693,4695,4697],{"class":69,"line":706},[67,4687,4688],{"class":73},"        a",[67,4690,85],{"class":84},[67,4692,3512],{"class":73},[67,4694,2319],{"class":84},[67,4696,2437],{"class":77},[67,4698,3148],{"class":73},[67,4700,4701,4704,4706,4708,4710,4712,4714,4716],{"class":69,"line":712},[67,4702,4703],{"class":73},"        b",[67,4705,85],{"class":84},[67,4707,3512],{"class":73},[67,4709,2573],{"class":84},[67,4711,2437],{"class":77},[67,4713,2319],{"class":84},[67,4715,2437],{"class":77},[67,4717,3148],{"class":73},[67,4719,4720,4723,4725,4727,4729,4731],{"class":69,"line":717},[67,4721,4722],{"class":73},"        c",[67,4724,85],{"class":84},[67,4726,3512],{"class":73},[67,4728,2573],{"class":84},[67,4730,2302],{"class":77},[67,4732,3148],{"class":73},[67,4734,4735,4737,4739,4741,4743,4745,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767,4769,4772,4775,4778],{"class":69,"line":723},[67,4736,4329],{"class":84},[67,4738,3676],{"class":73},[67,4740,965],{"class":84},[67,4742,2230],{"class":73},[67,4744,965],{"class":84},[67,4746,2230],{"class":73},[67,4748,2471],{"class":84},[67,4750,2255],{"class":73},[67,4752,965],{"class":84},[67,4754,2255],{"class":73},[67,4756,965],{"class":84},[67,4758,2255],{"class":73},[67,4760,2471],{"class":84},[67,4762,2280],{"class":73},[67,4764,965],{"class":84},[67,4766,2280],{"class":73},[67,4768,965],{"class":84},[67,4770,4771],{"class":73},"c ",[67,4773,4774],{"class":84},"==",[67,4776,4777],{"class":73}," num)",[67,4779,4780],{"class":2058}," \u002F\u002F如果是水仙花数，才打印\n",[67,4782,4783],{"class":69,"line":729},[67,4784,4342],{"class":73},[67,4786,4787,4789,4791,4793,4795],{"class":69,"line":735},[67,4788,4347],{"class":73},[67,4790,3031],{"class":84},[67,4792,3512],{"class":73},[67,4794,3031],{"class":84},[67,4796,3053],{"class":73},[67,4798,4799],{"class":69,"line":741},[67,4800,4361],{"class":73},[67,4802,4803,4805,4807],{"class":69,"line":747},[67,4804,4122],{"class":73},[67,4806,4125],{"class":84},[67,4808,3148],{"class":73},[67,4810,4811],{"class":69,"line":753},[67,4812,4020],{"class":73},[67,4814,4815,4817,4820,4822,4825],{"class":69,"line":758},[67,4816,4084],{"class":84},[67,4818,4819],{"class":73}," (num ",[67,4821,259],{"class":84},[67,4823,4824],{"class":77}," 1000",[67,4826,4544],{"class":73},[67,4828,4829],{"class":69,"line":764},[67,4830,3419],{"class":73},[26,4832,4833],{"start":202},[29,4834,4835],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[58,4837,4839],{"className":1992,"code":4838,"language":1994,"meta":63,"style":63},"\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",[32,4840,4841,4846,4874,4878,4890,4894,4899,4910,4917,4921,4934,4938,4945,4949,4961,4970],{"__ignoreMap":63},[67,4842,4843],{"class":69,"line":70},[67,4844,4845],{"class":2058},"\u002F\u002F从数字0-9打印\n",[67,4847,4848,4850,4852,4854,4857,4859,4861,4864,4866,4868,4870,4872],{"class":69,"line":191},[67,4849,1512],{"class":84},[67,4851,854],{"class":73},[67,4853,2006],{"class":84},[67,4855,4856],{"class":73}," i",[67,4858,85],{"class":84},[67,4860,78],{"class":77},[67,4862,4863],{"class":73},";i",[67,4865,259],{"class":84},[67,4867,2437],{"class":77},[67,4869,4863],{"class":73},[67,4871,4125],{"class":84},[67,4873,829],{"class":73},[67,4875,4876],{"class":69,"line":202},[67,4877,3400],{"class":73},[67,4879,4880,4882,4884,4886,4888],{"class":69,"line":641},[67,4881,3405],{"class":73},[67,4883,3031],{"class":84},[67,4885,2432],{"class":73},[67,4887,3031],{"class":84},[67,4889,3053],{"class":73},[67,4891,4892],{"class":69,"line":655},[67,4893,3419],{"class":73},[67,4895,4896],{"class":69,"line":660},[67,4897,4898],{"class":2058},"\u002F\u002F上式可以进行拆分\n",[67,4900,4901,4903,4905,4907],{"class":69,"line":665},[67,4902,2006],{"class":84},[67,4904,4856],{"class":73},[67,4906,85],{"class":84},[67,4908,4909],{"class":77},"0\n",[67,4911,4912,4914],{"class":69,"line":677},[67,4913,1512],{"class":84},[67,4915,4916],{"class":73},"(;;;)\n",[67,4918,4919],{"class":69,"line":683},[67,4920,3400],{"class":73},[67,4922,4923,4925,4928,4930,4932],{"class":69,"line":689},[67,4924,897],{"class":84},[67,4926,4927],{"class":73},"(i",[67,4929,3553],{"class":84},[67,4931,2437],{"class":77},[67,4933,829],{"class":73},[67,4935,4936],{"class":69,"line":694},[67,4937,3863],{"class":73},[67,4939,4940,4943],{"class":69,"line":700},[67,4941,4942],{"class":84},"        break",[67,4944,3148],{"class":73},[67,4946,4947],{"class":69,"line":706},[67,4948,4020],{"class":73},[67,4950,4951,4953,4955,4957,4959],{"class":69,"line":712},[67,4952,3405],{"class":73},[67,4954,3031],{"class":84},[67,4956,2432],{"class":73},[67,4958,3031],{"class":84},[67,4960,3053],{"class":73},[67,4962,4963,4966,4968],{"class":69,"line":717},[67,4964,4965],{"class":73},"    i",[67,4967,4125],{"class":84},[67,4969,3148],{"class":73},[67,4971,4972],{"class":69,"line":723},[67,4973,3419],{"class":73},[19,4975,4976],{},"小练习",[58,4978,4980],{"className":1992,"code":4979,"language":1994,"meta":63,"style":63},"#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",[32,4981,4982,4988,4998,5006,5010,5015,5020,5047,5051,5056,5061,5102,5106,5119,5123,5127,5131,5143,5147,5151],{"__ignoreMap":63},[67,4983,4984,4986],{"class":69,"line":70},[67,4985,3784],{"class":84},[67,4987,3787],{"class":114},[67,4989,4990,4992,4994,4996],{"class":69,"line":191},[67,4991,3792],{"class":84},[67,4993,3795],{"class":84},[67,4995,3798],{"class":110},[67,4997,3148],{"class":73},[67,4999,5000,5002,5004],{"class":69,"line":202},[67,5001,2006],{"class":84},[67,5003,804],{"class":110},[67,5005,3809],{"class":73},[67,5007,5008],{"class":69,"line":641},[67,5009,3400],{"class":73},[67,5011,5012],{"class":69,"line":655},[67,5013,5014],{"class":2058},"    \u002F\u002F敲桌子案例\n",[67,5016,5017],{"class":69,"line":660},[67,5018,5019],{"class":2058},"    \u002F\u002F1.先输出1-100的数字\n",[67,5021,5022,5024,5026,5028,5030,5032,5034,5037,5039,5041,5043,5045],{"class":69,"line":665},[67,5023,935],{"class":84},[67,5025,854],{"class":73},[67,5027,2006],{"class":84},[67,5029,4856],{"class":73},[67,5031,85],{"class":84},[67,5033,2209],{"class":77},[67,5035,5036],{"class":73},"; i",[67,5038,3442],{"class":84},[67,5040,2302],{"class":77},[67,5042,5036],{"class":73},[67,5044,4125],{"class":84},[67,5046,829],{"class":73},[67,5048,5049],{"class":69,"line":677},[67,5050,3863],{"class":73},[67,5052,5053],{"class":69,"line":683},[67,5054,5055],{"class":2058},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[67,5057,5058],{"class":69,"line":689},[67,5059,5060],{"class":2058},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[67,5062,5063,5065,5067,5069,5071,5073,5075,5078,5080,5082,5084,5086,5088,5090,5092,5094,5096,5098,5100],{"class":69,"line":694},[67,5064,4329],{"class":84},[67,5066,4927],{"class":73},[67,5068,2319],{"class":84},[67,5070,2360],{"class":77},[67,5072,4774],{"class":84},[67,5074,78],{"class":77},[67,5076,5077],{"class":84}," ||",[67,5079,4856],{"class":73},[67,5081,2319],{"class":84},[67,5083,2437],{"class":77},[67,5085,4774],{"class":84},[67,5087,2360],{"class":77},[67,5089,5077],{"class":84},[67,5091,4856],{"class":73},[67,5093,2573],{"class":84},[67,5095,2437],{"class":77},[67,5097,4774],{"class":84},[67,5099,2360],{"class":77},[67,5101,829],{"class":73},[67,5103,5104],{"class":69,"line":700},[67,5105,4342],{"class":73},[67,5107,5108,5110,5112,5115,5117],{"class":69,"line":706},[67,5109,4347],{"class":73},[67,5111,3031],{"class":84},[67,5113,5114],{"class":114},"\"敲桌子\"",[67,5116,3031],{"class":84},[67,5118,3053],{"class":73},[67,5120,5121],{"class":69,"line":712},[67,5122,4361],{"class":73},[67,5124,5125],{"class":69,"line":717},[67,5126,4402],{"class":84},[67,5128,5129],{"class":69,"line":723},[67,5130,4342],{"class":73},[67,5132,5133,5135,5137,5139,5141],{"class":69,"line":729},[67,5134,4347],{"class":73},[67,5136,3031],{"class":84},[67,5138,2432],{"class":73},[67,5140,3031],{"class":84},[67,5142,3053],{"class":73},[67,5144,5145],{"class":69,"line":735},[67,5146,4361],{"class":73},[67,5148,5149],{"class":69,"line":741},[67,5150,4020],{"class":73},[67,5152,5153],{"class":69,"line":747},[67,5154,3419],{"class":73},[19,5156,5157],{},"嵌套实现星图",[58,5159,5161],{"className":1992,"code":5160,"language":1994,"meta":63,"style":63},"#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",[32,5162,5163,5169,5179,5187,5191,5217,5221,5250,5254,5265,5269,5278,5282],{"__ignoreMap":63},[67,5164,5165,5167],{"class":69,"line":70},[67,5166,3784],{"class":84},[67,5168,3787],{"class":114},[67,5170,5171,5173,5175,5177],{"class":69,"line":191},[67,5172,3792],{"class":84},[67,5174,3795],{"class":84},[67,5176,3798],{"class":110},[67,5178,3148],{"class":73},[67,5180,5181,5183,5185],{"class":69,"line":202},[67,5182,2006],{"class":84},[67,5184,804],{"class":110},[67,5186,3809],{"class":73},[67,5188,5189],{"class":69,"line":641},[67,5190,3400],{"class":73},[67,5192,5193,5195,5197,5199,5201,5203,5205,5207,5209,5211,5213,5215],{"class":69,"line":655},[67,5194,935],{"class":84},[67,5196,3505],{"class":73},[67,5198,2006],{"class":84},[67,5200,4856],{"class":73},[67,5202,85],{"class":84},[67,5204,78],{"class":77},[67,5206,4863],{"class":73},[67,5208,259],{"class":84},[67,5210,2437],{"class":77},[67,5212,4863],{"class":73},[67,5214,4125],{"class":84},[67,5216,829],{"class":73},[67,5218,5219],{"class":69,"line":660},[67,5220,3863],{"class":73},[67,5222,5223,5226,5228,5230,5233,5235,5237,5240,5242,5244,5246,5248],{"class":69,"line":665},[67,5224,5225],{"class":84},"        for",[67,5227,3505],{"class":73},[67,5229,2006],{"class":84},[67,5231,5232],{"class":73}," j",[67,5234,85],{"class":84},[67,5236,78],{"class":77},[67,5238,5239],{"class":73},";j",[67,5241,259],{"class":84},[67,5243,2437],{"class":77},[67,5245,5239],{"class":73},[67,5247,4125],{"class":84},[67,5249,829],{"class":73},[67,5251,5252],{"class":69,"line":677},[67,5253,4342],{"class":73},[67,5255,5256,5258,5260,5263],{"class":69,"line":683},[67,5257,4347],{"class":73},[67,5259,3031],{"class":84},[67,5261,5262],{"class":114},"\"*\"",[67,5264,3148],{"class":73},[67,5266,5267],{"class":69,"line":689},[67,5268,4361],{"class":73},[67,5270,5271,5274,5276],{"class":69,"line":694},[67,5272,5273],{"class":73},"        cout",[67,5275,3031],{"class":84},[67,5277,3053],{"class":73},[67,5279,5280],{"class":69,"line":700},[67,5281,4020],{"class":73},[67,5283,5284],{"class":69,"line":706},[67,5285,3419],{"class":73},[19,5287,5288],{},"乘法口诀表",[58,5290,5292],{"className":1992,"code":5291,"language":1994,"meta":63,"style":63},"#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",[32,5293,5294,5300,5310,5318,5322,5348,5352,5377,5381,5421,5425,5433,5437],{"__ignoreMap":63},[67,5295,5296,5298],{"class":69,"line":70},[67,5297,3784],{"class":84},[67,5299,4167],{"class":114},[67,5301,5302,5304,5306,5308],{"class":69,"line":191},[67,5303,3792],{"class":84},[67,5305,3795],{"class":84},[67,5307,3798],{"class":110},[67,5309,3148],{"class":73},[67,5311,5312,5314,5316],{"class":69,"line":202},[67,5313,2006],{"class":84},[67,5315,804],{"class":110},[67,5317,3809],{"class":73},[67,5319,5320],{"class":69,"line":641},[67,5321,3400],{"class":73},[67,5323,5324,5326,5328,5330,5332,5334,5336,5338,5340,5342,5344,5346],{"class":69,"line":655},[67,5325,935],{"class":84},[67,5327,854],{"class":73},[67,5329,2006],{"class":84},[67,5331,4856],{"class":73},[67,5333,85],{"class":84},[67,5335,2209],{"class":77},[67,5337,4863],{"class":73},[67,5339,259],{"class":84},[67,5341,2437],{"class":77},[67,5343,4863],{"class":73},[67,5345,4125],{"class":84},[67,5347,829],{"class":73},[67,5349,5350],{"class":69,"line":660},[67,5351,3863],{"class":73},[67,5353,5354,5356,5358,5360,5362,5364,5366,5368,5370,5373,5375],{"class":69,"line":665},[67,5355,5225],{"class":84},[67,5357,854],{"class":73},[67,5359,2006],{"class":84},[67,5361,5232],{"class":73},[67,5363,85],{"class":84},[67,5365,2209],{"class":77},[67,5367,5239],{"class":73},[67,5369,3442],{"class":84},[67,5371,5372],{"class":73},"i;j",[67,5374,4125],{"class":84},[67,5376,829],{"class":73},[67,5378,5379],{"class":69,"line":677},[67,5380,4342],{"class":73},[67,5382,5383,5385,5387,5389,5391,5393,5395,5397,5399,5402,5404,5406,5408,5410,5412,5415,5417,5419],{"class":69,"line":683},[67,5384,4347],{"class":73},[67,5386,3031],{"class":84},[67,5388,2457],{"class":73},[67,5390,3031],{"class":84},[67,5392,5262],{"class":114},[67,5394,3031],{"class":84},[67,5396,2432],{"class":73},[67,5398,3031],{"class":84},[67,5400,5401],{"class":114},"\"=\"",[67,5403,3031],{"class":84},[67,5405,2432],{"class":73},[67,5407,965],{"class":84},[67,5409,2457],{"class":73},[67,5411,3031],{"class":84},[67,5413,5414],{"class":114},"'",[67,5416,3088],{"class":77},[67,5418,5414],{"class":114},[67,5420,3148],{"class":73},[67,5422,5423],{"class":69,"line":689},[67,5424,4361],{"class":73},[67,5426,5427,5429,5431],{"class":69,"line":694},[67,5428,5273],{"class":73},[67,5430,3031],{"class":84},[67,5432,3053],{"class":73},[67,5434,5435],{"class":69,"line":700},[67,5436,4020],{"class":73},[67,5438,5439],{"class":69,"line":706},[67,5440,3419],{"class":73},[391,5442,5444],{"id":5443},"_163跳出语句","1.6.3跳出语句",[26,5446,5447],{},[29,5448,5449],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5451,5452],{},"break使用时机：",[2994,5454,5455,5458,5461],{},[29,5456,5457],{},"出现在switch条件语句中，作用是终止case并跳出switch",[29,5459,5460],{},"出现在循环结构中，作用是跳出当前的循环结构",[29,5462,5463],{},"出现在嵌套循环中，跳出最近的内层循环语句",[26,5465,5466,5469],{"start":191},[29,5467,5468],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[29,5470,5471],{},"goto语句\n语法：goto 标记;",[19,5473,5474],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[58,5476,5478],{"className":1992,"code":5477,"language":1994,"meta":63,"style":63},"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",[32,5479,5480,5488,5492,5504,5514,5527,5540,5553,5560,5576],{"__ignoreMap":63},[67,5481,5482,5484,5486],{"class":69,"line":70},[67,5483,2006],{"class":84},[67,5485,804],{"class":110},[67,5487,3809],{"class":73},[67,5489,5490],{"class":69,"line":191},[67,5491,3400],{"class":73},[67,5493,5494,5496,5498,5500,5502],{"class":69,"line":202},[67,5495,3405],{"class":73},[67,5497,3031],{"class":84},[67,5499,353],{"class":114},[67,5501,3031],{"class":84},[67,5503,3053],{"class":73},[67,5505,5506,5509,5512],{"class":69,"line":641},[67,5507,5508],{"class":84},"    goto",[67,5510,5511],{"class":110}," FLAG",[67,5513,3148],{"class":73},[67,5515,5516,5518,5520,5523,5525],{"class":69,"line":655},[67,5517,3405],{"class":73},[67,5519,3031],{"class":84},[67,5521,5522],{"class":114},"\"2\"",[67,5524,3031],{"class":84},[67,5526,3053],{"class":73},[67,5528,5529,5531,5533,5536,5538],{"class":69,"line":660},[67,5530,3405],{"class":73},[67,5532,3031],{"class":84},[67,5534,5535],{"class":114},"\"3\"",[67,5537,3031],{"class":84},[67,5539,3053],{"class":73},[67,5541,5542,5544,5546,5549,5551],{"class":69,"line":665},[67,5543,3405],{"class":73},[67,5545,3031],{"class":84},[67,5547,5548],{"class":114},"\"4\"",[67,5550,3031],{"class":84},[67,5552,3053],{"class":73},[67,5554,5555,5558],{"class":69,"line":677},[67,5556,5557],{"class":110},"    FLAG",[67,5559,813],{"class":73},[67,5561,5562,5564,5566,5569,5571,5573],{"class":69,"line":683},[67,5563,3405],{"class":73},[67,5565,3031],{"class":84},[67,5567,5568],{"class":114},"\"5\"",[67,5570,3031],{"class":84},[67,5572,3096],{"class":73},[67,5574,5575],{"class":2058},"\u002F\u002F跳过了2,3,4,直接到5\n",[67,5577,5578],{"class":69,"line":689},[67,5579,3419],{"class":73},[14,5581,5583],{"id":5582},"_17数组","1.7数组",[391,5585,5587],{"id":5586},"_171一维数组","1.7.1一维数组",[26,5589,5590],{},[29,5591,5592],{},"一维数组定义方式",[399,5594,5595,5605],{},[402,5596,5597],{},[405,5598,5599,5602],{},[408,5600,5601],{},"方式",[408,5603,5604],{},"注意事项",[419,5606,5607,5621,5631],{},[405,5608,5609,5615],{},[424,5610,5611,5612,2055],{},"数据类型 数组名",[67,5613,5614],{},"数组长度",[424,5616,5617,5618,5620],{},"这种方式是先定义再arr",[67,5619,2432],{},"赋值",[405,5622,5623,5628],{},[424,5624,5611,5625,5627],{},[67,5626,5614],{},"={值1,值2....};",[424,5629,5630],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[405,5632,5633,5637],{},[424,5634,5611,5635,5627],{},[67,5636],{},[424,5638,5639,5640,5642],{},"int arr",[67,5641],{},";这是不正确的，按照这样的方式定义必须有初始长度",[26,5644,5645],{"start":191},[29,5646,5647],{},"一维数组数组名\n用途：",[2994,5649,5650],{},[29,5651,5652],{},"1.可以统计整个数组在内存中的长度：",[58,5654,5656],{"className":1992,"code":5655,"language":1994,"meta":63,"style":63},"sizeof(arr);\nsizeof(arr[0]);\n",[32,5657,5658,5665],{"__ignoreMap":63},[67,5659,5660,5662],{"class":69,"line":70},[67,5661,2001],{"class":84},[67,5663,5664],{"class":73},"(arr);\n",[67,5666,5667,5669,5672,5674],{"class":69,"line":191},[67,5668,2001],{"class":84},[67,5670,5671],{"class":73},"(arr[",[67,5673,78],{"class":77},[67,5675,5676],{"class":73},"]);\n",[2994,5678,5679],{},[29,5680,5681],{},"2.可以获取数组在内存中的首地址:",[58,5683,5685],{"className":1992,"code":5684,"language":1994,"meta":63,"style":63},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[32,5686,5687,5692,5705,5710],{"__ignoreMap":63},[67,5688,5689],{"class":69,"line":70},[67,5690,5691],{"class":2058},"\u002F\u002F查看16进制的首地址\n",[67,5693,5694,5696,5698,5701,5703],{"class":69,"line":191},[67,5695,3224],{"class":73},[67,5697,3031],{"class":84},[67,5699,5700],{"class":73},"arr",[67,5702,3031],{"class":84},[67,5704,3053],{"class":73},[67,5706,5707],{"class":69,"line":202},[67,5708,5709],{"class":2058},"\u002F\u002F看10进制数\n",[67,5711,5712,5714,5716,5718,5720,5722,5724,5727,5729,5731,5733],{"class":69,"line":641},[67,5713,3224],{"class":73},[67,5715,3031],{"class":84},[67,5717,854],{"class":73},[67,5719,2006],{"class":84},[67,5721,2420],{"class":73},[67,5723,2344],{"class":84},[67,5725,5726],{"class":73},"arr[",[67,5728,78],{"class":77},[67,5730,2928],{"class":73},[67,5732,3031],{"class":84},[67,5734,3053],{"class":73},[19,5736,5737],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[2994,5739,5740],{},[29,5741,5742],{},"1️⃣五只小猪称体重",[58,5744,5746],{"className":1992,"code":5745,"language":1994,"meta":63,"style":63},"#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",[32,5747,5748,5754,5764,5772,5776,5816,5829,5855,5859,5871,5875,5885,5889,5893,5906,5916],{"__ignoreMap":63},[67,5749,5750,5752],{"class":69,"line":70},[67,5751,3784],{"class":84},[67,5753,3787],{"class":114},[67,5755,5756,5758,5760,5762],{"class":69,"line":191},[67,5757,3792],{"class":84},[67,5759,3795],{"class":84},[67,5761,3798],{"class":110},[67,5763,3148],{"class":73},[67,5765,5766,5768,5770],{"class":69,"line":202},[67,5767,2006],{"class":84},[67,5769,804],{"class":110},[67,5771,3809],{"class":73},[67,5773,5774],{"class":69,"line":641},[67,5775,3400],{"class":73},[67,5777,5778,5780,5783,5785,5787,5789,5791,5794,5796,5799,5801,5803,5805,5808,5810,5813],{"class":69,"line":655},[67,5779,3818],{"class":84},[67,5781,5782],{"class":73}," arr[",[67,5784,2310],{"class":77},[67,5786,2928],{"class":73},[67,5788,85],{"class":84},[67,5790,2885],{"class":73},[67,5792,5793],{"class":77},"300",[67,5795,2369],{"class":73},[67,5797,5798],{"class":77},"350",[67,5800,2369],{"class":73},[67,5802,3565],{"class":77},[67,5804,2369],{"class":73},[67,5806,5807],{"class":77},"400",[67,5809,2369],{"class":73},[67,5811,5812],{"class":77},"250",[67,5814,5815],{"class":73},"};\n",[67,5817,5818,5820,5823,5825,5827],{"class":69,"line":660},[67,5819,3818],{"class":84},[67,5821,5822],{"class":73}," tmp",[67,5824,85],{"class":84},[67,5826,78],{"class":77},[67,5828,3148],{"class":73},[67,5830,5831,5833,5835,5837,5839,5841,5843,5845,5847,5849,5851,5853],{"class":69,"line":665},[67,5832,935],{"class":84},[67,5834,3505],{"class":73},[67,5836,2006],{"class":84},[67,5838,4856],{"class":73},[67,5840,85],{"class":84},[67,5842,78],{"class":77},[67,5844,4863],{"class":73},[67,5846,259],{"class":84},[67,5848,2310],{"class":77},[67,5850,4863],{"class":73},[67,5852,4125],{"class":84},[67,5854,829],{"class":73},[67,5856,5857],{"class":69,"line":677},[67,5858,3863],{"class":73},[67,5860,5861,5863,5866,5868],{"class":69,"line":683},[67,5862,4329],{"class":84},[67,5864,5865],{"class":73},"(tmp",[67,5867,259],{"class":84},[67,5869,5870],{"class":73},"arr[i])\n",[67,5872,5873],{"class":69,"line":689},[67,5874,4342],{"class":73},[67,5876,5877,5880,5882],{"class":69,"line":694},[67,5878,5879],{"class":73},"            tmp",[67,5881,85],{"class":84},[67,5883,5884],{"class":73},"arr[i];\n",[67,5886,5887],{"class":69,"line":700},[67,5888,4361],{"class":73},[67,5890,5891],{"class":69,"line":706},[67,5892,4020],{"class":73},[67,5894,5895,5897,5899,5902,5904],{"class":69,"line":712},[67,5896,3405],{"class":73},[67,5898,3031],{"class":84},[67,5900,5901],{"class":73},"tmp",[67,5903,3031],{"class":84},[67,5905,3053],{"class":73},[67,5907,5908,5911,5914],{"class":69,"line":717},[67,5909,5910],{"class":84},"    return",[67,5912,5913],{"class":77}," 0",[67,5915,3148],{"class":73},[67,5917,5918],{"class":69,"line":723},[67,5919,3419],{"class":73},[2994,5921,5922],{},[29,5923,5924],{},"2️⃣数组元素逆置",[58,5926,5928],{"className":1992,"code":5927,"language":1994,"meta":63,"style":63},"\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",[32,5929,5930,5935,5941,5951,5959,5963,5998,6014,6046,6059,6064,6069,6081,6091,6101,6106,6115,6125,6130,6135,6162,6166,6182,6186,6197,6206],{"__ignoreMap":63},[67,5931,5932],{"class":69,"line":70},[67,5933,5934],{"class":2058},"\u002F\u002F元素逆置\n",[67,5936,5937,5939],{"class":69,"line":191},[67,5938,3784],{"class":84},[67,5940,3787],{"class":114},[67,5942,5943,5945,5947,5949],{"class":69,"line":202},[67,5944,3792],{"class":84},[67,5946,3795],{"class":84},[67,5948,3798],{"class":110},[67,5950,3148],{"class":73},[67,5952,5953,5955,5957],{"class":69,"line":641},[67,5954,2006],{"class":84},[67,5956,804],{"class":110},[67,5958,3809],{"class":73},[67,5960,5961],{"class":69,"line":655},[67,5962,3400],{"class":73},[67,5964,5965,5968,5970,5972,5974,5976,5978,5980,5982,5984,5986,5988,5990,5992,5994,5996],{"class":69,"line":660},[67,5966,5967],{"class":84},"   int",[67,5969,5782],{"class":73},[67,5971,2310],{"class":77},[67,5973,2928],{"class":73},[67,5975,85],{"class":84},[67,5977,2885],{"class":73},[67,5979,2209],{"class":77},[67,5981,2369],{"class":73},[67,5983,2077],{"class":77},[67,5985,2369],{"class":73},[67,5987,2071],{"class":77},[67,5989,2369],{"class":73},[67,5991,1047],{"class":77},[67,5993,2369],{"class":73},[67,5995,2310],{"class":77},[67,5997,5815],{"class":73},[67,5999,6000,6002,6005,6007,6009,6011],{"class":69,"line":665},[67,6001,5967],{"class":84},[67,6003,6004],{"class":73}," start",[67,6006,85],{"class":84},[67,6008,78],{"class":77},[67,6010,2055],{"class":73},[67,6012,6013],{"class":2058},"\u002F\u002F起始下标\n",[67,6015,6016,6018,6021,6024,6027,6030,6032,6034,6037,6039,6041,6043],{"class":69,"line":677},[67,6017,5967],{"class":84},[67,6019,6020],{"class":73}," end",[67,6022,6023],{"class":84},"=sizeof",[67,6025,6026],{"class":73},"(arr)",[67,6028,6029],{"class":84},"\u002Fsizeof",[67,6031,5671],{"class":73},[67,6033,78],{"class":77},[67,6035,6036],{"class":73},"])",[67,6038,1863],{"class":84},[67,6040,2209],{"class":77},[67,6042,2055],{"class":73},[67,6044,6045],{"class":2058},"\u002F\u002F结束下标\n",[67,6047,6048,6051,6054,6056],{"class":69,"line":683},[67,6049,6050],{"class":84},"   while",[67,6052,6053],{"class":73}," (start",[67,6055,259],{"class":84},[67,6057,6058],{"class":73},"end)\n",[67,6060,6061],{"class":69,"line":689},[67,6062,6063],{"class":73},"   {\n",[67,6065,6066],{"class":69,"line":694},[67,6067,6068],{"class":2058},"    \u002F\u002F实现元素互换代码\n",[67,6070,6071,6073,6076,6078],{"class":69,"line":700},[67,6072,3818],{"class":84},[67,6074,6075],{"class":73}," temp",[67,6077,85],{"class":84},[67,6079,6080],{"class":73},"arr[start];\n",[67,6082,6083,6086,6088],{"class":69,"line":706},[67,6084,6085],{"class":73},"    arr[start]",[67,6087,85],{"class":84},[67,6089,6090],{"class":73},"arr[end];\n",[67,6092,6093,6096,6098],{"class":69,"line":712},[67,6094,6095],{"class":73},"    arr[end]",[67,6097,85],{"class":84},[67,6099,6100],{"class":73},"temp;\n",[67,6102,6103],{"class":69,"line":717},[67,6104,6105],{"class":2058},"    \u002F\u002F下标更新\n",[67,6107,6108,6111,6113],{"class":69,"line":723},[67,6109,6110],{"class":73},"    start",[67,6112,4125],{"class":84},[67,6114,3148],{"class":73},[67,6116,6117,6120,6123],{"class":69,"line":729},[67,6118,6119],{"class":73},"    end",[67,6121,6122],{"class":84},"--",[67,6124,3148],{"class":73},[67,6126,6127],{"class":69,"line":735},[67,6128,6129],{"class":73},"   }\n",[67,6131,6132],{"class":69,"line":741},[67,6133,6134],{"class":2058},"   \u002F\u002F输出逆置后的数组\n",[67,6136,6137,6140,6142,6144,6146,6148,6150,6152,6154,6156,6158,6160],{"class":69,"line":747},[67,6138,6139],{"class":84},"   for",[67,6141,3505],{"class":73},[67,6143,2006],{"class":84},[67,6145,4856],{"class":73},[67,6147,85],{"class":84},[67,6149,78],{"class":77},[67,6151,4863],{"class":73},[67,6153,259],{"class":84},[67,6155,2310],{"class":77},[67,6157,4863],{"class":73},[67,6159,4125],{"class":84},[67,6161,829],{"class":73},[67,6163,6164],{"class":69,"line":753},[67,6165,6063],{"class":73},[67,6167,6168,6170,6172,6175,6177,6180],{"class":69,"line":758},[67,6169,3405],{"class":73},[67,6171,3031],{"class":84},[67,6173,6174],{"class":73},"arr[i]",[67,6176,3031],{"class":84},[67,6178,6179],{"class":114},"\" \"",[67,6181,3148],{"class":73},[67,6183,6184],{"class":69,"line":764},[67,6185,6129],{"class":73},[67,6187,6188,6191,6193,6195],{"class":69,"line":770},[67,6189,6190],{"class":110},"   system",[67,6192,854],{"class":73},[67,6194,4141],{"class":114},[67,6196,4544],{"class":73},[67,6198,6199,6202,6204],{"class":69,"line":776},[67,6200,6201],{"class":84},"   return",[67,6203,5913],{"class":77},[67,6205,3148],{"class":73},[67,6207,6208],{"class":69,"line":782},[67,6209,3419],{"class":73},[2994,6211,6212],{},[29,6213,6214],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[58,6216,6218],{"className":1992,"code":6217,"language":1994,"meta":63,"style":63},"\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",[32,6219,6220,6225,6231,6241,6249,6253,6304,6317,6343,6347,6361,6365,6370,6375,6405,6409,6414,6448,6452,6457,6477,6482,6494,6510,6525,6530,6534,6538,6551,6577,6581,6595,6599,6607],{"__ignoreMap":63},[67,6221,6222],{"class":69,"line":70},[67,6223,6224],{"class":2058},"\u002F\u002F冒泡排序,升序\n",[67,6226,6227,6229],{"class":69,"line":191},[67,6228,3784],{"class":84},[67,6230,3787],{"class":114},[67,6232,6233,6235,6237,6239],{"class":69,"line":202},[67,6234,3792],{"class":84},[67,6236,3795],{"class":84},[67,6238,3798],{"class":110},[67,6240,3148],{"class":73},[67,6242,6243,6245,6247],{"class":69,"line":641},[67,6244,2006],{"class":84},[67,6246,804],{"class":110},[67,6248,3809],{"class":73},[67,6250,6251],{"class":69,"line":655},[67,6252,3400],{"class":73},[67,6254,6255,6257,6259,6261,6263,6265,6268,6270,6272,6274,6276,6278,6280,6282,6284,6286,6288,6290,6292,6294,6296,6298,6300,6302],{"class":69,"line":660},[67,6256,3818],{"class":84},[67,6258,5782],{"class":73},[67,6260,2411],{"class":77},[67,6262,81],{"class":73},[67,6264,85],{"class":84},[67,6266,6267],{"class":73}," {",[67,6269,1047],{"class":77},[67,6271,2369],{"class":73},[67,6273,2077],{"class":77},[67,6275,2369],{"class":73},[67,6277,2386],{"class":77},[67,6279,2369],{"class":73},[67,6281,78],{"class":77},[67,6283,2369],{"class":73},[67,6285,2310],{"class":77},[67,6287,2369],{"class":73},[67,6289,2360],{"class":77},[67,6291,2369],{"class":73},[67,6293,2209],{"class":77},[67,6295,2369],{"class":73},[67,6297,2071],{"class":77},[67,6299,2369],{"class":73},[67,6301,2411],{"class":77},[67,6303,5815],{"class":73},[67,6305,6306,6308,6310,6313,6315],{"class":69,"line":665},[67,6307,3405],{"class":73},[67,6309,3031],{"class":84},[67,6311,6312],{"class":114},"\"排序前：\"",[67,6314,3031],{"class":84},[67,6316,3053],{"class":73},[67,6318,6319,6321,6323,6325,6327,6329,6331,6333,6335,6337,6339,6341],{"class":69,"line":677},[67,6320,935],{"class":84},[67,6322,3505],{"class":73},[67,6324,2006],{"class":84},[67,6326,4856],{"class":73},[67,6328,85],{"class":84},[67,6330,78],{"class":77},[67,6332,4863],{"class":73},[67,6334,259],{"class":84},[67,6336,2411],{"class":77},[67,6338,4863],{"class":73},[67,6340,4125],{"class":84},[67,6342,829],{"class":73},[67,6344,6345],{"class":69,"line":683},[67,6346,3863],{"class":73},[67,6348,6349,6351,6353,6355,6357,6359],{"class":69,"line":689},[67,6350,5273],{"class":73},[67,6352,3031],{"class":84},[67,6354,6174],{"class":73},[67,6356,3031],{"class":84},[67,6358,6179],{"class":114},[67,6360,3148],{"class":73},[67,6362,6363],{"class":69,"line":694},[67,6364,4020],{"class":73},[67,6366,6367],{"class":69,"line":700},[67,6368,6369],{"class":2058},"    \u002F\u002F开始冒泡排序\n",[67,6371,6372],{"class":69,"line":706},[67,6373,6374],{"class":2058},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[67,6376,6377,6379,6381,6383,6385,6387,6389,6391,6393,6395,6397,6399,6401,6403],{"class":69,"line":712},[67,6378,935],{"class":84},[67,6380,3505],{"class":73},[67,6382,2006],{"class":84},[67,6384,4856],{"class":73},[67,6386,85],{"class":84},[67,6388,78],{"class":77},[67,6390,4863],{"class":73},[67,6392,259],{"class":84},[67,6394,2411],{"class":77},[67,6396,1863],{"class":84},[67,6398,2209],{"class":77},[67,6400,4863],{"class":73},[67,6402,4125],{"class":84},[67,6404,829],{"class":73},[67,6406,6407],{"class":69,"line":717},[67,6408,3863],{"class":73},[67,6410,6411],{"class":69,"line":723},[67,6412,6413],{"class":2058},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[67,6415,6416,6418,6420,6422,6424,6426,6428,6430,6432,6434,6436,6438,6440,6442,6444,6446],{"class":69,"line":729},[67,6417,5225],{"class":84},[67,6419,3505],{"class":73},[67,6421,2006],{"class":84},[67,6423,5232],{"class":73},[67,6425,85],{"class":84},[67,6427,78],{"class":77},[67,6429,5239],{"class":73},[67,6431,259],{"class":84},[67,6433,2411],{"class":77},[67,6435,1863],{"class":84},[67,6437,2432],{"class":73},[67,6439,1863],{"class":84},[67,6441,2209],{"class":77},[67,6443,5239],{"class":73},[67,6445,4125],{"class":84},[67,6447,829],{"class":73},[67,6449,6450],{"class":69,"line":735},[67,6451,4342],{"class":73},[67,6453,6454],{"class":69,"line":741},[67,6455,6456],{"class":2058},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[67,6458,6459,6462,6465,6467,6470,6472,6474],{"class":69,"line":747},[67,6460,6461],{"class":84},"            if",[67,6463,6464],{"class":73},"(arr[j]",[67,6466,2948],{"class":84},[67,6468,6469],{"class":73},"arr[j",[67,6471,2471],{"class":84},[67,6473,2209],{"class":77},[67,6475,6476],{"class":73},"])\n",[67,6478,6479],{"class":69,"line":753},[67,6480,6481],{"class":73},"            {\n",[67,6483,6484,6487,6489,6491],{"class":69,"line":758},[67,6485,6486],{"class":84},"                int",[67,6488,6075],{"class":73},[67,6490,85],{"class":84},[67,6492,6493],{"class":73},"arr[j];\n",[67,6495,6496,6499,6501,6503,6505,6507],{"class":69,"line":764},[67,6497,6498],{"class":73},"                arr[j]",[67,6500,85],{"class":84},[67,6502,6469],{"class":73},[67,6504,2471],{"class":84},[67,6506,2209],{"class":77},[67,6508,6509],{"class":73},"];\n",[67,6511,6512,6515,6517,6519,6521,6523],{"class":69,"line":770},[67,6513,6514],{"class":73},"                arr[j",[67,6516,2471],{"class":84},[67,6518,2209],{"class":77},[67,6520,2928],{"class":73},[67,6522,85],{"class":84},[67,6524,6100],{"class":73},[67,6526,6527],{"class":69,"line":776},[67,6528,6529],{"class":73},"            }\n",[67,6531,6532],{"class":69,"line":782},[67,6533,4361],{"class":73},[67,6535,6536],{"class":69,"line":788},[67,6537,4020],{"class":73},[67,6539,6540,6542,6544,6547,6549],{"class":69,"line":793},[67,6541,3405],{"class":73},[67,6543,3031],{"class":84},[67,6545,6546],{"class":114},"\"排序后：\"",[67,6548,3031],{"class":84},[67,6550,3053],{"class":73},[67,6552,6553,6555,6557,6559,6561,6563,6565,6567,6569,6571,6573,6575],{"class":69,"line":798},[67,6554,935],{"class":84},[67,6556,3505],{"class":73},[67,6558,2006],{"class":84},[67,6560,4856],{"class":73},[67,6562,85],{"class":84},[67,6564,78],{"class":77},[67,6566,4863],{"class":73},[67,6568,259],{"class":84},[67,6570,2411],{"class":77},[67,6572,4863],{"class":73},[67,6574,4125],{"class":84},[67,6576,829],{"class":73},[67,6578,6579],{"class":69,"line":816},[67,6580,3863],{"class":73},[67,6582,6583,6585,6587,6589,6591,6593],{"class":69,"line":832},[67,6584,5273],{"class":73},[67,6586,3031],{"class":84},[67,6588,6174],{"class":73},[67,6590,3031],{"class":84},[67,6592,6179],{"class":114},[67,6594,3148],{"class":73},[67,6596,6597],{"class":69,"line":843},[67,6598,4020],{"class":73},[67,6600,6601,6603,6605],{"class":69,"line":848},[67,6602,5910],{"class":84},[67,6604,5913],{"class":77},[67,6606,3148],{"class":73},[67,6608,6609],{"class":69,"line":863},[67,6610,3419],{"class":73},[391,6612,6614],{"id":6613},"_172二维数组","1.7.2二维数组",[26,6616,6617],{},[29,6618,6619],{},"二维数组的四种定义方式",[399,6621,6622,6631],{},[402,6623,6624],{},[405,6625,6626,6629],{},[408,6627,6628],{},"序号",[408,6630,5601],{},[419,6632,6633,6643,6652,6661,6670],{},[405,6634,6635,6637],{},[424,6636,2209],{},[424,6638,6639,6640,2055],{},"数据类型 数组名[行数]",[67,6641,6642],{},"列数",[405,6644,6645,6647],{},[424,6646,2077],{},[424,6648,6639,6649,6651],{},[67,6650,6642],{},"={ {数据1,数据2}，{数据3，数据4}... }",[405,6653,6654,6656],{},[424,6655,2071],{},[424,6657,6639,6658,6660],{},[67,6659,6642],{},"={数据1,数据2,数据3...}",[405,6662,6663,6665],{},[424,6664,1047],{},[424,6666,6667,6668,6660],{},"数据类型 数组名[]",[67,6669,6642],{},[405,6671,6672,6675],{},[424,6673,6674],{},"注意：不能只省略列数",[424,6676],{},[26,6678,6679],{"start":191},[29,6680,6681],{},"二维数组数组名",[2994,6683,6684,6687],{},[29,6685,6686],{},"1.查看二维数组所占内存空间",[29,6688,6689],{},"2.获取二维数组首地址",[19,6691,6692],{},"已知二维数组，求二维数组的行数与列数",[58,6694,6696],{"className":1992,"code":6695,"language":1994,"meta":63,"style":63},"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",[32,6697,6698,6706,6710,6728,6732,6750,6766,6771,6796,6829],{"__ignoreMap":63},[67,6699,6700,6702,6704],{"class":69,"line":70},[67,6701,2006],{"class":84},[67,6703,804],{"class":110},[67,6705,3809],{"class":73},[67,6707,6708],{"class":69,"line":191},[67,6709,3400],{"class":73},[67,6711,6712,6714,6716,6718,6721,6723,6725],{"class":69,"line":202},[67,6713,3818],{"class":84},[67,6715,5782],{"class":73},[67,6717,2077],{"class":77},[67,6719,6720],{"class":73},"][",[67,6722,2071],{"class":77},[67,6724,2928],{"class":73},[67,6726,6727],{"class":84},"=\n",[67,6729,6730],{"class":69,"line":641},[67,6731,3863],{"class":73},[67,6733,6734,6737,6739,6741,6743,6745,6747],{"class":69,"line":655},[67,6735,6736],{"class":73},"        {",[67,6738,2209],{"class":77},[67,6740,2369],{"class":73},[67,6742,2077],{"class":77},[67,6744,2369],{"class":73},[67,6746,2071],{"class":77},[67,6748,6749],{"class":73},"},\n",[67,6751,6752,6754,6756,6758,6760,6762,6764],{"class":69,"line":660},[67,6753,6736],{"class":73},[67,6755,1047],{"class":77},[67,6757,2369],{"class":73},[67,6759,2310],{"class":77},[67,6761,2369],{"class":73},[67,6763,2335],{"class":77},[67,6765,3419],{"class":73},[67,6767,6768],{"class":69,"line":665},[67,6769,6770],{"class":73},"    };\n",[67,6772,6773,6775,6777,6780,6782,6784,6786,6788,6790,6792,6794],{"class":69,"line":677},[67,6774,3405],{"class":73},[67,6776,3031],{"class":84},[67,6778,6779],{"class":114},"\"二维数组的行数\"",[67,6781,3227],{"class":84},[67,6783,6026],{"class":73},[67,6785,6029],{"class":84},[67,6787,5671],{"class":73},[67,6789,78],{"class":77},[67,6791,6036],{"class":73},[67,6793,3031],{"class":84},[67,6795,3053],{"class":73},[67,6797,6798,6800,6802,6805,6807,6809,6811,6813,6815,6817,6819,6821,6823,6825,6827],{"class":69,"line":683},[67,6799,3405],{"class":73},[67,6801,3031],{"class":84},[67,6803,6804],{"class":114},"\"二维数组的列数\"",[67,6806,3227],{"class":84},[67,6808,5671],{"class":73},[67,6810,78],{"class":77},[67,6812,6036],{"class":73},[67,6814,6029],{"class":84},[67,6816,5671],{"class":73},[67,6818,78],{"class":77},[67,6820,6720],{"class":73},[67,6822,78],{"class":77},[67,6824,6036],{"class":73},[67,6826,3031],{"class":84},[67,6828,3053],{"class":73},[67,6830,6831],{"class":69,"line":689},[67,6832,3419],{"class":73},[19,6834,6835],{},"查看二维数组首地址",[58,6837,6839],{"className":1992,"code":6838,"language":1994,"meta":63,"style":63},"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",[32,6840,6841,6858,6884,6909],{"__ignoreMap":63},[67,6842,6843,6845,6847,6850,6852,6854,6856],{"class":69,"line":70},[67,6844,3224],{"class":73},[67,6846,3031],{"class":84},[67,6848,6849],{"class":114},"\"二维数组首地址：\"",[67,6851,3031],{"class":84},[67,6853,5700],{"class":73},[67,6855,3031],{"class":84},[67,6857,3053],{"class":73},[67,6859,6860,6862,6864,6867,6869,6871,6873,6876,6878,6880,6882],{"class":69,"line":191},[67,6861,3224],{"class":73},[67,6863,3031],{"class":84},[67,6865,6866],{"class":114},"\"二维数组第一行的首地址：\"",[67,6868,3031],{"class":84},[67,6870,854],{"class":73},[67,6872,2006],{"class":84},[67,6874,6875],{"class":73},")arr[",[67,6877,78],{"class":77},[67,6879,2928],{"class":73},[67,6881,3031],{"class":84},[67,6883,3053],{"class":73},[67,6885,6886,6888,6890,6893,6895,6897,6899,6901,6903,6905,6907],{"class":69,"line":202},[67,6887,3224],{"class":73},[67,6889,3031],{"class":84},[67,6891,6892],{"class":114},"\"二维数组第二行的首地址：\"",[67,6894,3031],{"class":84},[67,6896,854],{"class":73},[67,6898,2006],{"class":84},[67,6900,6875],{"class":73},[67,6902,2209],{"class":77},[67,6904,2928],{"class":73},[67,6906,3031],{"class":84},[67,6908,3053],{"class":73},[67,6910,6911,6913,6915,6918,6920,6922,6924,6926,6928,6930,6932,6934,6936,6938,6940,6942],{"class":69,"line":641},[67,6912,3224],{"class":73},[67,6914,3031],{"class":84},[67,6916,6917],{"class":114},"\"二维数组第一个元素的首地址:\"",[67,6919,3031],{"class":84},[67,6921,854],{"class":73},[67,6923,2006],{"class":84},[67,6925,2420],{"class":73},[67,6927,2344],{"class":84},[67,6929,5726],{"class":73},[67,6931,78],{"class":77},[67,6933,6720],{"class":73},[67,6935,78],{"class":77},[67,6937,2928],{"class":73},[67,6939,3031],{"class":84},[67,6941,3096],{"class":73},[67,6943,6944],{"class":2058},"\u002F\u002F对于数，要加取址符\n",[1903,6946,6947],{},"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":63,"searchDepth":191,"depth":191,"links":6949},[6950,6951,6952,6960,6961,6967,6972],{"id":1947,"depth":191,"text":1948},{"id":1954,"depth":191,"text":1955},{"id":1969,"depth":191,"text":1970,"children":6953},[6954,6955,6956,6957,6958,6959],{"id":1973,"depth":202,"text":1974},{"id":2018,"depth":202,"text":2019},{"id":2085,"depth":202,"text":2086},{"id":3012,"depth":202,"text":3013},{"id":3102,"depth":202,"text":3103},{"id":3198,"depth":202,"text":3199},{"id":3240,"depth":191,"text":3241},{"id":3308,"depth":191,"text":3309,"children":6962},[6963,6964,6965,6966],{"id":3312,"depth":202,"text":3313},{"id":3334,"depth":202,"text":3335},{"id":3343,"depth":202,"text":3344},{"id":3352,"depth":202,"text":3353},{"id":3361,"depth":191,"text":3362,"children":6968},[6969,6970,6971],{"id":3365,"depth":202,"text":3366},{"id":4038,"depth":202,"text":4039},{"id":5443,"depth":202,"text":5444},{"id":5582,"depth":191,"text":5583,"children":6973},[6974,6975],{"id":5586,"depth":202,"text":5587},{"id":6613,"depth":202,"text":6614},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1939,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6982,"title":6983,"body":6984,"description":63,"extension":1930,"meta":8082,"navigation":630,"path":8083,"seo":8084,"stem":8085,"__hash__":8086},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6985,"toc":8074},[6986,6989,6993,7001,7007,7010,7076,7080,7083,7159,7163,7166,7169,7172,7385,7389,7394,7458,7463,7530,7535,7626,7629,7734,7738,7741,7747,7891,7895,7898,7912,7915,7960,7963,8071],[10,6987,6983],{"id":6988},"_2函数",[14,6990,6992],{"id":6991},"_21函数概述","2.1函数概述",[26,6994,6995,6998],{},[29,6996,6997],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[29,6999,7000],{},"语法：",[58,7002,7005],{"className":7003,"code":7004,"language":603,"meta":63},[601],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[32,7006,7004],{"__ignoreMap":63},[19,7008,7009],{},"小案例",[58,7011,7013],{"className":1992,"code":7012,"language":1994,"meta":63,"style":63},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[32,7014,7015,7020,7044,7048,7065,7072],{"__ignoreMap":63},[67,7016,7017],{"class":69,"line":70},[67,7018,7019],{"class":2058},"\u002F\u002Fnum1,num2形参\n",[67,7021,7022,7024,7027,7029,7031,7035,7037,7039,7042],{"class":69,"line":191},[67,7023,2006],{"class":84},[67,7025,7026],{"class":110}," add",[67,7028,854],{"class":73},[67,7030,2006],{"class":84},[67,7032,7034],{"class":7033},"s4XuR"," num1",[67,7036,2369],{"class":73},[67,7038,2006],{"class":84},[67,7040,7041],{"class":7033}," num2",[67,7043,829],{"class":73},[67,7045,7046],{"class":69,"line":202},[67,7047,3400],{"class":73},[67,7049,7050,7052,7055,7057,7060,7062],{"class":69,"line":641},[67,7051,3818],{"class":84},[67,7053,7054],{"class":73}," sum",[67,7056,85],{"class":84},[67,7058,7059],{"class":73},"num1",[67,7061,2471],{"class":84},[67,7063,7064],{"class":73},"num2;\n",[67,7066,7067,7069],{"class":69,"line":655},[67,7068,5910],{"class":84},[67,7070,7071],{"class":73}," sum;\n",[67,7073,7074],{"class":69,"line":660},[67,7075,3419],{"class":73},[14,7077,7079],{"id":7078},"_22函数调用","2.2函数调用",[19,7081,7082],{},"调用刚刚写的求和函数",[58,7084,7086],{"className":1992,"code":7085,"language":1994,"meta":63,"style":63},"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",[32,7087,7088,7096,7100,7105,7117,7129,7138,7143,7155],{"__ignoreMap":63},[67,7089,7090,7092,7094],{"class":69,"line":70},[67,7091,2006],{"class":84},[67,7093,804],{"class":110},[67,7095,3809],{"class":73},[67,7097,7098],{"class":69,"line":191},[67,7099,3400],{"class":73},[67,7101,7102],{"class":69,"line":202},[67,7103,7104],{"class":2058},"    \u002F\u002Fa,b实参\n",[67,7106,7107,7109,7111,7113,7115],{"class":69,"line":641},[67,7108,3818],{"class":84},[67,7110,3253],{"class":73},[67,7112,85],{"class":84},[67,7114,78],{"class":77},[67,7116,3148],{"class":73},[67,7118,7119,7121,7123,7125,7127],{"class":69,"line":655},[67,7120,3818],{"class":84},[67,7122,4658],{"class":73},[67,7124,85],{"class":84},[67,7126,78],{"class":77},[67,7128,3148],{"class":73},[67,7130,7131,7133,7135],{"class":69,"line":660},[67,7132,3845],{"class":73},[67,7134,3284],{"class":84},[67,7136,7137],{"class":73},"a,b;\n",[67,7139,7140],{"class":69,"line":665},[67,7141,7142],{"class":2058},"    \u002F\u002F调用函数时，实参值传给了形参\n",[67,7144,7145,7147,7149,7152],{"class":69,"line":677},[67,7146,3405],{"class":73},[67,7148,3031],{"class":84},[67,7150,7151],{"class":110},"add",[67,7153,7154],{"class":73},"(a,b);\n",[67,7156,7157],{"class":69,"line":683},[67,7158,3419],{"class":73},[14,7160,7162],{"id":7161},"_23值传递","2.3值传递",[19,7164,7165],{},"值传递就是函数调用时实参将数值传给形参",[19,7167,7168],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7170,7171],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[58,7173,7175],{"className":1992,"code":7174,"language":1994,"meta":63,"style":63},"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",[32,7176,7177,7199,7203,7216,7233,7251,7262,7271,7280,7293,7309,7325,7334,7338,7346,7350,7362,7374,7381],{"__ignoreMap":63},[67,7178,7179,7182,7185,7187,7189,7191,7193,7195,7197],{"class":69,"line":70},[67,7180,7181],{"class":84},"void",[67,7183,7184],{"class":110}," swap",[67,7186,854],{"class":73},[67,7188,2006],{"class":84},[67,7190,7034],{"class":7033},[67,7192,2369],{"class":73},[67,7194,2006],{"class":84},[67,7196,7041],{"class":7033},[67,7198,829],{"class":73},[67,7200,7201],{"class":69,"line":191},[67,7202,3400],{"class":73},[67,7204,7205,7207,7209,7212,7214],{"class":69,"line":202},[67,7206,3405],{"class":73},[67,7208,3031],{"class":84},[67,7210,7211],{"class":114},"\"交换前：\"",[67,7213,3031],{"class":84},[67,7215,3053],{"class":73},[67,7217,7218,7220,7222,7225,7227,7229,7231],{"class":69,"line":641},[67,7219,3405],{"class":73},[67,7221,3031],{"class":84},[67,7223,7224],{"class":114},"\"num1=\"",[67,7226,3031],{"class":84},[67,7228,7059],{"class":73},[67,7230,3031],{"class":84},[67,7232,3053],{"class":73},[67,7234,7235,7237,7239,7242,7244,7247,7249],{"class":69,"line":655},[67,7236,3405],{"class":73},[67,7238,3031],{"class":84},[67,7240,7241],{"class":114},"\"num2=\"",[67,7243,3031],{"class":84},[67,7245,7246],{"class":73},"num2",[67,7248,3031],{"class":84},[67,7250,3053],{"class":73},[67,7252,7253,7255,7257,7259],{"class":69,"line":660},[67,7254,3818],{"class":84},[67,7256,6075],{"class":73},[67,7258,85],{"class":84},[67,7260,7261],{"class":73},"num1;\n",[67,7263,7264,7267,7269],{"class":69,"line":665},[67,7265,7266],{"class":73},"    num1",[67,7268,85],{"class":84},[67,7270,7064],{"class":73},[67,7272,7273,7276,7278],{"class":69,"line":677},[67,7274,7275],{"class":73},"    num2",[67,7277,85],{"class":84},[67,7279,6100],{"class":73},[67,7281,7282,7284,7286,7289,7291],{"class":69,"line":683},[67,7283,3405],{"class":73},[67,7285,3031],{"class":84},[67,7287,7288],{"class":114},"\"交换后：\"",[67,7290,3031],{"class":84},[67,7292,3053],{"class":73},[67,7294,7295,7297,7299,7301,7303,7305,7307],{"class":69,"line":689},[67,7296,3405],{"class":73},[67,7298,3031],{"class":84},[67,7300,7224],{"class":114},[67,7302,3031],{"class":84},[67,7304,7059],{"class":73},[67,7306,3031],{"class":84},[67,7308,3053],{"class":73},[67,7310,7311,7313,7315,7317,7319,7321,7323],{"class":69,"line":694},[67,7312,3405],{"class":73},[67,7314,3031],{"class":84},[67,7316,7241],{"class":114},[67,7318,3031],{"class":84},[67,7320,7246],{"class":73},[67,7322,3031],{"class":84},[67,7324,3053],{"class":73},[67,7326,7327,7329,7331],{"class":69,"line":700},[67,7328,5910],{"class":84},[67,7330,2055],{"class":73},[67,7332,7333],{"class":2058},"\u002F\u002F或者不写\n",[67,7335,7336],{"class":69,"line":706},[67,7337,3419],{"class":73},[67,7339,7340,7342,7344],{"class":69,"line":712},[67,7341,2006],{"class":84},[67,7343,804],{"class":110},[67,7345,3809],{"class":73},[67,7347,7348],{"class":69,"line":717},[67,7349,3400],{"class":73},[67,7351,7352,7354,7356,7358,7360],{"class":69,"line":723},[67,7353,3818],{"class":84},[67,7355,3253],{"class":73},[67,7357,85],{"class":84},[67,7359,2437],{"class":77},[67,7361,3148],{"class":73},[67,7363,7364,7366,7368,7370,7372],{"class":69,"line":729},[67,7365,3818],{"class":84},[67,7367,4658],{"class":73},[67,7369,85],{"class":84},[67,7371,2689],{"class":77},[67,7373,3148],{"class":73},[67,7375,7376,7379],{"class":69,"line":735},[67,7377,7378],{"class":110},"    swap",[67,7380,7154],{"class":73},[67,7382,7383],{"class":69,"line":741},[67,7384,3419],{"class":73},[14,7386,7388],{"id":7387},"_24函数的常见形式","2.4函数的常见形式",[26,7390,7391],{},[29,7392,7393],{},"无参无返",[58,7395,7397],{"className":1992,"code":7396,"language":1994,"meta":63,"style":63},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[32,7398,7399,7408,7412,7425,7429,7437,7441,7446,7454],{"__ignoreMap":63},[67,7400,7401,7403,7406],{"class":69,"line":70},[67,7402,7181],{"class":84},[67,7404,7405],{"class":110}," test01",[67,7407,3809],{"class":73},[67,7409,7410],{"class":69,"line":191},[67,7411,3400],{"class":73},[67,7413,7414,7416,7418,7421,7423],{"class":69,"line":202},[67,7415,3405],{"class":73},[67,7417,3031],{"class":84},[67,7419,7420],{"class":114},"\"你好\"",[67,7422,3031],{"class":84},[67,7424,3053],{"class":73},[67,7426,7427],{"class":69,"line":641},[67,7428,3419],{"class":73},[67,7430,7431,7433,7435],{"class":69,"line":655},[67,7432,2006],{"class":84},[67,7434,804],{"class":110},[67,7436,3809],{"class":73},[67,7438,7439],{"class":69,"line":660},[67,7440,3400],{"class":73},[67,7442,7443],{"class":69,"line":665},[67,7444,7445],{"class":2058},"    \u002F\u002F函数调用\n",[67,7447,7448,7451],{"class":69,"line":677},[67,7449,7450],{"class":110},"    test01",[67,7452,7453],{"class":73},"();\n",[67,7455,7456],{"class":69,"line":683},[67,7457,3419],{"class":73},[26,7459,7460],{"start":191},[29,7461,7462],{},"有参无返",[58,7464,7466],{"className":1992,"code":7465,"language":1994,"meta":63,"style":63},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[32,7467,7468,7483,7487,7499,7503,7511,7515,7526],{"__ignoreMap":63},[67,7469,7470,7472,7475,7477,7479,7481],{"class":69,"line":70},[67,7471,7181],{"class":84},[67,7473,7474],{"class":110}," test02",[67,7476,854],{"class":73},[67,7478,2006],{"class":84},[67,7480,3253],{"class":7033},[67,7482,829],{"class":73},[67,7484,7485],{"class":69,"line":191},[67,7486,3400],{"class":73},[67,7488,7489,7491,7493,7495,7497],{"class":69,"line":202},[67,7490,3405],{"class":73},[67,7492,3031],{"class":84},[67,7494,7420],{"class":114},[67,7496,3031],{"class":84},[67,7498,3053],{"class":73},[67,7500,7501],{"class":69,"line":641},[67,7502,3419],{"class":73},[67,7504,7505,7507,7509],{"class":69,"line":655},[67,7506,2006],{"class":84},[67,7508,804],{"class":110},[67,7510,3809],{"class":73},[67,7512,7513],{"class":69,"line":660},[67,7514,3400],{"class":73},[67,7516,7517,7520,7522,7524],{"class":69,"line":665},[67,7518,7519],{"class":110},"    test02",[67,7521,854],{"class":73},[67,7523,2302],{"class":77},[67,7525,4544],{"class":73},[67,7527,7528],{"class":69,"line":677},[67,7529,3419],{"class":73},[26,7531,7532],{"start":202},[29,7533,7534],{},"无参有返",[58,7536,7538],{"className":1992,"code":7537,"language":1994,"meta":63,"style":63},"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",[32,7539,7540,7549,7553,7565,7574,7578,7586,7590,7603,7622],{"__ignoreMap":63},[67,7541,7542,7544,7547],{"class":69,"line":70},[67,7543,2006],{"class":84},[67,7545,7546],{"class":110}," test03",[67,7548,3809],{"class":73},[67,7550,7551],{"class":69,"line":191},[67,7552,3400],{"class":73},[67,7554,7555,7557,7559,7561,7563],{"class":69,"line":202},[67,7556,3405],{"class":73},[67,7558,3031],{"class":84},[67,7560,7420],{"class":114},[67,7562,3031],{"class":84},[67,7564,3053],{"class":73},[67,7566,7567,7569,7572],{"class":69,"line":641},[67,7568,5910],{"class":84},[67,7570,7571],{"class":77}," 100",[67,7573,3148],{"class":73},[67,7575,7576],{"class":69,"line":655},[67,7577,3419],{"class":73},[67,7579,7580,7582,7584],{"class":69,"line":660},[67,7581,2006],{"class":84},[67,7583,804],{"class":110},[67,7585,3809],{"class":73},[67,7587,7588],{"class":69,"line":665},[67,7589,3400],{"class":73},[67,7591,7592,7594,7596,7598,7601],{"class":69,"line":677},[67,7593,3818],{"class":84},[67,7595,7034],{"class":73},[67,7597,85],{"class":84},[67,7599,7600],{"class":110},"test03",[67,7602,7453],{"class":73},[67,7604,7605,7607,7609,7611,7613,7615,7617,7619],{"class":69,"line":683},[67,7606,3405],{"class":73},[67,7608,3031],{"class":84},[67,7610,7224],{"class":114},[67,7612,3031],{"class":84},[67,7614,7059],{"class":73},[67,7616,3031],{"class":84},[67,7618,3096],{"class":73},[67,7620,7621],{"class":2058}," \u002F\u002F100\n",[67,7623,7624],{"class":69,"line":689},[67,7625,3419],{"class":73},[19,7627,7628],{},"4.有参有返",[58,7630,7632],{"className":1992,"code":7631,"language":1994,"meta":63,"style":63},"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",[32,7633,7634,7649,7653,7666,7672,7676,7685,7689,7701,7715,7730],{"__ignoreMap":63},[67,7635,7636,7638,7641,7643,7645,7647],{"class":69,"line":70},[67,7637,2006],{"class":84},[67,7639,7640],{"class":110}," test04",[67,7642,854],{"class":73},[67,7644,2006],{"class":84},[67,7646,3253],{"class":7033},[67,7648,829],{"class":73},[67,7650,7651],{"class":69,"line":191},[67,7652,3400],{"class":73},[67,7654,7655,7657,7659,7662,7664],{"class":69,"line":202},[67,7656,3405],{"class":73},[67,7658,3031],{"class":84},[67,7660,7661],{"class":114},"\"hello\"",[67,7663,3031],{"class":84},[67,7665,3053],{"class":73},[67,7667,7668,7670],{"class":69,"line":641},[67,7669,5910],{"class":84},[67,7671,3287],{"class":73},[67,7673,7674],{"class":69,"line":655},[67,7675,3419],{"class":73},[67,7677,7678,7680,7683],{"class":69,"line":660},[67,7679,2006],{"class":84},[67,7681,7682],{"class":110}," mian",[67,7684,3809],{"class":73},[67,7686,7687],{"class":69,"line":665},[67,7688,3400],{"class":73},[67,7690,7691,7693,7695,7697,7699],{"class":69,"line":677},[67,7692,3818],{"class":84},[67,7694,4658],{"class":73},[67,7696,85],{"class":84},[67,7698,2209],{"class":77},[67,7700,3148],{"class":73},[67,7702,7703,7705,7707,7709,7712],{"class":69,"line":683},[67,7704,3818],{"class":84},[67,7706,4674],{"class":73},[67,7708,85],{"class":84},[67,7710,7711],{"class":110},"test04",[67,7713,7714],{"class":73},"(b);\n",[67,7716,7717,7719,7721,7723,7725,7727],{"class":69,"line":689},[67,7718,3405],{"class":73},[67,7720,3031],{"class":84},[67,7722,2280],{"class":73},[67,7724,3031],{"class":84},[67,7726,3096],{"class":73},[67,7728,7729],{"class":2058}," \u002F\u002F1\n",[67,7731,7732],{"class":69,"line":694},[67,7733,3419],{"class":73},[14,7735,7737],{"id":7736},"_25函数的声明","2.5函数的声明",[19,7739,7740],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7742,7743,7744],{},"函数的",[2144,7745,7746],{},"声明可以多次，但是函数的定义只能有一次",[58,7748,7750],{"className":1992,"code":7749,"language":1994,"meta":63,"style":63},"\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",[32,7751,7752,7757,7762,7787,7796,7800,7812,7824,7840,7844,7864,7868,7887],{"__ignoreMap":63},[67,7753,7754],{"class":69,"line":70},[67,7755,7756],{"class":2058},"\u002F\u002F函数声明\n",[67,7758,7759],{"class":69,"line":191},[67,7760,7761],{"class":2058},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[67,7763,7764,7766,7769,7771,7773,7775,7777,7779,7781,7784],{"class":69,"line":202},[67,7765,2006],{"class":84},[67,7767,7768],{"class":110}," max",[67,7770,854],{"class":73},[67,7772,2006],{"class":84},[67,7774,3253],{"class":7033},[67,7776,2369],{"class":73},[67,7778,2006],{"class":84},[67,7780,4658],{"class":7033},[67,7782,7783],{"class":73},");",[67,7785,7786],{"class":2058},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[67,7788,7789,7791,7793],{"class":69,"line":641},[67,7790,2006],{"class":84},[67,7792,804],{"class":110},[67,7794,7795],{"class":73},"() \n",[67,7797,7798],{"class":69,"line":655},[67,7799,3400],{"class":73},[67,7801,7802,7804,7806,7808,7810],{"class":69,"line":660},[67,7803,3818],{"class":84},[67,7805,3253],{"class":73},[67,7807,85],{"class":84},[67,7809,2437],{"class":77},[67,7811,3148],{"class":73},[67,7813,7814,7816,7818,7820,7822],{"class":69,"line":665},[67,7815,3818],{"class":84},[67,7817,4658],{"class":73},[67,7819,85],{"class":84},[67,7821,2689],{"class":77},[67,7823,3148],{"class":73},[67,7825,7826,7828,7830,7833,7836,7838],{"class":69,"line":677},[67,7827,3405],{"class":73},[67,7829,3031],{"class":84},[67,7831,7832],{"class":110},"max",[67,7834,7835],{"class":73},"(a,b)",[67,7837,3031],{"class":84},[67,7839,3053],{"class":73},[67,7841,7842],{"class":69,"line":683},[67,7843,3419],{"class":73},[67,7845,7846,7848,7850,7852,7854,7856,7858,7860,7862],{"class":69,"line":689},[67,7847,2006],{"class":84},[67,7849,7768],{"class":110},[67,7851,854],{"class":73},[67,7853,2006],{"class":84},[67,7855,3253],{"class":7033},[67,7857,2369],{"class":73},[67,7859,2006],{"class":84},[67,7861,4658],{"class":7033},[67,7863,829],{"class":73},[67,7865,7866],{"class":69,"line":694},[67,7867,3400],{"class":73},[67,7869,7870,7872,7874,7876,7878,7880,7882,7884],{"class":69,"line":700},[67,7871,5910],{"class":84},[67,7873,3253],{"class":73},[67,7875,2948],{"class":84},[67,7877,2255],{"class":73},[67,7879,2974],{"class":84},[67,7881,2230],{"class":73},[67,7883,2848],{"class":84},[67,7885,7886],{"class":73},"b;\n",[67,7888,7889],{"class":69,"line":706},[67,7890,3419],{"class":73},[14,7892,7894],{"id":7893},"_26函数的分文件编写","2.6函数的分文件编写",[19,7896,7897],{},"4个步骤：",[2994,7899,7900,7903,7906,7909],{},[29,7901,7902],{},"1.创建后缀名为.h的头文件",[29,7904,7905],{},"2.创建后缀名为.cpp的源文件",[29,7907,7908],{},"3.在头文件中写函数的定义",[29,7910,7911],{},"4.在源文件中写函数的定义\n示例：",[19,7913,7914],{},"头文件：swap.h",[58,7916,7918],{"className":1992,"code":7917,"language":1994,"meta":63,"style":63},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[32,7919,7920,7926,7936,7940],{"__ignoreMap":63},[67,7921,7922,7924],{"class":69,"line":70},[67,7923,3784],{"class":84},[67,7925,3787],{"class":114},[67,7927,7928,7930,7932,7934],{"class":69,"line":191},[67,7929,3792],{"class":84},[67,7931,3795],{"class":84},[67,7933,3798],{"class":110},[67,7935,3148],{"class":73},[67,7937,7938],{"class":69,"line":202},[67,7939,7756],{"class":2058},[67,7941,7942,7944,7946,7948,7950,7952,7954,7956,7958],{"class":69,"line":641},[67,7943,7181],{"class":84},[67,7945,7184],{"class":110},[67,7947,854],{"class":73},[67,7949,2006],{"class":84},[67,7951,3253],{"class":7033},[67,7953,2369],{"class":73},[67,7955,2006],{"class":84},[67,7957,4658],{"class":7033},[67,7959,4544],{"class":73},[19,7961,7962],{},"源文件：swap.cpp",[58,7964,7966],{"className":1992,"code":7965,"language":1994,"meta":63,"style":63},"#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",[32,7967,7968,7975,7980,8000,8004,8015,8024,8033,8050,8067],{"__ignoreMap":63},[67,7969,7970,7972],{"class":69,"line":70},[67,7971,3784],{"class":84},[67,7973,7974],{"class":114}," \"swap.h\"\n",[67,7976,7977],{"class":69,"line":191},[67,7978,7979],{"class":2058},"\u002F\u002F函数的定义\n",[67,7981,7982,7984,7986,7988,7990,7992,7994,7996,7998],{"class":69,"line":202},[67,7983,7181],{"class":84},[67,7985,7184],{"class":110},[67,7987,854],{"class":73},[67,7989,2006],{"class":84},[67,7991,3253],{"class":7033},[67,7993,2369],{"class":73},[67,7995,2006],{"class":84},[67,7997,4658],{"class":7033},[67,7999,829],{"class":73},[67,8001,8002],{"class":69,"line":641},[67,8003,3400],{"class":73},[67,8005,8006,8008,8010,8012],{"class":69,"line":655},[67,8007,3818],{"class":84},[67,8009,6075],{"class":73},[67,8011,85],{"class":84},[67,8013,8014],{"class":73},"a;\n",[67,8016,8017,8020,8022],{"class":69,"line":660},[67,8018,8019],{"class":73},"    a",[67,8021,85],{"class":84},[67,8023,7886],{"class":73},[67,8025,8026,8029,8031],{"class":69,"line":665},[67,8027,8028],{"class":73},"    b",[67,8030,85],{"class":84},[67,8032,6100],{"class":73},[67,8034,8035,8037,8039,8042,8044,8046,8048],{"class":69,"line":677},[67,8036,3405],{"class":73},[67,8038,3031],{"class":84},[67,8040,8041],{"class":114},"\"a=\"",[67,8043,3031],{"class":84},[67,8045,2230],{"class":73},[67,8047,3031],{"class":84},[67,8049,3053],{"class":73},[67,8051,8052,8054,8056,8059,8061,8063,8065],{"class":69,"line":683},[67,8053,3405],{"class":73},[67,8055,3031],{"class":84},[67,8057,8058],{"class":114},"\"b=\"",[67,8060,3031],{"class":84},[67,8062,2255],{"class":73},[67,8064,3031],{"class":84},[67,8066,3053],{"class":73},[67,8068,8069],{"class":69,"line":689},[67,8070,3419],{"class":73},[1903,8072,8073],{},"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":63,"searchDepth":191,"depth":191,"links":8075},[8076,8077,8078,8079,8080,8081],{"id":6991,"depth":191,"text":6992},{"id":7078,"depth":191,"text":7079},{"id":7161,"depth":191,"text":7162},{"id":7387,"depth":191,"text":7388},{"id":7736,"depth":191,"text":7737},{"id":7893,"depth":191,"text":7894},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6983,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8088,"title":8089,"body":8090,"description":8097,"extension":1930,"meta":9501,"navigation":630,"path":9502,"seo":9503,"stem":9504,"__hash__":9505},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8091,"toc":9491},[8092,8095,8098,8102,8264,8268,8271,8274,8277,8280,8419,8423,8426,8429,8432,8497,8501,8506,8573,8576,8580,8583,8594,8599,8619,8622,8627,8646,8649,8653,8672,8675,8679,8914,8918,8921,8924,8927,9089,9092,9096,9099,9105,9488],[10,8093,8089],{"id":8094},"_3指针",[19,8096,8097],{},"通过指针保存一个地址，指针就是个地址",[14,8099,8101],{"id":8100},"_31定义指针","3.1定义指针",[58,8103,8105],{"className":1992,"code":8104,"language":1994,"meta":63,"style":63},"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",[32,8106,8107,8115,8119,8124,8136,8141,8149,8159,8177,8197,8201,8206,8211,8216,8230,8246,8260],{"__ignoreMap":63},[67,8108,8109,8111,8113],{"class":69,"line":70},[67,8110,2006],{"class":84},[67,8112,804],{"class":110},[67,8114,3809],{"class":73},[67,8116,8117],{"class":69,"line":191},[67,8118,3400],{"class":73},[67,8120,8121],{"class":69,"line":202},[67,8122,8123],{"class":2058},"    \u002F\u002F1.定义指针\n",[67,8125,8126,8128,8130,8132,8134],{"class":69,"line":641},[67,8127,3818],{"class":84},[67,8129,3253],{"class":73},[67,8131,85],{"class":84},[67,8133,2437],{"class":77},[67,8135,3148],{"class":73},[67,8137,8138],{"class":69,"line":655},[67,8139,8140],{"class":2058},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[67,8142,8143,8146],{"class":69,"line":660},[67,8144,8145],{"class":84},"    int*",[67,8147,8148],{"class":73},"p;\n",[67,8150,8151,8154,8157],{"class":69,"line":665},[67,8152,8153],{"class":73},"    p",[67,8155,8156],{"class":84},"=&",[67,8158,8014],{"class":73},[67,8160,8161,8163,8165,8168,8171,8173,8175],{"class":69,"line":677},[67,8162,3405],{"class":73},[67,8164,3031],{"class":84},[67,8166,8167],{"class":114},"\"a的地址为：\"",[67,8169,8170],{"class":84},"\u003C\u003C&",[67,8172,2230],{"class":73},[67,8174,3031],{"class":84},[67,8176,3053],{"class":73},[67,8178,8179,8181,8183,8186,8188,8190,8192,8194],{"class":69,"line":683},[67,8180,3405],{"class":73},[67,8182,3031],{"class":84},[67,8184,8185],{"class":114},"\"指针p为：\"",[67,8187,3031],{"class":84},[67,8189,19],{"class":73},[67,8191,3031],{"class":84},[67,8193,3096],{"class":73},[67,8195,8196],{"class":2058},"\u002F\u002F指针p表示的就是a的地址\n",[67,8198,8199],{"class":69,"line":689},[67,8200,631],{"emptyLinePlaceholder":630},[67,8202,8203],{"class":69,"line":694},[67,8204,8205],{"class":2058},"    \u002F\u002F2.使用指针\n",[67,8207,8208],{"class":69,"line":700},[67,8209,8210],{"class":2058},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[67,8212,8213],{"class":69,"line":706},[67,8214,8215],{"class":2058},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[67,8217,8218,8221,8223,8225,8228],{"class":69,"line":712},[67,8219,8220],{"class":84},"    *",[67,8222,19],{"class":73},[67,8224,85],{"class":84},[67,8226,8227],{"class":77},"1000",[67,8229,3148],{"class":73},[67,8231,8232,8234,8237,8239,8241,8243],{"class":69,"line":717},[67,8233,3405],{"class":73},[67,8235,8236],{"class":84},"\u003C\u003C*",[67,8238,19],{"class":73},[67,8240,3031],{"class":84},[67,8242,3096],{"class":73},[67,8244,8245],{"class":2058},"\u002F\u002F1000\n",[67,8247,8248,8250,8252,8254,8256,8258],{"class":69,"line":723},[67,8249,3405],{"class":73},[67,8251,3031],{"class":84},[67,8253,2230],{"class":73},[67,8255,3031],{"class":84},[67,8257,3096],{"class":73},[67,8259,8245],{"class":2058},[67,8261,8262],{"class":69,"line":729},[67,8263,3419],{"class":73},[14,8265,8267],{"id":8266},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8269,8270],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8272,8273],{},"在32位操作系统下：占用4个字节空间",[19,8275,8276],{},"在64位操作系统下：占用8个字节空间",[19,8278,8279],{},"上方是不管啥数据类型的",[58,8281,8283],{"className":1992,"code":8282,"language":1994,"meta":63,"style":63},"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",[32,8284,8285,8293,8297,8302,8314,8319,8324,8329,8341,8363,8389,8415],{"__ignoreMap":63},[67,8286,8287,8289,8291],{"class":69,"line":70},[67,8288,2006],{"class":84},[67,8290,804],{"class":110},[67,8292,3809],{"class":73},[67,8294,8295],{"class":69,"line":191},[67,8296,3400],{"class":73},[67,8298,8299],{"class":69,"line":202},[67,8300,8301],{"class":2058},"    \u002F\u002F指针所占内存空间\n",[67,8303,8304,8306,8308,8310,8312],{"class":69,"line":641},[67,8305,3818],{"class":84},[67,8307,3253],{"class":73},[67,8309,85],{"class":84},[67,8311,2437],{"class":77},[67,8313,3148],{"class":73},[67,8315,8316],{"class":69,"line":655},[67,8317,8318],{"class":2058},"    \u002F\u002Fint *p;\n",[67,8320,8321],{"class":69,"line":660},[67,8322,8323],{"class":2058},"    \u002F\u002Fp=&a;\n",[67,8325,8326],{"class":69,"line":665},[67,8327,8328],{"class":2058},"    \u002F\u002F上述可以写为以下：\n",[67,8330,8331,8333,8335,8337,8339],{"class":69,"line":677},[67,8332,3818],{"class":84},[67,8334,986],{"class":84},[67,8336,19],{"class":73},[67,8338,8156],{"class":84},[67,8340,8014],{"class":73},[67,8342,8343,8346,8348,8351,8353,8356,8358,8360],{"class":69,"line":683},[67,8344,8345],{"class":73},"    cout ",[67,8347,3031],{"class":84},[67,8349,8350],{"class":114},"\"sizeof(int *)\"",[67,8352,3227],{"class":84},[67,8354,8355],{"class":73},"(p)",[67,8357,3031],{"class":84},[67,8359,3096],{"class":73},[67,8361,8362],{"class":2058},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[67,8364,8365,8367,8369,8371,8373,8375,8377,8379,8381,8383,8386],{"class":69,"line":689},[67,8366,8345],{"class":73},[67,8368,3031],{"class":84},[67,8370,8350],{"class":114},[67,8372,3227],{"class":84},[67,8374,854],{"class":73},[67,8376,2006],{"class":84},[67,8378,986],{"class":84},[67,8380,2420],{"class":73},[67,8382,3031],{"class":84},[67,8384,8385],{"class":73},"endl",[67,8387,8388],{"class":2058},"  \u002F\u002F4字节(32位的话)\n",[67,8390,8391,8393,8395,8398,8400,8402,8404,8406,8408,8410,8412],{"class":69,"line":694},[67,8392,8345],{"class":73},[67,8394,3031],{"class":84},[67,8396,8397],{"class":114},"\"sizeof(char *)\"",[67,8399,3227],{"class":84},[67,8401,854],{"class":73},[67,8403,2096],{"class":84},[67,8405,986],{"class":84},[67,8407,2420],{"class":73},[67,8409,3031],{"class":84},[67,8411,3096],{"class":73},[67,8413,8414],{"class":2058}," \u002F\u002F4字节(32位的话)\n",[67,8416,8417],{"class":69,"line":700},[67,8418,3419],{"class":73},[14,8420,8422],{"id":8421},"_33空指针","3.3空指针",[19,8424,8425],{},"空指针：指针变量指向内存中编号为0的空间",[19,8427,8428],{},"用途：初始化指针变量",[19,8430,8431],{},"注意：空指针指向的内存是不可以访问的",[58,8433,8435],{"className":1992,"code":8434,"language":1994,"meta":63,"style":63},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[32,8436,8437,8445,8449,8454,8468,8473,8488,8493],{"__ignoreMap":63},[67,8438,8439,8441,8443],{"class":69,"line":70},[67,8440,2006],{"class":84},[67,8442,804],{"class":110},[67,8444,3809],{"class":73},[67,8446,8447],{"class":69,"line":191},[67,8448,3400],{"class":73},[67,8450,8451],{"class":69,"line":202},[67,8452,8453],{"class":2058},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[67,8455,8456,8458,8460,8462,8464,8466],{"class":69,"line":641},[67,8457,3818],{"class":84},[67,8459,986],{"class":84},[67,8461,19],{"class":73},[67,8463,85],{"class":84},[67,8465,4225],{"class":77},[67,8467,3148],{"class":73},[67,8469,8470],{"class":69,"line":655},[67,8471,8472],{"class":2058},"    \u002F\u002F2.空指针不能进行访问\n",[67,8474,8475,8477,8479,8481,8483,8485],{"class":69,"line":660},[67,8476,8220],{"class":84},[67,8478,19],{"class":73},[67,8480,85],{"class":84},[67,8482,2302],{"class":77},[67,8484,2055],{"class":73},[67,8486,8487],{"class":2058},"\u002F\u002F直接报错，压根不能访问\n",[67,8489,8490],{"class":69,"line":665},[67,8491,8492],{"class":2058},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[67,8494,8495],{"class":69,"line":677},[67,8496,3419],{"class":73},[14,8498,8500],{"id":8499},"_34野指针","3.4野指针",[19,8502,8503],{},[2144,8504,8505],{},"指针变量指向非法的内存空间",[58,8507,8509],{"className":1992,"code":8508,"language":1994,"meta":63,"style":63},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[32,8510,8511,8519,8523,8552,8557,8569],{"__ignoreMap":63},[67,8512,8513,8515,8517],{"class":69,"line":70},[67,8514,2006],{"class":84},[67,8516,804],{"class":110},[67,8518,3809],{"class":73},[67,8520,8521],{"class":69,"line":191},[67,8522,3400],{"class":73},[67,8524,8525,8527,8529,8531,8533,8535,8537,8539,8541,8544,8547,8549],{"class":69,"line":202},[67,8526,3818],{"class":84},[67,8528,986],{"class":84},[67,8530,19],{"class":73},[67,8532,85],{"class":84},[67,8534,854],{"class":73},[67,8536,2006],{"class":84},[67,8538,986],{"class":84},[67,8540,2420],{"class":73},[67,8542,8543],{"class":84},"0x",[67,8545,8546],{"class":77},"1100",[67,8548,2055],{"class":73},[67,8550,8551],{"class":2058}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[67,8553,8554],{"class":69,"line":641},[67,8555,8556],{"class":2058},"    \u002F\u002F访问野指针报错\n",[67,8558,8559,8561,8563,8565,8567],{"class":69,"line":655},[67,8560,3405],{"class":73},[67,8562,8236],{"class":84},[67,8564,19],{"class":73},[67,8566,3031],{"class":84},[67,8568,3053],{"class":73},[67,8570,8571],{"class":69,"line":660},[67,8572,3419],{"class":73},[19,8574,8575],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8577,8579],{"id":8578},"_35const修饰指针","3.5const修饰指针",[19,8581,8582],{},"三种情况：",[2994,8584,8585,8588,8591],{},[29,8586,8587],{},"const修饰指针 常量指针",[29,8589,8590],{},"const修饰常量 指针常量",[29,8592,8593],{},"const即修饰指针，又修饰常量",[26,8595,8596],{},[29,8597,8598],{},"常量指针",[58,8600,8602],{"className":1992,"code":8601,"language":1994,"meta":63,"style":63},"const int *p=&a;\n",[32,8603,8604],{"__ignoreMap":63},[67,8605,8606,8609,8611,8613,8615,8617],{"class":69,"line":70},[67,8607,8608],{"class":84},"const",[67,8610,4215],{"class":84},[67,8612,986],{"class":84},[67,8614,19],{"class":73},[67,8616,8156],{"class":84},[67,8618,8014],{"class":73},[19,8620,8621],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[26,8623,8624],{"start":191},[29,8625,8626],{},"指针常量",[58,8628,8630],{"className":1992,"code":8629,"language":1994,"meta":63,"style":63},"int *const p=&a;\n",[32,8631,8632],{"__ignoreMap":63},[67,8633,8634,8636,8639,8642,8644],{"class":69,"line":70},[67,8635,2006],{"class":84},[67,8637,8638],{"class":84}," *const",[67,8640,8641],{"class":73}," p",[67,8643,8156],{"class":84},[67,8645,8014],{"class":73},[19,8647,8648],{},"指针的指向不可以改，指针指向的值可以改",[26,8650,8651],{"start":202},[29,8652,8593],{},[58,8654,8656],{"className":1992,"code":8655,"language":1994,"meta":63,"style":63},"const int *const p=&a;\n",[32,8657,8658],{"__ignoreMap":63},[67,8659,8660,8662,8664,8666,8668,8670],{"class":69,"line":70},[67,8661,8608],{"class":84},[67,8663,4215],{"class":84},[67,8665,8638],{"class":84},[67,8667,8641],{"class":73},[67,8669,8156],{"class":84},[67,8671,8014],{"class":73},[19,8673,8674],{},"指针的指向和指针指向的值都不可以改变",[14,8676,8678],{"id":8677},"_36指针和数组","3.6指针和数组",[58,8680,8682],{"className":1992,"code":8681,"language":1994,"meta":63,"style":63},"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",[32,8683,8684,8692,8696,8701,8755,8776,8792,8808,8819,8836,8841,8855,8881,8885,8897,8906,8910],{"__ignoreMap":63},[67,8685,8686,8688,8690],{"class":69,"line":70},[67,8687,2006],{"class":84},[67,8689,804],{"class":110},[67,8691,3809],{"class":73},[67,8693,8694],{"class":69,"line":191},[67,8695,3400],{"class":73},[67,8697,8698],{"class":69,"line":202},[67,8699,8700],{"class":2058},"    \u002F\u002F利用指针访问数组中的元素\n",[67,8702,8703,8705,8707,8709,8711,8713,8715,8717,8719,8721,8723,8725,8727,8729,8731,8733,8735,8737,8739,8741,8743,8745,8747,8749,8751,8753],{"class":69,"line":641},[67,8704,3818],{"class":84},[67,8706,5782],{"class":73},[67,8708,2437],{"class":77},[67,8710,2928],{"class":73},[67,8712,85],{"class":84},[67,8714,2885],{"class":73},[67,8716,2209],{"class":77},[67,8718,2369],{"class":73},[67,8720,2077],{"class":77},[67,8722,2369],{"class":73},[67,8724,2071],{"class":77},[67,8726,2369],{"class":73},[67,8728,1047],{"class":77},[67,8730,2369],{"class":73},[67,8732,2310],{"class":77},[67,8734,2369],{"class":73},[67,8736,2335],{"class":77},[67,8738,2369],{"class":73},[67,8740,2360],{"class":77},[67,8742,2369],{"class":73},[67,8744,2386],{"class":77},[67,8746,2369],{"class":73},[67,8748,2411],{"class":77},[67,8750,2369],{"class":73},[67,8752,2437],{"class":77},[67,8754,5815],{"class":73},[67,8756,8757,8759,8761,8764,8766,8768,8770,8772,8774],{"class":69,"line":655},[67,8758,3405],{"class":73},[67,8760,3031],{"class":84},[67,8762,8763],{"class":114},"\"数组的第一个元素为：\"",[67,8765,3031],{"class":84},[67,8767,5726],{"class":73},[67,8769,78],{"class":77},[67,8771,2928],{"class":73},[67,8773,3031],{"class":84},[67,8775,3053],{"class":73},[67,8777,8778,8780,8782,8784,8786,8789],{"class":69,"line":660},[67,8779,3818],{"class":84},[67,8781,986],{"class":84},[67,8783,19],{"class":73},[67,8785,85],{"class":84},[67,8787,8788],{"class":73},"arr;",[67,8790,8791],{"class":2058},"\u002F\u002F注意数才要加取地址符号&\n",[67,8793,8794,8796,8798,8800,8802,8804,8806],{"class":69,"line":665},[67,8795,3405],{"class":73},[67,8797,3031],{"class":84},[67,8799,8763],{"class":114},[67,8801,8236],{"class":84},[67,8803,19],{"class":73},[67,8805,3031],{"class":84},[67,8807,3053],{"class":73},[67,8809,8810,8812,8814,8816],{"class":69,"line":677},[67,8811,8153],{"class":73},[67,8813,4125],{"class":84},[67,8815,2055],{"class":73},[67,8817,8818],{"class":2058}," \u002F\u002F让指针向后偏移4个字节\n",[67,8820,8821,8823,8825,8828,8830,8832,8834],{"class":69,"line":683},[67,8822,3405],{"class":73},[67,8824,3031],{"class":84},[67,8826,8827],{"class":114},"\"数组的第二个元素为：\"",[67,8829,8236],{"class":84},[67,8831,19],{"class":73},[67,8833,3031],{"class":84},[67,8835,3053],{"class":73},[67,8837,8838],{"class":69,"line":689},[67,8839,8840],{"class":2058},"    \u002F\u002F利用指针遍历数组\n",[67,8842,8843,8845,8847,8850,8852],{"class":69,"line":694},[67,8844,3818],{"class":84},[67,8846,986],{"class":84},[67,8848,8849],{"class":73},"p2",[67,8851,85],{"class":84},[67,8853,8854],{"class":73},"arr;\n",[67,8856,8857,8859,8861,8863,8865,8867,8869,8871,8873,8875,8877,8879],{"class":69,"line":700},[67,8858,935],{"class":84},[67,8860,3505],{"class":73},[67,8862,2006],{"class":84},[67,8864,4856],{"class":73},[67,8866,85],{"class":84},[67,8868,78],{"class":77},[67,8870,4863],{"class":73},[67,8872,259],{"class":84},[67,8874,2437],{"class":77},[67,8876,4863],{"class":73},[67,8878,4125],{"class":84},[67,8880,829],{"class":73},[67,8882,8883],{"class":69,"line":706},[67,8884,3863],{"class":73},[67,8886,8887,8889,8891,8893,8895],{"class":69,"line":712},[67,8888,5273],{"class":73},[67,8890,8236],{"class":84},[67,8892,8849],{"class":73},[67,8894,3031],{"class":84},[67,8896,3053],{"class":73},[67,8898,8899,8902,8904],{"class":69,"line":717},[67,8900,8901],{"class":73},"        p2",[67,8903,4125],{"class":84},[67,8905,3148],{"class":73},[67,8907,8908],{"class":69,"line":723},[67,8909,4020],{"class":73},[67,8911,8912],{"class":69,"line":729},[67,8913,3419],{"class":73},[14,8915,8917],{"id":8916},"_37指针和函数","3.7指针和函数",[19,8919,8920],{},"利用指针做函数参数，可以修改实参的值",[19,8922,8923],{},"值传递：只改变形参，不改变实参",[19,8925,8926],{},"地址传递：",[58,8928,8930],{"className":1992,"code":8929,"language":1994,"meta":63,"style":63},"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",[32,8931,8932,8957,8961,8973,8984,8994,8998,9006,9010,9022,9034,9039,9055,9070,9085],{"__ignoreMap":63},[67,8933,8934,8936,8938,8940,8942,8944,8947,8949,8951,8953,8955],{"class":69,"line":70},[67,8935,7181],{"class":84},[67,8937,7184],{"class":110},[67,8939,854],{"class":73},[67,8941,2006],{"class":84},[67,8943,986],{"class":84},[67,8945,8946],{"class":7033},"p1",[67,8948,2369],{"class":73},[67,8950,2006],{"class":84},[67,8952,986],{"class":84},[67,8954,8849],{"class":7033},[67,8956,829],{"class":73},[67,8958,8959],{"class":69,"line":191},[67,8960,3400],{"class":73},[67,8962,8963,8965,8967,8970],{"class":69,"line":202},[67,8964,3818],{"class":84},[67,8966,6075],{"class":73},[67,8968,8969],{"class":84},"=*",[67,8971,8972],{"class":73},"p1;\n",[67,8974,8975,8977,8979,8981],{"class":69,"line":641},[67,8976,8220],{"class":84},[67,8978,8946],{"class":73},[67,8980,8969],{"class":84},[67,8982,8983],{"class":73},"p2;\n",[67,8985,8986,8988,8990,8992],{"class":69,"line":655},[67,8987,8220],{"class":84},[67,8989,8849],{"class":73},[67,8991,85],{"class":84},[67,8993,6100],{"class":73},[67,8995,8996],{"class":69,"line":660},[67,8997,3419],{"class":73},[67,8999,9000,9002,9004],{"class":69,"line":665},[67,9001,2006],{"class":84},[67,9003,804],{"class":110},[67,9005,3809],{"class":73},[67,9007,9008],{"class":69,"line":677},[67,9009,3400],{"class":73},[67,9011,9012,9014,9016,9018,9020],{"class":69,"line":683},[67,9013,3818],{"class":84},[67,9015,3253],{"class":73},[67,9017,85],{"class":84},[67,9019,2437],{"class":77},[67,9021,3148],{"class":73},[67,9023,9024,9026,9028,9030,9032],{"class":69,"line":689},[67,9025,3818],{"class":84},[67,9027,4658],{"class":73},[67,9029,85],{"class":84},[67,9031,2689],{"class":77},[67,9033,3148],{"class":73},[67,9035,9036],{"class":69,"line":694},[67,9037,9038],{"class":2058},"    \u002F\u002F地址传递\n",[67,9040,9041,9043,9045,9047,9050,9052],{"class":69,"line":700},[67,9042,7378],{"class":110},[67,9044,854],{"class":73},[67,9046,2344],{"class":84},[67,9048,9049],{"class":73},"a,",[67,9051,2344],{"class":84},[67,9053,9054],{"class":73},"b);\n",[67,9056,9057,9059,9061,9063,9065,9067],{"class":69,"line":706},[67,9058,3405],{"class":73},[67,9060,3031],{"class":84},[67,9062,2230],{"class":73},[67,9064,3031],{"class":84},[67,9066,3096],{"class":73},[67,9068,9069],{"class":2058},"\u002F\u002F20\n",[67,9071,9072,9074,9076,9078,9080,9082],{"class":69,"line":712},[67,9073,3405],{"class":73},[67,9075,3031],{"class":84},[67,9077,2255],{"class":73},[67,9079,3031],{"class":84},[67,9081,3096],{"class":73},[67,9083,9084],{"class":2058},"\u002F\u002F10\n",[67,9086,9087],{"class":69,"line":717},[67,9088,3419],{"class":73},[19,9090,9091],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9093,9095],{"id":9094},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9097,9098],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9100,9101,9102,9104],{},"例如数组：int arr",[67,9103,2437],{},"={4,3,6,9,1,2,10,8,7,5}",[58,9106,9108],{"className":1992,"code":9107,"language":1994,"meta":63,"style":63},"#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",[32,9109,9110,9116,9126,9150,9154,9185,9189,9223,9227,9245,9249,9260,9275,9290,9294,9298,9302,9306,9310,9318,9322,9327,9381,9393,9405,9410,9418,9422,9427,9452,9456,9471,9480,9484],{"__ignoreMap":63},[67,9111,9112,9114],{"class":69,"line":70},[67,9113,3784],{"class":84},[67,9115,3787],{"class":114},[67,9117,9118,9120,9122,9124],{"class":69,"line":191},[67,9119,3792],{"class":84},[67,9121,3795],{"class":84},[67,9123,3798],{"class":110},[67,9125,3148],{"class":73},[67,9127,9128,9130,9133,9135,9137,9139,9141,9143,9145,9148],{"class":69,"line":202},[67,9129,7181],{"class":84},[67,9131,9132],{"class":110}," bubbleSort",[67,9134,854],{"class":73},[67,9136,2006],{"class":84},[67,9138,986],{"class":84},[67,9140,19],{"class":7033},[67,9142,2369],{"class":73},[67,9144,2006],{"class":84},[67,9146,9147],{"class":7033}," len",[67,9149,829],{"class":73},[67,9151,9152],{"class":69,"line":641},[67,9153,3400],{"class":73},[67,9155,9156,9158,9160,9162,9164,9166,9168,9170,9172,9175,9177,9179,9181,9183],{"class":69,"line":655},[67,9157,935],{"class":84},[67,9159,854],{"class":73},[67,9161,2006],{"class":84},[67,9163,4856],{"class":73},[67,9165,85],{"class":84},[67,9167,78],{"class":77},[67,9169,4863],{"class":73},[67,9171,259],{"class":84},[67,9173,9174],{"class":73},"len",[67,9176,1863],{"class":84},[67,9178,2209],{"class":77},[67,9180,4863],{"class":73},[67,9182,4125],{"class":84},[67,9184,829],{"class":73},[67,9186,9187],{"class":69,"line":660},[67,9188,3863],{"class":73},[67,9190,9191,9193,9195,9197,9199,9201,9203,9205,9207,9209,9211,9213,9215,9217,9219,9221],{"class":69,"line":665},[67,9192,5225],{"class":84},[67,9194,854],{"class":73},[67,9196,2006],{"class":84},[67,9198,5232],{"class":73},[67,9200,85],{"class":84},[67,9202,78],{"class":77},[67,9204,5239],{"class":73},[67,9206,259],{"class":84},[67,9208,9174],{"class":73},[67,9210,1863],{"class":84},[67,9212,2432],{"class":73},[67,9214,1863],{"class":84},[67,9216,2209],{"class":77},[67,9218,5239],{"class":73},[67,9220,4125],{"class":84},[67,9222,829],{"class":73},[67,9224,9225],{"class":69,"line":677},[67,9226,4342],{"class":73},[67,9228,9229,9231,9234,9236,9239,9241,9243],{"class":69,"line":683},[67,9230,6461],{"class":84},[67,9232,9233],{"class":73},"(p[j]",[67,9235,2948],{"class":84},[67,9237,9238],{"class":73},"p[j",[67,9240,2471],{"class":84},[67,9242,2209],{"class":77},[67,9244,6476],{"class":73},[67,9246,9247],{"class":69,"line":689},[67,9248,6481],{"class":73},[67,9250,9251,9253,9255,9257],{"class":69,"line":694},[67,9252,6486],{"class":84},[67,9254,6075],{"class":73},[67,9256,85],{"class":84},[67,9258,9259],{"class":73},"p[j];\n",[67,9261,9262,9265,9267,9269,9271,9273],{"class":69,"line":700},[67,9263,9264],{"class":73},"                p[j]",[67,9266,85],{"class":84},[67,9268,9238],{"class":73},[67,9270,2471],{"class":84},[67,9272,2209],{"class":77},[67,9274,6509],{"class":73},[67,9276,9277,9280,9282,9284,9286,9288],{"class":69,"line":706},[67,9278,9279],{"class":73},"                p[j",[67,9281,2471],{"class":84},[67,9283,2209],{"class":77},[67,9285,2928],{"class":73},[67,9287,85],{"class":84},[67,9289,6100],{"class":73},[67,9291,9292],{"class":69,"line":712},[67,9293,6529],{"class":73},[67,9295,9296],{"class":69,"line":717},[67,9297,4361],{"class":73},[67,9299,9300],{"class":69,"line":723},[67,9301,4020],{"class":73},[67,9303,9304],{"class":69,"line":729},[67,9305,3419],{"class":73},[67,9307,9308],{"class":69,"line":735},[67,9309,631],{"emptyLinePlaceholder":630},[67,9311,9312,9314,9316],{"class":69,"line":741},[67,9313,2006],{"class":84},[67,9315,804],{"class":110},[67,9317,3809],{"class":73},[67,9319,9320],{"class":69,"line":747},[67,9321,3400],{"class":73},[67,9323,9324],{"class":69,"line":753},[67,9325,9326],{"class":2058},"    \u002F\u002F 1.创建数组\n",[67,9328,9329,9331,9333,9335,9337,9339,9341,9343,9345,9347,9349,9351,9353,9355,9357,9359,9361,9363,9365,9367,9369,9371,9373,9375,9377,9379],{"class":69,"line":758},[67,9330,3818],{"class":84},[67,9332,5782],{"class":73},[67,9334,2437],{"class":77},[67,9336,2928],{"class":73},[67,9338,85],{"class":84},[67,9340,2885],{"class":73},[67,9342,1047],{"class":77},[67,9344,2369],{"class":73},[67,9346,2071],{"class":77},[67,9348,2369],{"class":73},[67,9350,2335],{"class":77},[67,9352,2369],{"class":73},[67,9354,2411],{"class":77},[67,9356,2369],{"class":73},[67,9358,2209],{"class":77},[67,9360,2369],{"class":73},[67,9362,2077],{"class":77},[67,9364,2369],{"class":73},[67,9366,2437],{"class":77},[67,9368,2369],{"class":73},[67,9370,2386],{"class":77},[67,9372,2369],{"class":73},[67,9374,2360],{"class":77},[67,9376,2369],{"class":73},[67,9378,2310],{"class":77},[67,9380,5815],{"class":73},[67,9382,9383,9385,9387,9389,9391],{"class":69,"line":764},[67,9384,3818],{"class":84},[67,9386,9147],{"class":73},[67,9388,85],{"class":84},[67,9390,2437],{"class":77},[67,9392,3148],{"class":73},[67,9394,9395,9397,9399,9401,9403],{"class":69,"line":770},[67,9396,3818],{"class":84},[67,9398,986],{"class":84},[67,9400,19],{"class":73},[67,9402,85],{"class":84},[67,9404,8854],{"class":73},[67,9406,9407],{"class":69,"line":776},[67,9408,9409],{"class":2058},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[67,9411,9412,9415],{"class":69,"line":782},[67,9413,9414],{"class":110},"    bubbleSort",[67,9416,9417],{"class":73},"(p,len);\n",[67,9419,9420],{"class":69,"line":788},[67,9421,631],{"emptyLinePlaceholder":630},[67,9423,9424],{"class":69,"line":793},[67,9425,9426],{"class":2058},"    \u002F\u002F 3.打印排序后的数组\n",[67,9428,9429,9431,9433,9435,9437,9439,9441,9443,9445,9448,9450],{"class":69,"line":798},[67,9430,935],{"class":84},[67,9432,3505],{"class":73},[67,9434,2006],{"class":84},[67,9436,4856],{"class":73},[67,9438,85],{"class":84},[67,9440,78],{"class":77},[67,9442,5036],{"class":73},[67,9444,259],{"class":84},[67,9446,9447],{"class":73},"len; i",[67,9449,4125],{"class":84},[67,9451,829],{"class":73},[67,9453,9454],{"class":69,"line":816},[67,9455,3863],{"class":73},[67,9457,9458,9460,9462,9464,9466,9469],{"class":69,"line":832},[67,9459,5273],{"class":73},[67,9461,8236],{"class":84},[67,9463,19],{"class":73},[67,9465,3031],{"class":84},[67,9467,9468],{"class":114},"\"\"",[67,9470,3148],{"class":73},[67,9472,9473,9476,9478],{"class":69,"line":843},[67,9474,9475],{"class":73},"        p",[67,9477,4125],{"class":84},[67,9479,3148],{"class":73},[67,9481,9482],{"class":69,"line":848},[67,9483,4020],{"class":73},[67,9485,9486],{"class":69,"line":863},[67,9487,3419],{"class":73},[1903,9489,9490],{},"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":63,"searchDepth":191,"depth":191,"links":9492},[9493,9494,9495,9496,9497,9498,9499,9500],{"id":8100,"depth":191,"text":8101},{"id":8266,"depth":191,"text":8267},{"id":8421,"depth":191,"text":8422},{"id":8499,"depth":191,"text":8500},{"id":8578,"depth":191,"text":8579},{"id":8677,"depth":191,"text":8678},{"id":8916,"depth":191,"text":8917},{"id":9094,"depth":191,"text":9095},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8089,"description":8097},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9507,"title":9508,"body":9509,"description":9516,"extension":1930,"meta":12474,"navigation":630,"path":12475,"seo":12476,"stem":12477,"__hash__":12478},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9510,"toc":12465},[9511,9514,9517,9521,9524,9527,9538,9866,9869,9873,9876,9883,10138,10142,10145,10148,10303,10307,10310,10313,10519,10523,10526,10829,10832,10840,10844,10847,10998,11000,11011,11068,11072,11077,11728,11736,11739,11833,11836,12456,12462],[10,9512,9508],{"id":9513},"_4结构体",[19,9515,9516],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9518,9520],{"id":9519},"_41结构体定义与使用","4.1结构体定义与使用",[19,9522,9523],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9525,9526],{},"通过结构体创建变量的方式：",[2994,9528,9529,9532,9535],{},[29,9530,9531],{},"struct 结构体名 变量名",[29,9533,9534],{},"struct 结构体名 变量名={成员1值，成员2值...}",[29,9536,9537],{},"定义结构体时顺便创建变量",[58,9539,9541],{"className":1992,"code":9540,"language":1994,"meta":63,"style":63},"#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",[32,9542,9543,9549,9559,9566,9571,9579,9583,9588,9592,9597,9602,9607,9614,9619,9626,9630,9637,9641,9645,9649,9653,9657,9661,9667,9671,9677,9685,9693,9697,9702,9707,9718,9723,9735,9746,9757,9762,9785,9789,9794,9820,9824,9829,9840,9851,9862],{"__ignoreMap":63},[67,9544,9545,9547],{"class":69,"line":70},[67,9546,3784],{"class":84},[67,9548,3787],{"class":114},[67,9550,9551,9553,9555,9557],{"class":69,"line":191},[67,9552,3792],{"class":84},[67,9554,3795],{"class":84},[67,9556,3798],{"class":110},[67,9558,3148],{"class":73},[67,9560,9561,9563],{"class":69,"line":202},[67,9562,3784],{"class":84},[67,9564,9565],{"class":114},"\u003Cstring>\n",[67,9567,9568],{"class":69,"line":641},[67,9569,9570],{"class":2058},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[67,9572,9573,9576],{"class":69,"line":655},[67,9574,9575],{"class":84},"struct",[67,9577,9578],{"class":110}," Student\n",[67,9580,9581],{"class":69,"line":660},[67,9582,3400],{"class":73},[67,9584,9585],{"class":69,"line":665},[67,9586,9587],{"class":2058},"    \u002F\u002F成员列表\n",[67,9589,9590],{"class":69,"line":677},[67,9591,631],{"emptyLinePlaceholder":630},[67,9593,9594],{"class":69,"line":683},[67,9595,9596],{"class":2058},"    \u002F\u002F姓名\n",[67,9598,9599],{"class":69,"line":689},[67,9600,9601],{"class":73},"    string name;\n",[67,9603,9604],{"class":69,"line":694},[67,9605,9606],{"class":2058},"    \u002F\u002F年龄\n",[67,9608,9609,9611],{"class":69,"line":700},[67,9610,3818],{"class":84},[67,9612,9613],{"class":73}," age;\n",[67,9615,9616],{"class":69,"line":706},[67,9617,9618],{"class":2058},"    \u002F\u002F分数\n",[67,9620,9621,9623],{"class":69,"line":712},[67,9622,3818],{"class":84},[67,9624,9625],{"class":73}," score;\n",[67,9627,9628],{"class":69,"line":717},[67,9629,5815],{"class":73},[67,9631,9632,9634],{"class":69,"line":723},[67,9633,9575],{"class":84},[67,9635,9636],{"class":110}," School\n",[67,9638,9639],{"class":69,"line":729},[67,9640,3400],{"class":73},[67,9642,9643],{"class":69,"line":735},[67,9644,9587],{"class":2058},[67,9646,9647],{"class":69,"line":741},[67,9648,631],{"emptyLinePlaceholder":630},[67,9650,9651],{"class":69,"line":747},[67,9652,9596],{"class":2058},[67,9654,9655],{"class":69,"line":753},[67,9656,9601],{"class":73},[67,9658,9659],{"class":69,"line":758},[67,9660,9606],{"class":2058},[67,9662,9663,9665],{"class":69,"line":764},[67,9664,3818],{"class":84},[67,9666,9613],{"class":73},[67,9668,9669],{"class":69,"line":770},[67,9670,9618],{"class":2058},[67,9672,9673,9675],{"class":69,"line":776},[67,9674,3818],{"class":84},[67,9676,9625],{"class":73},[67,9678,9679,9682],{"class":69,"line":782},[67,9680,9681],{"class":73},"} s3;",[67,9683,9684],{"class":2058}," \u002F\u002F创建结构体时就创建了变量\n",[67,9686,9687,9689,9691],{"class":69,"line":788},[67,9688,2006],{"class":84},[67,9690,804],{"class":110},[67,9692,3809],{"class":73},[67,9694,9695],{"class":69,"line":793},[67,9696,3400],{"class":73},[67,9698,9699],{"class":69,"line":798},[67,9700,9701],{"class":2058},"    \u002F\u002F2.通过学生类型创建具体学生\n",[67,9703,9704],{"class":69,"line":816},[67,9705,9706],{"class":2058},"    \u002F\u002F2.1 struct Student s1;\n",[67,9708,9709,9712,9715],{"class":69,"line":832},[67,9710,9711],{"class":84},"    struct",[67,9713,9714],{"class":110}," Student",[67,9716,9717],{"class":73}," s1;\n",[67,9719,9720],{"class":69,"line":843},[67,9721,9722],{"class":2058},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[67,9724,9725,9728,9730,9733],{"class":69,"line":848},[67,9726,9727],{"class":73},"    s1.name",[67,9729,85],{"class":84},[67,9731,9732],{"class":114},"\"张三\"",[67,9734,3148],{"class":73},[67,9736,9737,9740,9742,9744],{"class":69,"line":863},[67,9738,9739],{"class":73},"    s1.age",[67,9741,85],{"class":84},[67,9743,2639],{"class":77},[67,9745,3148],{"class":73},[67,9747,9748,9751,9753,9755],{"class":69,"line":876},[67,9749,9750],{"class":73},"    s1.score",[67,9752,85],{"class":84},[67,9754,2246],{"class":77},[67,9756,3148],{"class":73},[67,9758,9759],{"class":69,"line":889},[67,9760,9761],{"class":2058},"    \u002F\u002F输出结果\n",[67,9763,9764,9766,9768,9771,9773,9776,9778,9781,9783],{"class":69,"line":894},[67,9765,3405],{"class":73},[67,9767,3031],{"class":84},[67,9769,9770],{"class":73},"s1.name",[67,9772,3031],{"class":84},[67,9774,9775],{"class":73},"s1.age",[67,9777,3031],{"class":84},[67,9779,9780],{"class":73},"s1.score",[67,9782,3031],{"class":84},[67,9784,3053],{"class":73},[67,9786,9787],{"class":69,"line":911},[67,9788,631],{"emptyLinePlaceholder":630},[67,9790,9791],{"class":69,"line":927},[67,9792,9793],{"class":2058},"    \u002F\u002F2.2 struct Student s2={...}\n",[67,9795,9796,9798,9800,9803,9805,9807,9810,9812,9814,9816,9818],{"class":69,"line":932},[67,9797,9711],{"class":84},[67,9799,9714],{"class":110},[67,9801,9802],{"class":73}," s2",[67,9804,85],{"class":84},[67,9806,2885],{"class":73},[67,9808,9809],{"class":114},"\"王五\"",[67,9811,2369],{"class":73},[67,9813,2639],{"class":77},[67,9815,2369],{"class":73},[67,9817,2246],{"class":77},[67,9819,5815],{"class":73},[67,9821,9822],{"class":69,"line":955},[67,9823,631],{"emptyLinePlaceholder":630},[67,9825,9826],{"class":69,"line":971},[67,9827,9828],{"class":2058},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[67,9830,9831,9834,9836,9838],{"class":69,"line":1010},[67,9832,9833],{"class":73},"    s3.name",[67,9835,85],{"class":84},[67,9837,353],{"class":114},[67,9839,3148],{"class":73},[67,9841,9842,9845,9847,9849],{"class":69,"line":1016},[67,9843,9844],{"class":73},"    s3.age",[67,9846,85],{"class":84},[67,9848,2639],{"class":77},[67,9850,3148],{"class":73},[67,9852,9853,9856,9858,9860],{"class":69,"line":1021},[67,9854,9855],{"class":73},"    s3.score",[67,9857,85],{"class":84},[67,9859,2689],{"class":77},[67,9861,3148],{"class":73},[67,9863,9864],{"class":69,"line":1034},[67,9865,3419],{"class":73},[19,9867,9868],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9870,9872],{"id":9871},"_42结构体数组","4.2结构体数组",[19,9874,9875],{},"将自定义的结构体放入到数组中方便维护",[19,9877,9878,9879,9882],{},"语法：struct 结构体名 数组名",[67,9880,9881],{},"元素个数","={ {}，{},...{} };",[58,9884,9886],{"className":1992,"code":9885,"language":1994,"meta":63,"style":63},"#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",[32,9887,9888,9894,9904,9910,9915,9921,9925,9929,9935,9941,9945,9949,9957,9961,9966,9981,9985,10001,10017,10021,10026,10042,10057,10072,10077,10103,10107,10130,10134],{"__ignoreMap":63},[67,9889,9890,9892],{"class":69,"line":70},[67,9891,3784],{"class":84},[67,9893,3787],{"class":114},[67,9895,9896,9898,9900,9902],{"class":69,"line":191},[67,9897,3792],{"class":84},[67,9899,3795],{"class":84},[67,9901,3798],{"class":110},[67,9903,3148],{"class":73},[67,9905,9906,9908],{"class":69,"line":202},[67,9907,3784],{"class":84},[67,9909,9565],{"class":114},[67,9911,9912],{"class":69,"line":641},[67,9913,9914],{"class":2058},"\u002F\u002F1.定义结构体\n",[67,9916,9917,9919],{"class":69,"line":655},[67,9918,9575],{"class":84},[67,9920,9578],{"class":110},[67,9922,9923],{"class":69,"line":660},[67,9924,3400],{"class":73},[67,9926,9927],{"class":69,"line":665},[67,9928,9601],{"class":73},[67,9930,9931,9933],{"class":69,"line":677},[67,9932,3818],{"class":84},[67,9934,9613],{"class":73},[67,9936,9937,9939],{"class":69,"line":683},[67,9938,3818],{"class":84},[67,9940,9625],{"class":73},[67,9942,9943],{"class":69,"line":689},[67,9944,631],{"emptyLinePlaceholder":630},[67,9946,9947],{"class":69,"line":694},[67,9948,5815],{"class":73},[67,9950,9951,9953,9955],{"class":69,"line":700},[67,9952,2006],{"class":84},[67,9954,804],{"class":110},[67,9956,3809],{"class":73},[67,9958,9959],{"class":69,"line":706},[67,9960,3400],{"class":73},[67,9962,9963],{"class":69,"line":712},[67,9964,9965],{"class":2058},"    \u002F\u002F2.创建结构体数组\n",[67,9967,9968,9970,9972,9975,9977,9979],{"class":69,"line":717},[67,9969,9711],{"class":84},[67,9971,9714],{"class":110},[67,9973,9974],{"class":73}," stuArray[",[67,9976,2077],{"class":77},[67,9978,2928],{"class":73},[67,9980,6727],{"class":84},[67,9982,9983],{"class":69,"line":723},[67,9984,3863],{"class":73},[67,9986,9987,9989,9991,9993,9995,9997,9999],{"class":69,"line":729},[67,9988,6736],{"class":73},[67,9990,9732],{"class":114},[67,9992,2369],{"class":73},[67,9994,2639],{"class":77},[67,9996,2369],{"class":73},[67,9998,2302],{"class":77},[67,10000,6749],{"class":73},[67,10002,10003,10005,10007,10009,10011,10013,10015],{"class":69,"line":735},[67,10004,6736],{"class":73},[67,10006,353],{"class":114},[67,10008,2369],{"class":73},[67,10010,2564],{"class":77},[67,10012,2369],{"class":73},[67,10014,2564],{"class":77},[67,10016,3419],{"class":73},[67,10018,10019],{"class":69,"line":741},[67,10020,4020],{"class":73},[67,10022,10023],{"class":69,"line":747},[67,10024,10025],{"class":2058},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[67,10027,10028,10031,10033,10036,10038,10040],{"class":69,"line":753},[67,10029,10030],{"class":73},"    stuArray[",[67,10032,2209],{"class":77},[67,10034,10035],{"class":73},"].name",[67,10037,85],{"class":84},[67,10039,5522],{"class":114},[67,10041,3148],{"class":73},[67,10043,10044,10046,10048,10051,10053,10055],{"class":69,"line":758},[67,10045,10030],{"class":73},[67,10047,2209],{"class":77},[67,10049,10050],{"class":73},"].age",[67,10052,85],{"class":84},[67,10054,2077],{"class":77},[67,10056,3148],{"class":73},[67,10058,10059,10061,10063,10066,10068,10070],{"class":69,"line":764},[67,10060,10030],{"class":73},[67,10062,2209],{"class":77},[67,10064,10065],{"class":73},"].score",[67,10067,85],{"class":84},[67,10069,2077],{"class":77},[67,10071,3148],{"class":73},[67,10073,10074],{"class":69,"line":770},[67,10075,10076],{"class":2058},"    \u002F\u002F4.遍历结构体数组\n",[67,10078,10079,10081,10083,10085,10087,10089,10091,10093,10095,10097,10099,10101],{"class":69,"line":776},[67,10080,935],{"class":84},[67,10082,3505],{"class":73},[67,10084,2006],{"class":84},[67,10086,4856],{"class":73},[67,10088,85],{"class":84},[67,10090,78],{"class":77},[67,10092,4863],{"class":73},[67,10094,259],{"class":84},[67,10096,2077],{"class":77},[67,10098,4863],{"class":73},[67,10100,4125],{"class":84},[67,10102,829],{"class":73},[67,10104,10105],{"class":69,"line":782},[67,10106,3863],{"class":73},[67,10108,10109,10111,10113,10116,10118,10121,10123,10126,10128],{"class":69,"line":788},[67,10110,5273],{"class":73},[67,10112,3031],{"class":84},[67,10114,10115],{"class":73},"stuArray[i].name",[67,10117,3031],{"class":84},[67,10119,10120],{"class":73},"stuArray[i].age",[67,10122,3031],{"class":84},[67,10124,10125],{"class":73},"stuArray[i].score",[67,10127,3031],{"class":84},[67,10129,3053],{"class":73},[67,10131,10132],{"class":69,"line":793},[67,10133,4020],{"class":73},[67,10135,10136],{"class":69,"line":798},[67,10137,3419],{"class":73},[14,10139,10141],{"id":10140},"_43结构体指针","4.3结构体指针",[19,10143,10144],{},"作用：通过指针访问结构体中的成员",[19,10146,10147],{},"利用操作符->可以通过结构体指针访问结构体属性",[58,10149,10151],{"className":1992,"code":10150,"language":1994,"meta":63,"style":63},"#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",[32,10152,10153,10159,10169,10175,10179,10185,10189,10193,10199,10205,10209,10217,10221,10226,10251,10256,10271,10276,10299],{"__ignoreMap":63},[67,10154,10155,10157],{"class":69,"line":70},[67,10156,3784],{"class":84},[67,10158,3787],{"class":114},[67,10160,10161,10163,10165,10167],{"class":69,"line":191},[67,10162,3792],{"class":84},[67,10164,3795],{"class":84},[67,10166,3798],{"class":110},[67,10168,3148],{"class":73},[67,10170,10171,10173],{"class":69,"line":202},[67,10172,3784],{"class":84},[67,10174,9565],{"class":114},[67,10176,10177],{"class":69,"line":641},[67,10178,9914],{"class":2058},[67,10180,10181,10183],{"class":69,"line":655},[67,10182,9575],{"class":84},[67,10184,9578],{"class":110},[67,10186,10187],{"class":69,"line":660},[67,10188,3400],{"class":73},[67,10190,10191],{"class":69,"line":665},[67,10192,9601],{"class":73},[67,10194,10195,10197],{"class":69,"line":677},[67,10196,3818],{"class":84},[67,10198,9613],{"class":73},[67,10200,10201,10203],{"class":69,"line":683},[67,10202,3818],{"class":84},[67,10204,9625],{"class":73},[67,10206,10207],{"class":69,"line":689},[67,10208,5815],{"class":73},[67,10210,10211,10213,10215],{"class":69,"line":694},[67,10212,2006],{"class":84},[67,10214,804],{"class":110},[67,10216,3809],{"class":73},[67,10218,10219],{"class":69,"line":700},[67,10220,3400],{"class":73},[67,10222,10223],{"class":69,"line":706},[67,10224,10225],{"class":2058},"    \u002F\u002F创建学生结构体变量\n",[67,10227,10228,10230,10232,10235,10237,10239,10241,10243,10245,10247,10249],{"class":69,"line":712},[67,10229,9711],{"class":84},[67,10231,9714],{"class":110},[67,10233,10234],{"class":73}," s",[67,10236,85],{"class":84},[67,10238,2885],{"class":73},[67,10240,9732],{"class":114},[67,10242,2369],{"class":73},[67,10244,2639],{"class":77},[67,10246,2369],{"class":73},[67,10248,3565],{"class":77},[67,10250,5815],{"class":73},[67,10252,10253],{"class":69,"line":717},[67,10254,10255],{"class":2058},"    \u002F\u002F通过指针指向结构体变量\n",[67,10257,10258,10260,10262,10264,10266,10268],{"class":69,"line":723},[67,10259,9711],{"class":84},[67,10261,9714],{"class":110},[67,10263,986],{"class":84},[67,10265,19],{"class":73},[67,10267,8156],{"class":84},[67,10269,10270],{"class":73},"s\n",[67,10272,10273],{"class":69,"line":729},[67,10274,10275],{"class":2058},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[67,10277,10278,10280,10282,10285,10287,10290,10292,10295,10297],{"class":69,"line":735},[67,10279,3405],{"class":73},[67,10281,3031],{"class":84},[67,10283,10284],{"class":73},"p->name",[67,10286,3031],{"class":84},[67,10288,10289],{"class":73},"p->age",[67,10291,3031],{"class":84},[67,10293,10294],{"class":73},"p->score",[67,10296,3031],{"class":84},[67,10298,3053],{"class":73},[67,10300,10301],{"class":69,"line":741},[67,10302,3419],{"class":73},[14,10304,10306],{"id":10305},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10308,10309],{},"作用：结构体中的成员可以是另一个结构体",[19,10311,10312],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[58,10314,10316],{"className":1992,"code":10315,"language":1994,"meta":63,"style":63},"#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",[32,10317,10318,10324,10334,10340,10345,10353,10357,10361,10367,10373,10377,10382,10389,10393,10400,10404,10410,10415,10419,10427,10431,10436,10441,10446,10457,10469,10480,10493,10504,10515],{"__ignoreMap":63},[67,10319,10320,10322],{"class":69,"line":70},[67,10321,3784],{"class":84},[67,10323,3787],{"class":114},[67,10325,10326,10328,10330,10332],{"class":69,"line":191},[67,10327,3792],{"class":84},[67,10329,3795],{"class":84},[67,10331,3798],{"class":110},[67,10333,3148],{"class":73},[67,10335,10336,10338],{"class":69,"line":202},[67,10337,3784],{"class":84},[67,10339,9565],{"class":114},[67,10341,10342],{"class":69,"line":641},[67,10343,10344],{"class":2058},"\u002F\u002F定义学生结构体\n",[67,10346,10347,10349,10351],{"class":69,"line":655},[67,10348,9575],{"class":84},[67,10350,9714],{"class":110},[67,10352,4499],{"class":73},[67,10354,10355],{"class":69,"line":660},[67,10356,3400],{"class":73},[67,10358,10359],{"class":69,"line":665},[67,10360,9601],{"class":73},[67,10362,10363,10365],{"class":69,"line":677},[67,10364,3818],{"class":84},[67,10366,9613],{"class":73},[67,10368,10369,10371],{"class":69,"line":683},[67,10370,3818],{"class":84},[67,10372,9625],{"class":73},[67,10374,10375],{"class":69,"line":689},[67,10376,3419],{"class":73},[67,10378,10379],{"class":69,"line":694},[67,10380,10381],{"class":2058},"\u002F\u002F定义老师结构体\n",[67,10383,10384,10386],{"class":69,"line":700},[67,10385,9575],{"class":84},[67,10387,10388],{"class":110}," Teacher\n",[67,10390,10391],{"class":69,"line":706},[67,10392,3400],{"class":73},[67,10394,10395,10397],{"class":69,"line":712},[67,10396,3818],{"class":84},[67,10398,10399],{"class":73}," id;\n",[67,10401,10402],{"class":69,"line":717},[67,10403,9601],{"class":73},[67,10405,10406,10408],{"class":69,"line":723},[67,10407,3818],{"class":84},[67,10409,9613],{"class":73},[67,10411,10412],{"class":69,"line":729},[67,10413,10414],{"class":73},"    Student stu;\n",[67,10416,10417],{"class":69,"line":735},[67,10418,3419],{"class":73},[67,10420,10421,10423,10425],{"class":69,"line":741},[67,10422,2006],{"class":84},[67,10424,804],{"class":110},[67,10426,7795],{"class":73},[67,10428,10429],{"class":69,"line":747},[67,10430,3400],{"class":73},[67,10432,10433],{"class":69,"line":753},[67,10434,10435],{"class":2058},"    \u002F\u002F结构体嵌套结构体\n",[67,10437,10438],{"class":69,"line":758},[67,10439,10440],{"class":2058},"    \u002F\u002F创建老师\n",[67,10442,10443],{"class":69,"line":764},[67,10444,10445],{"class":73},"    Teacher t;\n",[67,10447,10448,10451,10453,10455],{"class":69,"line":770},[67,10449,10450],{"class":73},"    t.id",[67,10452,85],{"class":84},[67,10454,2302],{"class":77},[67,10456,3148],{"class":73},[67,10458,10459,10462,10464,10467],{"class":69,"line":776},[67,10460,10461],{"class":73},"    t.name",[67,10463,85],{"class":84},[67,10465,10466],{"class":114},"\"老王\"",[67,10468,3148],{"class":73},[67,10470,10471,10474,10476,10478],{"class":69,"line":782},[67,10472,10473],{"class":73},"    t.age",[67,10475,85],{"class":84},[67,10477,2639],{"class":77},[67,10479,3148],{"class":73},[67,10481,10482,10485,10487,10490],{"class":69,"line":788},[67,10483,10484],{"class":73},"    t.stu.name",[67,10486,85],{"class":84},[67,10488,10489],{"class":114},"\"小王\"",[67,10491,10492],{"class":73},"；\n",[67,10494,10495,10498,10500,10502],{"class":69,"line":793},[67,10496,10497],{"class":73},"    t.stu.age",[67,10499,85],{"class":84},[67,10501,2689],{"class":77},[67,10503,3148],{"class":73},[67,10505,10506,10509,10511,10513],{"class":69,"line":798},[67,10507,10508],{"class":73},"    t.stu.score",[67,10510,85],{"class":84},[67,10512,2335],{"class":77},[67,10514,3148],{"class":73},[67,10516,10517],{"class":69,"line":816},[67,10518,3419],{"class":73},[14,10520,10522],{"id":10521},"_45结构体做函数参数","4.5结构体做函数参数",[19,10524,10525],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[58,10527,10529],{"className":1992,"code":10528,"language":1994,"meta":63,"style":63},"#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",[32,10530,10531,10537,10547,10553,10559,10563,10567,10573,10579,10583,10588,10593,10610,10614,10647,10651,10656,10675,10679,10710,10714,10722,10726,10735,10747,10759,10771,10784,10792,10805,10817,10825],{"__ignoreMap":63},[67,10532,10533,10535],{"class":69,"line":70},[67,10534,3784],{"class":84},[67,10536,3787],{"class":114},[67,10538,10539,10541,10543,10545],{"class":69,"line":191},[67,10540,3792],{"class":84},[67,10542,3795],{"class":84},[67,10544,3798],{"class":110},[67,10546,3148],{"class":73},[67,10548,10549,10551],{"class":69,"line":202},[67,10550,3784],{"class":84},[67,10552,9565],{"class":114},[67,10554,10555,10557],{"class":69,"line":641},[67,10556,9575],{"class":84},[67,10558,9578],{"class":110},[67,10560,10561],{"class":69,"line":655},[67,10562,3400],{"class":73},[67,10564,10565],{"class":69,"line":660},[67,10566,9601],{"class":73},[67,10568,10569,10571],{"class":69,"line":665},[67,10570,3818],{"class":84},[67,10572,9613],{"class":73},[67,10574,10575,10577],{"class":69,"line":677},[67,10576,3818],{"class":84},[67,10578,9625],{"class":73},[67,10580,10581],{"class":69,"line":683},[67,10582,5815],{"class":73},[67,10584,10585],{"class":69,"line":689},[67,10586,10587],{"class":2058},"\u002F\u002F打印学生信息的函数\n",[67,10589,10590],{"class":69,"line":694},[67,10591,10592],{"class":2058},"\u002F\u002F值传递\n",[67,10594,10595,10597,10600,10602,10604,10606,10608],{"class":69,"line":700},[67,10596,7181],{"class":84},[67,10598,10599],{"class":110}," printStudent1",[67,10601,854],{"class":73},[67,10603,9575],{"class":84},[67,10605,9714],{"class":110},[67,10607,10234],{"class":7033},[67,10609,829],{"class":73},[67,10611,10612],{"class":69,"line":706},[67,10613,3400],{"class":73},[67,10615,10616,10618,10620,10623,10625,10628,10630,10633,10635,10637,10639,10642,10644],{"class":69,"line":712},[67,10617,8345],{"class":73},[67,10619,3031],{"class":84},[67,10621,10622],{"class":73}," s.name ",[67,10624,3031],{"class":84},[67,10626,10627],{"class":114}," \" \"",[67,10629,3299],{"class":84},[67,10631,10632],{"class":73}," s.age ",[67,10634,3031],{"class":84},[67,10636,10627],{"class":114},[67,10638,3299],{"class":84},[67,10640,10641],{"class":73}," s.score ",[67,10643,3031],{"class":84},[67,10645,10646],{"class":73}," endl;\n",[67,10648,10649],{"class":69,"line":717},[67,10650,3419],{"class":73},[67,10652,10653],{"class":69,"line":723},[67,10654,10655],{"class":2058},"\u002F\u002F地址传递\n",[67,10657,10658,10660,10663,10665,10667,10669,10671,10673],{"class":69,"line":729},[67,10659,7181],{"class":84},[67,10661,10662],{"class":110}," printStudent2",[67,10664,854],{"class":73},[67,10666,9575],{"class":84},[67,10668,9714],{"class":110},[67,10670,986],{"class":84},[67,10672,2684],{"class":7033},[67,10674,829],{"class":73},[67,10676,10677],{"class":69,"line":735},[67,10678,3400],{"class":73},[67,10680,10681,10683,10685,10688,10690,10692,10694,10697,10699,10701,10703,10706,10708],{"class":69,"line":741},[67,10682,8345],{"class":73},[67,10684,3031],{"class":84},[67,10686,10687],{"class":73}," s->name ",[67,10689,3031],{"class":84},[67,10691,10627],{"class":114},[67,10693,3299],{"class":84},[67,10695,10696],{"class":73}," s->age ",[67,10698,3031],{"class":84},[67,10700,10627],{"class":114},[67,10702,3299],{"class":84},[67,10704,10705],{"class":73}," s->score ",[67,10707,3031],{"class":84},[67,10709,10646],{"class":73},[67,10711,10712],{"class":69,"line":747},[67,10713,3419],{"class":73},[67,10715,10716,10718,10720],{"class":69,"line":753},[67,10717,2006],{"class":84},[67,10719,804],{"class":110},[67,10721,3809],{"class":73},[67,10723,10724],{"class":69,"line":758},[67,10725,3400],{"class":73},[67,10727,10728,10730,10732],{"class":69,"line":764},[67,10729,9711],{"class":84},[67,10731,9714],{"class":110},[67,10733,10734],{"class":73}," s;\n",[67,10736,10737,10740,10742,10745],{"class":69,"line":770},[67,10738,10739],{"class":73},"    s.name ",[67,10741,85],{"class":84},[67,10743,10744],{"class":114}," \"张三\"",[67,10746,3148],{"class":73},[67,10748,10749,10752,10754,10757],{"class":69,"line":776},[67,10750,10751],{"class":73},"    s.age ",[67,10753,85],{"class":84},[67,10755,10756],{"class":77}," 20",[67,10758,3148],{"class":73},[67,10760,10761,10764,10766,10769],{"class":69,"line":782},[67,10762,10763],{"class":73},"    s.score ",[67,10765,85],{"class":84},[67,10767,10768],{"class":77}," 85",[67,10770,3148],{"class":73},[67,10772,10773,10775,10777,10780,10782],{"class":69,"line":788},[67,10774,3405],{"class":73},[67,10776,3031],{"class":84},[67,10778,10779],{"class":114},"\"值传递:\"",[67,10781,3031],{"class":84},[67,10783,3053],{"class":73},[67,10785,10786,10789],{"class":69,"line":793},[67,10787,10788],{"class":110},"    printStudent1",[67,10790,10791],{"class":73},"(s);\n",[67,10793,10794,10796,10798,10801,10803],{"class":69,"line":798},[67,10795,3405],{"class":73},[67,10797,3031],{"class":84},[67,10799,10800],{"class":114},"\"地址传递:\"",[67,10802,3031],{"class":84},[67,10804,3053],{"class":73},[67,10806,10807,10810,10812,10814],{"class":69,"line":816},[67,10808,10809],{"class":110},"    printStudent2",[67,10811,854],{"class":73},[67,10813,2344],{"class":84},[67,10815,10816],{"class":73},"s); \n",[67,10818,10819,10821,10823],{"class":69,"line":832},[67,10820,5910],{"class":84},[67,10822,5913],{"class":77},[67,10824,3148],{"class":73},[67,10826,10827],{"class":69,"line":843},[67,10828,3419],{"class":73},[19,10830,10831],{},"注意：",[2994,10833,10834,10837],{},[29,10835,10836],{},"1.先定义结构体，不要在函数中写结构体的定义",[29,10838,10839],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10841,10843],{"id":10842},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10845,10846],{},"用const防止误操作",[58,10848,10850],{"className":1992,"code":10849,"language":1994,"meta":63,"style":63},"#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",[32,10851,10852,10858,10868,10874,10879,10883,10887,10893,10899,10903,10919,10923,10946,10950,10958,10962,10983,10990,10994],{"__ignoreMap":63},[67,10853,10854,10856],{"class":69,"line":70},[67,10855,3784],{"class":84},[67,10857,3787],{"class":114},[67,10859,10860,10862,10864,10866],{"class":69,"line":191},[67,10861,3792],{"class":84},[67,10863,3795],{"class":84},[67,10865,3798],{"class":110},[67,10867,3148],{"class":73},[67,10869,10870,10872],{"class":69,"line":202},[67,10871,3784],{"class":84},[67,10873,9565],{"class":114},[67,10875,10876],{"class":69,"line":641},[67,10877,10878],{"class":73},"sctuct Student\n",[67,10880,10881],{"class":69,"line":655},[67,10882,3400],{"class":73},[67,10884,10885],{"class":69,"line":660},[67,10886,9601],{"class":73},[67,10888,10889,10891],{"class":69,"line":665},[67,10890,3818],{"class":84},[67,10892,9613],{"class":73},[67,10894,10895,10897],{"class":69,"line":677},[67,10896,3818],{"class":84},[67,10898,9625],{"class":73},[67,10900,10901],{"class":69,"line":683},[67,10902,5815],{"class":73},[67,10904,10905,10907,10910,10912,10915,10917],{"class":69,"line":689},[67,10906,7181],{"class":84},[67,10908,10909],{"class":110}," printStudents",[67,10911,854],{"class":73},[67,10913,10914],{"class":110},"student",[67,10916,10234],{"class":7033},[67,10918,829],{"class":73},[67,10920,10921],{"class":69,"line":694},[67,10922,3400],{"class":73},[67,10924,10925,10927,10929,10932,10934,10937,10939,10942,10944],{"class":69,"line":700},[67,10926,3405],{"class":73},[67,10928,3031],{"class":84},[67,10930,10931],{"class":73},"s.name",[67,10933,3031],{"class":84},[67,10935,10936],{"class":73},"s.age",[67,10938,3031],{"class":84},[67,10940,10941],{"class":73},"s.score",[67,10943,3031],{"class":84},[67,10945,3053],{"class":73},[67,10947,10948],{"class":69,"line":706},[67,10949,3419],{"class":73},[67,10951,10952,10954,10956],{"class":69,"line":712},[67,10953,2006],{"class":84},[67,10955,804],{"class":110},[67,10957,7795],{"class":73},[67,10959,10960],{"class":69,"line":717},[67,10961,3400],{"class":73},[67,10963,10964,10967,10969,10971,10973,10975,10977,10979,10981],{"class":69,"line":723},[67,10965,10966],{"class":73},"    Student s",[67,10968,85],{"class":84},[67,10970,2885],{"class":73},[67,10972,9732],{"class":114},[67,10974,2369],{"class":73},[67,10976,2639],{"class":77},[67,10978,2369],{"class":73},[67,10980,2639],{"class":77},[67,10982,5815],{"class":73},[67,10984,10985,10988],{"class":69,"line":729},[67,10986,10987],{"class":110},"    printStudent",[67,10989,10791],{"class":73},[67,10991,10992],{"class":69,"line":735},[67,10993,631],{"emptyLinePlaceholder":630},[67,10995,10996],{"class":69,"line":741},[67,10997,3419],{"class":73},[19,10999,10831],{},[2994,11001,11002,11005,11008],{},[29,11003,11004],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[29,11006,11007],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[29,11009,11010],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[58,11012,11014],{"className":1992,"code":11013,"language":1994,"meta":63,"style":63},"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",[32,11015,11016,11035,11039,11044,11064],{"__ignoreMap":63},[67,11017,11018,11020,11022,11024,11026,11029,11031,11033],{"class":69,"line":70},[67,11019,7181],{"class":84},[67,11021,10909],{"class":110},[67,11023,854],{"class":73},[67,11025,8608],{"class":84},[67,11027,11028],{"class":110}," student",[67,11030,986],{"class":84},[67,11032,2684],{"class":7033},[67,11034,829],{"class":73},[67,11036,11037],{"class":69,"line":191},[67,11038,3400],{"class":73},[67,11040,11041],{"class":69,"line":202},[67,11042,11043],{"class":2058},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[67,11045,11046,11048,11050,11052,11054,11056,11058,11060,11062],{"class":69,"line":641},[67,11047,3405],{"class":73},[67,11049,3031],{"class":84},[67,11051,10931],{"class":73},[67,11053,3031],{"class":84},[67,11055,10936],{"class":73},[67,11057,3031],{"class":84},[67,11059,10941],{"class":73},[67,11061,3031],{"class":84},[67,11063,3053],{"class":73},[67,11065,11066],{"class":69,"line":655},[67,11067,3419],{"class":73},[14,11069,11071],{"id":11070},"_47案例","4.7案例",[26,11073,11074],{},[29,11075,11076],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[58,11078,11080],{"className":1992,"code":11079,"language":1994,"meta":63,"style":63},"#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",[32,11081,11082,11088,11098,11104,11111,11115,11121,11125,11130,11136,11142,11146,11150,11156,11160,11165,11170,11183,11187,11192,11218,11222,11234,11261,11265,11277,11287,11291,11296,11325,11329,11341,11350,11377,11388,11398,11402,11406,11410,11415,11439,11443,11467,11471,11490,11516,11520,11544,11566,11589,11593,11597,11601,11610,11615,11621,11642,11648,11662,11668,11695,11704,11710,11718,11723],{"__ignoreMap":63},[67,11083,11084,11086],{"class":69,"line":70},[67,11085,3784],{"class":84},[67,11087,3787],{"class":114},[67,11089,11090,11092,11094,11096],{"class":69,"line":191},[67,11091,3792],{"class":84},[67,11093,3795],{"class":84},[67,11095,3798],{"class":110},[67,11097,3148],{"class":73},[67,11099,11100,11102],{"class":69,"line":202},[67,11101,3784],{"class":84},[67,11103,9565],{"class":114},[67,11105,11106,11108],{"class":69,"line":641},[67,11107,3784],{"class":84},[67,11109,11110],{"class":114},"\u003Cctime>\n",[67,11112,11113],{"class":69,"line":655},[67,11114,10344],{"class":2058},[67,11116,11117,11119],{"class":69,"line":660},[67,11118,9575],{"class":84},[67,11120,9578],{"class":110},[67,11122,11123],{"class":69,"line":665},[67,11124,3400],{"class":73},[67,11126,11127],{"class":69,"line":677},[67,11128,11129],{"class":73},"    string sName;\n",[67,11131,11132,11134],{"class":69,"line":683},[67,11133,3818],{"class":84},[67,11135,9613],{"class":73},[67,11137,11138,11140],{"class":69,"line":689},[67,11139,3818],{"class":84},[67,11141,9625],{"class":73},[67,11143,11144],{"class":69,"line":694},[67,11145,5815],{"class":73},[67,11147,11148],{"class":69,"line":700},[67,11149,10381],{"class":2058},[67,11151,11152,11154],{"class":69,"line":706},[67,11153,9575],{"class":84},[67,11155,10388],{"class":110},[67,11157,11158],{"class":69,"line":712},[67,11159,3400],{"class":73},[67,11161,11162],{"class":69,"line":717},[67,11163,11164],{"class":73},"    string tName;\n",[67,11166,11167],{"class":69,"line":723},[67,11168,11169],{"class":2058},"    \u002F\u002F学生数组\n",[67,11171,11172,11174,11176,11179,11181],{"class":69,"line":729},[67,11173,9711],{"class":84},[67,11175,9714],{"class":110},[67,11177,11178],{"class":73}," sArray[",[67,11180,2310],{"class":77},[67,11182,6509],{"class":73},[67,11184,11185],{"class":69,"line":735},[67,11186,5815],{"class":73},[67,11188,11189],{"class":69,"line":741},[67,11190,11191],{"class":2058},"\u002F\u002F给老师和学生赋值的函数\n",[67,11193,11194,11196,11199,11201,11203,11206,11209,11212,11214,11216],{"class":69,"line":747},[67,11195,7181],{"class":84},[67,11197,11198],{"class":110}," allocateSpace",[67,11200,854],{"class":73},[67,11202,9575],{"class":84},[67,11204,11205],{"class":110}," Teacher",[67,11207,11208],{"class":7033}," tArray",[67,11210,11211],{"class":73},"[],",[67,11213,2006],{"class":84},[67,11215,9147],{"class":7033},[67,11217,829],{"class":73},[67,11219,11220],{"class":69,"line":753},[67,11221,3400],{"class":73},[67,11223,11224,11227,11229,11232],{"class":69,"line":758},[67,11225,11226],{"class":73},"    string nameSeed",[67,11228,85],{"class":84},[67,11230,11231],{"class":114},"\"ABCDE\"",[67,11233,3148],{"class":73},[67,11235,11236,11238,11240,11242,11245,11247,11249,11252,11254,11257,11259],{"class":69,"line":764},[67,11237,935],{"class":84},[67,11239,3505],{"class":73},[67,11241,2006],{"class":84},[67,11243,11244],{"class":73}," i ",[67,11246,85],{"class":84},[67,11248,5913],{"class":77},[67,11250,11251],{"class":73},"; i ",[67,11253,259],{"class":84},[67,11255,11256],{"class":73}," len; i",[67,11258,4125],{"class":84},[67,11260,829],{"class":73},[67,11262,11263],{"class":69,"line":770},[67,11264,3863],{"class":73},[67,11266,11267,11270,11272,11275],{"class":69,"line":776},[67,11268,11269],{"class":73},"        tArray[i].tName ",[67,11271,85],{"class":84},[67,11273,11274],{"class":114}," \"Teacher_\"",[67,11276,3148],{"class":73},[67,11278,11279,11281,11284],{"class":69,"line":782},[67,11280,11269],{"class":73},[67,11282,11283],{"class":84},"+=",[67,11285,11286],{"class":73},"nameSeed[i];\n",[67,11288,11289],{"class":69,"line":788},[67,11290,631],{"emptyLinePlaceholder":630},[67,11292,11293],{"class":69,"line":793},[67,11294,11295],{"class":2058},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[67,11297,11298,11300,11302,11304,11307,11309,11311,11314,11316,11318,11321,11323],{"class":69,"line":798},[67,11299,5225],{"class":84},[67,11301,3505],{"class":73},[67,11303,2006],{"class":84},[67,11305,11306],{"class":73}," j ",[67,11308,85],{"class":84},[67,11310,5913],{"class":77},[67,11312,11313],{"class":73},"; j ",[67,11315,259],{"class":84},[67,11317,3981],{"class":77},[67,11319,11320],{"class":73},"; j",[67,11322,4125],{"class":84},[67,11324,829],{"class":73},[67,11326,11327],{"class":69,"line":816},[67,11328,4342],{"class":73},[67,11330,11331,11334,11336,11339],{"class":69,"line":832},[67,11332,11333],{"class":73},"            tArray[i].sArray[j].sName ",[67,11335,85],{"class":84},[67,11337,11338],{"class":114}," \"Student_\"",[67,11340,3148],{"class":73},[67,11342,11343,11345,11347],{"class":69,"line":843},[67,11344,11333],{"class":73},[67,11346,11283],{"class":84},[67,11348,11349],{"class":73}," nameSeed[j];\n",[67,11351,11352,11355,11358,11360,11362,11364,11366,11368,11370,11372,11374],{"class":69,"line":848},[67,11353,11354],{"class":84},"            int",[67,11356,11357],{"class":73}," random",[67,11359,85],{"class":84},[67,11361,4256],{"class":110},[67,11363,4259],{"class":73},[67,11365,2319],{"class":84},[67,11367,2896],{"class":77},[67,11369,2471],{"class":84},[67,11371,2392],{"class":77},[67,11373,2055],{"class":73},[67,11375,11376],{"class":2058},"\u002F\u002F40~99\n",[67,11378,11379,11382,11384,11386],{"class":69,"line":863},[67,11380,11381],{"class":73},"            tArray[i].sArray[j].age ",[67,11383,85],{"class":84},[67,11385,10756],{"class":77},[67,11387,3148],{"class":73},[67,11389,11390,11393,11395],{"class":69,"line":876},[67,11391,11392],{"class":73},"            tArray[i].sArray[j].score ",[67,11394,85],{"class":84},[67,11396,11397],{"class":73}," random;\n",[67,11399,11400],{"class":69,"line":889},[67,11401,4361],{"class":73},[67,11403,11404],{"class":69,"line":894},[67,11405,4020],{"class":73},[67,11407,11408],{"class":69,"line":911},[67,11409,3419],{"class":73},[67,11411,11412],{"class":69,"line":927},[67,11413,11414],{"class":2058},"\u002F\u002F打印所有信息的函数\n",[67,11416,11417,11419,11422,11424,11426,11428,11430,11433,11435,11437],{"class":69,"line":932},[67,11418,7181],{"class":84},[67,11420,11421],{"class":110}," printInfo",[67,11423,854],{"class":73},[67,11425,9575],{"class":84},[67,11427,11205],{"class":110},[67,11429,11208],{"class":7033},[67,11431,11432],{"class":73},"[], ",[67,11434,2006],{"class":84},[67,11436,9147],{"class":7033},[67,11438,829],{"class":73},[67,11440,11441],{"class":69,"line":955},[67,11442,3400],{"class":73},[67,11444,11445,11447,11449,11451,11453,11455,11457,11459,11461,11463,11465],{"class":69,"line":971},[67,11446,935],{"class":84},[67,11448,3505],{"class":73},[67,11450,2006],{"class":84},[67,11452,11244],{"class":73},[67,11454,85],{"class":84},[67,11456,5913],{"class":77},[67,11458,11251],{"class":73},[67,11460,259],{"class":84},[67,11462,11256],{"class":73},[67,11464,4125],{"class":84},[67,11466,829],{"class":73},[67,11468,11469],{"class":69,"line":1010},[67,11470,3863],{"class":73},[67,11472,11473,11476,11478,11481,11483,11486,11488],{"class":69,"line":1016},[67,11474,11475],{"class":73},"        cout ",[67,11477,3031],{"class":84},[67,11479,11480],{"class":114}," \"Teacher: \"",[67,11482,3299],{"class":84},[67,11484,11485],{"class":73}," tArray[i].tName ",[67,11487,3031],{"class":84},[67,11489,10646],{"class":73},[67,11491,11492,11494,11496,11498,11500,11502,11504,11506,11508,11510,11512,11514],{"class":69,"line":1021},[67,11493,5225],{"class":84},[67,11495,3505],{"class":73},[67,11497,2006],{"class":84},[67,11499,11306],{"class":73},[67,11501,85],{"class":84},[67,11503,5913],{"class":77},[67,11505,11313],{"class":73},[67,11507,259],{"class":84},[67,11509,3981],{"class":77},[67,11511,11320],{"class":73},[67,11513,4125],{"class":84},[67,11515,829],{"class":73},[67,11517,11518],{"class":69,"line":1034},[67,11519,4342],{"class":73},[67,11521,11522,11525,11527,11530,11532,11535,11537,11540,11542],{"class":69,"line":1053},[67,11523,11524],{"class":73},"            cout ",[67,11526,3031],{"class":84},[67,11528,11529],{"class":114}," \"",[67,11531,3088],{"class":77},[67,11533,11534],{"class":114},"Student: \"",[67,11536,3299],{"class":84},[67,11538,11539],{"class":73}," tArray[i].sArray[j].sName",[67,11541,3031],{"class":84},[67,11543,3053],{"class":73},[67,11545,11546,11548,11550,11552,11554,11557,11559,11562,11564],{"class":69,"line":1070},[67,11547,11524],{"class":73},[67,11549,3031],{"class":84},[67,11551,11529],{"class":114},[67,11553,3088],{"class":77},[67,11555,11556],{"class":114},"Age: \"",[67,11558,3299],{"class":84},[67,11560,11561],{"class":73}," tArray[i].sArray[j].age ",[67,11563,3031],{"class":84},[67,11565,10646],{"class":73},[67,11567,11568,11570,11572,11574,11576,11579,11581,11584,11586],{"class":69,"line":1083},[67,11569,11524],{"class":73},[67,11571,3031],{"class":84},[67,11573,11529],{"class":114},[67,11575,3088],{"class":77},[67,11577,11578],{"class":114},"Score: \"",[67,11580,3299],{"class":84},[67,11582,11583],{"class":73}," tArray[i].sArray[j].score ",[67,11585,3031],{"class":84},[67,11587,11588],{"class":73}," endl;   \n",[67,11590,11591],{"class":69,"line":1088},[67,11592,4361],{"class":73},[67,11594,11595],{"class":69,"line":1093},[67,11596,4020],{"class":73},[67,11598,11599],{"class":69,"line":1110},[67,11600,3419],{"class":73},[67,11602,11604,11606,11608],{"class":69,"line":11603},53,[67,11605,2006],{"class":84},[67,11607,804],{"class":110},[67,11609,3809],{"class":73},[67,11611,11613],{"class":69,"line":11612},54,[67,11614,3400],{"class":73},[67,11616,11618],{"class":69,"line":11617},55,[67,11619,11620],{"class":2058},"    \u002F\u002F随机数种子\n",[67,11622,11624,11626,11628,11630,11632,11634,11636,11638,11640],{"class":69,"line":11623},56,[67,11625,4206],{"class":110},[67,11627,4209],{"class":73},[67,11629,4212],{"class":84},[67,11631,4215],{"class":84},[67,11633,2420],{"class":73},[67,11635,4220],{"class":110},[67,11637,854],{"class":73},[67,11639,4225],{"class":77},[67,11641,4228],{"class":73},[67,11643,11645],{"class":69,"line":11644},57,[67,11646,11647],{"class":2058},"    \u002F\u002F1.创建3名老师的数组\n",[67,11649,11651,11653,11655,11658,11660],{"class":69,"line":11650},58,[67,11652,9711],{"class":84},[67,11654,11205],{"class":110},[67,11656,11657],{"class":73}," tArray[",[67,11659,2071],{"class":77},[67,11661,6509],{"class":73},[67,11663,11665],{"class":69,"line":11664},59,[67,11666,11667],{"class":2058},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[67,11669,11671,11673,11676,11678,11681,11684,11686,11688,11691,11693],{"class":69,"line":11670},60,[67,11672,3818],{"class":84},[67,11674,11675],{"class":73}," len ",[67,11677,85],{"class":84},[67,11679,11680],{"class":84}," sizeof",[67,11682,11683],{"class":73},"(tArray) ",[67,11685,2573],{"class":84},[67,11687,11680],{"class":84},[67,11689,11690],{"class":73},"(tArray[",[67,11692,78],{"class":77},[67,11694,5676],{"class":73},[67,11696,11698,11701],{"class":69,"line":11697},61,[67,11699,11700],{"class":110},"    allocateSpace",[67,11702,11703],{"class":73},"(tArray, len);\n",[67,11705,11707],{"class":69,"line":11706},62,[67,11708,11709],{"class":2058},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[67,11711,11713,11716],{"class":69,"line":11712},63,[67,11714,11715],{"class":110},"    printInfo",[67,11717,11703],{"class":73},[67,11719,11721],{"class":69,"line":11720},64,[67,11722,631],{"emptyLinePlaceholder":630},[67,11724,11726],{"class":69,"line":11725},65,[67,11727,3419],{"class":73},[26,11729,11730],{"start":191},[29,11731,11732,11735],{},[2144,11733,11734],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11737,11738],{},"五名英雄信息如下：",[58,11740,11744],{"className":11741,"code":11742,"language":11743,"meta":63,"style":63},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[32,11745,11746,11764,11781,11798,11815],{"__ignoreMap":63},[67,11747,11748,11750,11753,11755,11757,11759,11762],{"class":69,"line":70},[67,11749,6736],{"class":73},[67,11751,11752],{"class":114},"\"刘备\"",[67,11754,2369],{"class":73},[67,11756,2764],{"class":77},[67,11758,2369],{"class":73},[67,11760,11761],{"class":114},"\"男\"",[67,11763,6749],{"class":73},[67,11765,11766,11768,11771,11773,11775,11777,11779],{"class":69,"line":191},[67,11767,6736],{"class":73},[67,11769,11770],{"class":114},"\"关羽\"",[67,11772,2369],{"class":73},[67,11774,2739],{"class":77},[67,11776,2369],{"class":73},[67,11778,11761],{"class":114},[67,11780,6749],{"class":73},[67,11782,11783,11785,11788,11790,11792,11794,11796],{"class":69,"line":202},[67,11784,6736],{"class":73},[67,11786,11787],{"class":114},"\"张飞\"",[67,11789,2369],{"class":73},[67,11791,2689],{"class":77},[67,11793,2369],{"class":73},[67,11795,11761],{"class":114},[67,11797,6749],{"class":73},[67,11799,11800,11802,11805,11807,11809,11811,11813],{"class":69,"line":641},[67,11801,6736],{"class":73},[67,11803,11804],{"class":114},"\"赵云\"",[67,11806,2369],{"class":73},[67,11808,2714],{"class":77},[67,11810,2369],{"class":73},[67,11812,11761],{"class":114},[67,11814,6749],{"class":73},[67,11816,11817,11819,11822,11824,11826,11828,11831],{"class":69,"line":655},[67,11818,6736],{"class":73},[67,11820,11821],{"class":114},"\"貂蝉\"",[67,11823,2369],{"class":73},[67,11825,2664],{"class":77},[67,11827,2369],{"class":73},[67,11829,11830],{"class":114},"\"女\"",[67,11832,6749],{"class":73},[19,11834,11835],{},"代码：",[58,11837,11839],{"className":1992,"code":11838,"language":1994,"meta":63,"style":63},"#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",[32,11840,11841,11847,11857,11863,11870,11874,11878,11884,11889,11893,11898,11921,11925,11950,11954,11987,11992,12021,12026,12041,12067,12087,12092,12097,12101,12105,12110,12132,12136,12160,12164,12226,12230,12234,12242,12246,12251,12262,12266,12282,12298,12314,12330,12346,12350,12370,12392,12397,12410,12417,12422,12428,12433,12446,12452],{"__ignoreMap":63},[67,11842,11843,11845],{"class":69,"line":70},[67,11844,3784],{"class":84},[67,11846,3787],{"class":114},[67,11848,11849,11851,11853,11855],{"class":69,"line":191},[67,11850,3792],{"class":84},[67,11852,3795],{"class":84},[67,11854,3798],{"class":110},[67,11856,3148],{"class":73},[67,11858,11859,11861],{"class":69,"line":202},[67,11860,3784],{"class":84},[67,11862,9565],{"class":114},[67,11864,11865,11867],{"class":69,"line":641},[67,11866,9575],{"class":84},[67,11868,11869],{"class":110}," Sanguo\n",[67,11871,11872],{"class":69,"line":655},[67,11873,3400],{"class":73},[67,11875,11876],{"class":69,"line":660},[67,11877,9601],{"class":73},[67,11879,11880,11882],{"class":69,"line":665},[67,11881,3818],{"class":84},[67,11883,9613],{"class":73},[67,11885,11886],{"class":69,"line":677},[67,11887,11888],{"class":73},"    string gender;\n",[67,11890,11891],{"class":69,"line":683},[67,11892,5815],{"class":73},[67,11894,11895],{"class":69,"line":689},[67,11896,11897],{"class":2058},"\u002F\u002F定义排序函数\n",[67,11899,11900,11902,11904,11906,11909,11911,11913,11915,11917,11919],{"class":69,"line":694},[67,11901,7181],{"class":84},[67,11903,9132],{"class":110},[67,11905,854],{"class":73},[67,11907,11908],{"class":110},"Sanguo",[67,11910,986],{"class":84},[67,11912,2684],{"class":7033},[67,11914,2369],{"class":73},[67,11916,2006],{"class":84},[67,11918,9147],{"class":7033},[67,11920,829],{"class":73},[67,11922,11923],{"class":69,"line":700},[67,11924,3400],{"class":73},[67,11926,11927,11929,11931,11933,11935,11937,11939,11941,11943,11946,11948],{"class":69,"line":706},[67,11928,935],{"class":84},[67,11930,854],{"class":73},[67,11932,2006],{"class":84},[67,11934,4856],{"class":73},[67,11936,85],{"class":84},[67,11938,78],{"class":77},[67,11940,4863],{"class":73},[67,11942,259],{"class":84},[67,11944,11945],{"class":73},"len;i",[67,11947,4125],{"class":84},[67,11949,829],{"class":73},[67,11951,11952],{"class":69,"line":712},[67,11953,3863],{"class":73},[67,11955,11956,11959,11961,11963,11965,11967,11969,11971,11973,11975,11977,11979,11981,11983,11985],{"class":69,"line":717},[67,11957,11958],{"class":84},"     for",[67,11960,3505],{"class":73},[67,11962,2006],{"class":84},[67,11964,5232],{"class":73},[67,11966,85],{"class":84},[67,11968,78],{"class":77},[67,11970,5239],{"class":73},[67,11972,259],{"class":84},[67,11974,9174],{"class":73},[67,11976,1863],{"class":84},[67,11978,2209],{"class":77},[67,11980,1863],{"class":84},[67,11982,5372],{"class":73},[67,11984,4125],{"class":84},[67,11986,829],{"class":73},[67,11988,11989],{"class":69,"line":723},[67,11990,11991],{"class":73},"     {\n",[67,11993,11994,11997,12000,12002,12005,12007,12010,12012,12014,12016,12018],{"class":69,"line":729},[67,11995,11996],{"class":84},"         if",[67,11998,11999],{"class":73}," ((s",[67,12001,2471],{"class":84},[67,12003,12004],{"class":73},"j)->age ",[67,12006,2948],{"class":84},[67,12008,12009],{"class":73}," (s",[67,12011,2471],{"class":84},[67,12013,2457],{"class":73},[67,12015,2471],{"class":84},[67,12017,2209],{"class":77},[67,12019,12020],{"class":73},")->age)\n",[67,12022,12023],{"class":69,"line":735},[67,12024,12025],{"class":73},"         {\n",[67,12027,12028,12031,12033,12036,12038],{"class":69,"line":741},[67,12029,12030],{"class":73},"             Sanguo temp",[67,12032,8969],{"class":84},[67,12034,12035],{"class":73},"(s",[67,12037,2471],{"class":84},[67,12039,12040],{"class":73},"j);\n",[67,12042,12043,12046,12048,12050,12053,12055,12057,12059,12061,12063,12065],{"class":69,"line":747},[67,12044,12045],{"class":84},"             *",[67,12047,12035],{"class":73},[67,12049,2471],{"class":84},[67,12051,12052],{"class":73},"j)",[67,12054,8969],{"class":84},[67,12056,12035],{"class":73},[67,12058,2471],{"class":84},[67,12060,2457],{"class":73},[67,12062,2471],{"class":84},[67,12064,2209],{"class":77},[67,12066,4544],{"class":73},[67,12068,12069,12071,12073,12075,12077,12079,12081,12083,12085],{"class":69,"line":753},[67,12070,12045],{"class":84},[67,12072,12035],{"class":73},[67,12074,2471],{"class":84},[67,12076,2457],{"class":73},[67,12078,2471],{"class":84},[67,12080,2209],{"class":77},[67,12082,2420],{"class":73},[67,12084,85],{"class":84},[67,12086,6100],{"class":73},[67,12088,12089],{"class":69,"line":758},[67,12090,12091],{"class":73},"         }\n",[67,12093,12094],{"class":69,"line":764},[67,12095,12096],{"class":73},"     }\n",[67,12098,12099],{"class":69,"line":770},[67,12100,4020],{"class":73},[67,12102,12103],{"class":69,"line":776},[67,12104,3419],{"class":73},[67,12106,12107],{"class":69,"line":782},[67,12108,12109],{"class":2058},"\u002F\u002F定义打印函数\n",[67,12111,12112,12114,12116,12118,12120,12122,12124,12126,12128,12130],{"class":69,"line":788},[67,12113,7181],{"class":84},[67,12115,11421],{"class":110},[67,12117,854],{"class":73},[67,12119,11908],{"class":110},[67,12121,986],{"class":84},[67,12123,2684],{"class":7033},[67,12125,2369],{"class":73},[67,12127,2006],{"class":84},[67,12129,9147],{"class":7033},[67,12131,829],{"class":73},[67,12133,12134],{"class":69,"line":793},[67,12135,3400],{"class":73},[67,12137,12138,12140,12142,12144,12146,12148,12150,12152,12154,12156,12158],{"class":69,"line":798},[67,12139,935],{"class":84},[67,12141,3505],{"class":73},[67,12143,2006],{"class":84},[67,12145,4856],{"class":73},[67,12147,85],{"class":84},[67,12149,78],{"class":77},[67,12151,4863],{"class":73},[67,12153,259],{"class":84},[67,12155,11945],{"class":73},[67,12157,4125],{"class":84},[67,12159,829],{"class":73},[67,12161,12162],{"class":69,"line":816},[67,12163,3863],{"class":73},[67,12165,12166,12168,12170,12172,12174,12177,12179,12181,12183,12186,12188,12190,12192,12195,12197,12199,12201,12204,12206,12208,12210,12213,12215,12217,12219,12222,12224],{"class":69,"line":832},[67,12167,5273],{"class":73},[67,12169,3031],{"class":84},[67,12171,2243],{"class":114},[67,12173,3088],{"class":77},[67,12175,12176],{"class":114},"姓名：\"",[67,12178,3031],{"class":84},[67,12180,12035],{"class":73},[67,12182,2471],{"class":84},[67,12184,12185],{"class":73},"i)->name",[67,12187,3031],{"class":84},[67,12189,2243],{"class":114},[67,12191,3088],{"class":77},[67,12193,12194],{"class":114},"年龄：\"",[67,12196,3031],{"class":84},[67,12198,12035],{"class":73},[67,12200,2471],{"class":84},[67,12202,12203],{"class":73},"i)->age",[67,12205,3031],{"class":84},[67,12207,2243],{"class":114},[67,12209,3088],{"class":77},[67,12211,12212],{"class":114},"性别：\"",[67,12214,3031],{"class":84},[67,12216,12035],{"class":73},[67,12218,2471],{"class":84},[67,12220,12221],{"class":73},"i)->gender",[67,12223,3031],{"class":84},[67,12225,3053],{"class":73},[67,12227,12228],{"class":69,"line":843},[67,12229,4020],{"class":73},[67,12231,12232],{"class":69,"line":848},[67,12233,3419],{"class":73},[67,12235,12236,12238,12240],{"class":69,"line":863},[67,12237,2006],{"class":84},[67,12239,804],{"class":110},[67,12241,3809],{"class":73},[67,12243,12244],{"class":69,"line":876},[67,12245,3400],{"class":73},[67,12247,12248],{"class":69,"line":889},[67,12249,12250],{"class":2058},"    \u002F\u002F定义结构体变量\n",[67,12252,12253,12256,12258,12260],{"class":69,"line":894},[67,12254,12255],{"class":73},"    Sanguo s1[",[67,12257,2310],{"class":77},[67,12259,2928],{"class":73},[67,12261,6727],{"class":84},[67,12263,12264],{"class":69,"line":911},[67,12265,3863],{"class":73},[67,12267,12268,12270,12272,12274,12276,12278,12280],{"class":69,"line":927},[67,12269,6736],{"class":73},[67,12271,11752],{"class":114},[67,12273,2369],{"class":73},[67,12275,2764],{"class":77},[67,12277,2369],{"class":73},[67,12279,11761],{"class":114},[67,12281,6749],{"class":73},[67,12283,12284,12286,12288,12290,12292,12294,12296],{"class":69,"line":932},[67,12285,6736],{"class":73},[67,12287,11770],{"class":114},[67,12289,2369],{"class":73},[67,12291,2739],{"class":77},[67,12293,2369],{"class":73},[67,12295,11761],{"class":114},[67,12297,6749],{"class":73},[67,12299,12300,12302,12304,12306,12308,12310,12312],{"class":69,"line":955},[67,12301,6736],{"class":73},[67,12303,11787],{"class":114},[67,12305,2369],{"class":73},[67,12307,2689],{"class":77},[67,12309,2369],{"class":73},[67,12311,11761],{"class":114},[67,12313,6749],{"class":73},[67,12315,12316,12318,12320,12322,12324,12326,12328],{"class":69,"line":971},[67,12317,6736],{"class":73},[67,12319,11804],{"class":114},[67,12321,2369],{"class":73},[67,12323,2714],{"class":77},[67,12325,2369],{"class":73},[67,12327,11761],{"class":114},[67,12329,6749],{"class":73},[67,12331,12332,12334,12336,12338,12340,12342,12344],{"class":69,"line":1010},[67,12333,6736],{"class":73},[67,12335,11821],{"class":114},[67,12337,2369],{"class":73},[67,12339,2664],{"class":77},[67,12341,2369],{"class":73},[67,12343,11830],{"class":114},[67,12345,6749],{"class":73},[67,12347,12348],{"class":69,"line":1016},[67,12349,6770],{"class":73},[67,12351,12352,12354,12356,12358,12361,12363,12366,12368],{"class":69,"line":1021},[67,12353,3818],{"class":84},[67,12355,9147],{"class":73},[67,12357,6023],{"class":84},[67,12359,12360],{"class":73},"(s1)",[67,12362,6029],{"class":84},[67,12364,12365],{"class":73},"(s1[",[67,12367,78],{"class":77},[67,12369,5676],{"class":73},[67,12371,12372,12375,12377,12380,12382,12385,12388,12390],{"class":69,"line":1034},[67,12373,12374],{"class":73},"    Sanguo ",[67,12376,965],{"class":84},[67,12378,12379],{"class":73},"s ",[67,12381,85],{"class":84},[67,12383,12384],{"class":84}," &",[67,12386,12387],{"class":73},"s1[",[67,12389,78],{"class":77},[67,12391,6509],{"class":73},[67,12393,12394],{"class":69,"line":1053},[67,12395,12396],{"class":2058},"    \u002F\u002F排序前：\n",[67,12398,12399,12401,12403,12406,12408],{"class":69,"line":1070},[67,12400,8345],{"class":73},[67,12402,3031],{"class":84},[67,12404,12405],{"class":114}," \"排序前：\"",[67,12407,3299],{"class":84},[67,12409,10646],{"class":73},[67,12411,12412,12414],{"class":69,"line":1083},[67,12413,11715],{"class":110},[67,12415,12416],{"class":73},"(s,len);\n",[67,12418,12419],{"class":69,"line":1088},[67,12420,12421],{"class":2058},"    \u002F\u002F调用排序函数\n",[67,12423,12424,12426],{"class":69,"line":1093},[67,12425,9414],{"class":110},[67,12427,12416],{"class":73},[67,12429,12430],{"class":69,"line":1110},[67,12431,12432],{"class":2058},"    \u002F\u002F排序后\n",[67,12434,12435,12437,12439,12442,12444],{"class":69,"line":11603},[67,12436,8345],{"class":73},[67,12438,3031],{"class":84},[67,12440,12441],{"class":114}," \"排序后：\"",[67,12443,3299],{"class":84},[67,12445,10646],{"class":73},[67,12447,12448,12450],{"class":69,"line":11612},[67,12449,11715],{"class":110},[67,12451,12416],{"class":73},[67,12453,12454],{"class":69,"line":11617},[67,12455,3419],{"class":73},[19,12457,12458,12459,12461],{},"注意：使用指针时直接用传首地址**&s",[67,12460,78],{},"**",[1903,12463,12464],{},"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":63,"searchDepth":191,"depth":191,"links":12466},[12467,12468,12469,12470,12471,12472,12473],{"id":9519,"depth":191,"text":9520},{"id":9871,"depth":191,"text":9872},{"id":10140,"depth":191,"text":10141},{"id":10305,"depth":191,"text":10306},{"id":10521,"depth":191,"text":10522},{"id":10842,"depth":191,"text":10843},{"id":11070,"depth":191,"text":11071},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9508,"description":9516},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12480,"title":12481,"body":12482,"description":63,"extension":1930,"meta":13825,"navigation":630,"path":13826,"seo":13827,"stem":13828,"__hash__":13829},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12483,"toc":13819},[12484,12487,12491,12497,12511,12516,12519,12523,12530,12536,12539,12546,12552,12557,12560,12563,12566,13130,13133,13147,13151,13156,13172,13312,13315,13321,13324,13329,13337,13445,13448,13453,13456,13461,13464,13470,13473,13816],[10,12485,12481],{"id":12486},"_5程序内存模型",[14,12488,12490],{"id":12489},"_51内存分区模型","5.1内存分区模型",[19,12492,12493,12494],{},"C++程序在执行时，将内存大方向划分为",[2144,12495,12496],{},"4个区域",[2994,12498,12499,12502,12505,12508],{},[29,12500,12501],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[29,12503,12504],{},"全局区：存放全局变量和静态变量以及常量",[29,12506,12507],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[29,12509,12510],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12512,12513],{},[2144,12514,12515],{},"内存四区意义：",[19,12517,12518],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[391,12520,12522],{"id":12521},"_511程序运行前","5.1.1程序运行前",[19,12524,12525,12526,12529],{},"​\t在程序编译后，生成了exe可执行程序，",[2144,12527,12528],{},"未执行该程序前","分为两个区域",[19,12531,12532,12533],{},"​\t",[2144,12534,12535],{},"代码区：",[19,12537,12538],{},"​\t\t存放 CPU 执行的机器指令",[19,12540,12541,12542,12545],{},"​\t\t代码区是",[2144,12543,12544],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12547,12541,12548,12551],{},[2144,12549,12550],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12553,12532,12554],{},[2144,12555,12556],{},"全局区：",[19,12558,12559],{},"​\t\t全局变量和静态变量存放在此.",[19,12561,12562],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12564,12565],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[58,12567,12569],{"className":1992,"code":12568,"language":1994,"meta":63,"style":63},"\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",[32,12570,12571,12576,12589,12602,12606,12611,12626,12641,12645,12654,12658,12663,12676,12689,12693,12698,12724,12750,12754,12781,12807,12811,12816,12832,12847,12851,12877,12903,12907,12932,12957,12961,12987,13013,13017,13033,13048,13074,13100,13104,13114,13118,13126],{"__ignoreMap":63},[67,12572,12573],{"class":69,"line":70},[67,12574,12575],{"class":2058},"\u002F\u002F全局变量\n",[67,12577,12578,12580,12583,12585,12587],{"class":69,"line":191},[67,12579,2006],{"class":84},[67,12581,12582],{"class":73}," g_a ",[67,12584,85],{"class":84},[67,12586,3871],{"class":77},[67,12588,3148],{"class":73},[67,12590,12591,12593,12596,12598,12600],{"class":69,"line":202},[67,12592,2006],{"class":84},[67,12594,12595],{"class":73}," g_b ",[67,12597,85],{"class":84},[67,12599,3871],{"class":77},[67,12601,3148],{"class":73},[67,12603,12604],{"class":69,"line":641},[67,12605,631],{"emptyLinePlaceholder":630},[67,12607,12608],{"class":69,"line":655},[67,12609,12610],{"class":2058},"\u002F\u002F全局常量\n",[67,12612,12613,12615,12617,12620,12622,12624],{"class":69,"line":660},[67,12614,8608],{"class":84},[67,12616,4215],{"class":84},[67,12618,12619],{"class":73}," c_g_a ",[67,12621,85],{"class":84},[67,12623,3871],{"class":77},[67,12625,3148],{"class":73},[67,12627,12628,12630,12632,12635,12637,12639],{"class":69,"line":665},[67,12629,8608],{"class":84},[67,12631,4215],{"class":84},[67,12633,12634],{"class":73}," c_g_b ",[67,12636,85],{"class":84},[67,12638,3871],{"class":77},[67,12640,3148],{"class":73},[67,12642,12643],{"class":69,"line":677},[67,12644,631],{"emptyLinePlaceholder":630},[67,12646,12647,12649,12651],{"class":69,"line":683},[67,12648,2006],{"class":84},[67,12650,804],{"class":110},[67,12652,12653],{"class":73},"() {\n",[67,12655,12656],{"class":69,"line":689},[67,12657,631],{"emptyLinePlaceholder":630},[67,12659,12660],{"class":69,"line":694},[67,12661,12662],{"class":2058},"    \u002F\u002F局部变量\n",[67,12664,12665,12667,12670,12672,12674],{"class":69,"line":700},[67,12666,3818],{"class":84},[67,12668,12669],{"class":73}," a ",[67,12671,85],{"class":84},[67,12673,3871],{"class":77},[67,12675,3148],{"class":73},[67,12677,12678,12680,12683,12685,12687],{"class":69,"line":706},[67,12679,3818],{"class":84},[67,12681,12682],{"class":73}," b ",[67,12684,85],{"class":84},[67,12686,3871],{"class":77},[67,12688,3148],{"class":73},[67,12690,12691],{"class":69,"line":712},[67,12692,631],{"emptyLinePlaceholder":630},[67,12694,12695],{"class":69,"line":717},[67,12696,12697],{"class":2058},"    \u002F\u002F打印地址\n",[67,12699,12700,12702,12704,12707,12709,12711,12713,12715,12717,12720,12722],{"class":69,"line":723},[67,12701,8345],{"class":73},[67,12703,3031],{"class":84},[67,12705,12706],{"class":114}," \"局部变量a地址为： \"",[67,12708,3299],{"class":84},[67,12710,3505],{"class":73},[67,12712,2006],{"class":84},[67,12714,2420],{"class":73},[67,12716,2344],{"class":84},[67,12718,12719],{"class":73},"a ",[67,12721,3031],{"class":84},[67,12723,10646],{"class":73},[67,12725,12726,12728,12730,12733,12735,12737,12739,12741,12743,12746,12748],{"class":69,"line":729},[67,12727,8345],{"class":73},[67,12729,3031],{"class":84},[67,12731,12732],{"class":114}," \"局部变量b地址为： \"",[67,12734,3299],{"class":84},[67,12736,3505],{"class":73},[67,12738,2006],{"class":84},[67,12740,2420],{"class":73},[67,12742,2344],{"class":84},[67,12744,12745],{"class":73},"b ",[67,12747,3031],{"class":84},[67,12749,10646],{"class":73},[67,12751,12752],{"class":69,"line":735},[67,12753,631],{"emptyLinePlaceholder":630},[67,12755,12756,12758,12760,12763,12765,12768,12770,12772,12774,12777,12779],{"class":69,"line":741},[67,12757,8345],{"class":73},[67,12759,3031],{"class":84},[67,12761,12762],{"class":114}," \"全局变量g_a地址为： \"",[67,12764,3299],{"class":84},[67,12766,12767],{"class":73},"  (",[67,12769,2006],{"class":84},[67,12771,2420],{"class":73},[67,12773,2344],{"class":84},[67,12775,12776],{"class":73},"g_a ",[67,12778,3031],{"class":84},[67,12780,10646],{"class":73},[67,12782,12783,12785,12787,12790,12792,12794,12796,12798,12800,12803,12805],{"class":69,"line":747},[67,12784,8345],{"class":73},[67,12786,3031],{"class":84},[67,12788,12789],{"class":114}," \"全局变量g_b地址为： \"",[67,12791,3299],{"class":84},[67,12793,12767],{"class":73},[67,12795,2006],{"class":84},[67,12797,2420],{"class":73},[67,12799,2344],{"class":84},[67,12801,12802],{"class":73},"g_b ",[67,12804,3031],{"class":84},[67,12806,10646],{"class":73},[67,12808,12809],{"class":69,"line":753},[67,12810,631],{"emptyLinePlaceholder":630},[67,12812,12813],{"class":69,"line":758},[67,12814,12815],{"class":2058},"    \u002F\u002F静态变量\n",[67,12817,12818,12821,12823,12826,12828,12830],{"class":69,"line":764},[67,12819,12820],{"class":84},"    static",[67,12822,4215],{"class":84},[67,12824,12825],{"class":73}," s_a ",[67,12827,85],{"class":84},[67,12829,3871],{"class":77},[67,12831,3148],{"class":73},[67,12833,12834,12836,12838,12841,12843,12845],{"class":69,"line":770},[67,12835,12820],{"class":84},[67,12837,4215],{"class":84},[67,12839,12840],{"class":73}," s_b ",[67,12842,85],{"class":84},[67,12844,3871],{"class":77},[67,12846,3148],{"class":73},[67,12848,12849],{"class":69,"line":776},[67,12850,631],{"emptyLinePlaceholder":630},[67,12852,12853,12855,12857,12860,12862,12864,12866,12868,12870,12873,12875],{"class":69,"line":782},[67,12854,8345],{"class":73},[67,12856,3031],{"class":84},[67,12858,12859],{"class":114}," \"静态变量s_a地址为： \"",[67,12861,3299],{"class":84},[67,12863,3505],{"class":73},[67,12865,2006],{"class":84},[67,12867,2420],{"class":73},[67,12869,2344],{"class":84},[67,12871,12872],{"class":73},"s_a ",[67,12874,3031],{"class":84},[67,12876,10646],{"class":73},[67,12878,12879,12881,12883,12886,12888,12890,12892,12894,12896,12899,12901],{"class":69,"line":788},[67,12880,8345],{"class":73},[67,12882,3031],{"class":84},[67,12884,12885],{"class":114}," \"静态变量s_b地址为： \"",[67,12887,3299],{"class":84},[67,12889,3505],{"class":73},[67,12891,2006],{"class":84},[67,12893,2420],{"class":73},[67,12895,2344],{"class":84},[67,12897,12898],{"class":73},"s_b ",[67,12900,3031],{"class":84},[67,12902,10646],{"class":73},[67,12904,12905],{"class":69,"line":793},[67,12906,631],{"emptyLinePlaceholder":630},[67,12908,12909,12911,12913,12916,12918,12920,12922,12924,12926,12928,12930],{"class":69,"line":798},[67,12910,8345],{"class":73},[67,12912,3031],{"class":84},[67,12914,12915],{"class":114}," \"字符串常量地址为： \"",[67,12917,3299],{"class":84},[67,12919,3505],{"class":73},[67,12921,2006],{"class":84},[67,12923,2420],{"class":73},[67,12925,2344],{"class":84},[67,12927,3048],{"class":114},[67,12929,3299],{"class":84},[67,12931,10646],{"class":73},[67,12933,12934,12936,12938,12940,12942,12944,12946,12948,12950,12953,12955],{"class":69,"line":816},[67,12935,8345],{"class":73},[67,12937,3031],{"class":84},[67,12939,12915],{"class":114},[67,12941,3299],{"class":84},[67,12943,3505],{"class":73},[67,12945,2006],{"class":84},[67,12947,2420],{"class":73},[67,12949,2344],{"class":84},[67,12951,12952],{"class":114},"\"hello world1\"",[67,12954,3299],{"class":84},[67,12956,10646],{"class":73},[67,12958,12959],{"class":69,"line":832},[67,12960,631],{"emptyLinePlaceholder":630},[67,12962,12963,12965,12967,12970,12972,12974,12976,12978,12980,12983,12985],{"class":69,"line":843},[67,12964,8345],{"class":73},[67,12966,3031],{"class":84},[67,12968,12969],{"class":114}," \"全局常量c_g_a地址为： \"",[67,12971,3299],{"class":84},[67,12973,3505],{"class":73},[67,12975,2006],{"class":84},[67,12977,2420],{"class":73},[67,12979,2344],{"class":84},[67,12981,12982],{"class":73},"c_g_a ",[67,12984,3031],{"class":84},[67,12986,10646],{"class":73},[67,12988,12989,12991,12993,12996,12998,13000,13002,13004,13006,13009,13011],{"class":69,"line":848},[67,12990,8345],{"class":73},[67,12992,3031],{"class":84},[67,12994,12995],{"class":114}," \"全局常量c_g_b地址为： \"",[67,12997,3299],{"class":84},[67,12999,3505],{"class":73},[67,13001,2006],{"class":84},[67,13003,2420],{"class":73},[67,13005,2344],{"class":84},[67,13007,13008],{"class":73},"c_g_b ",[67,13010,3031],{"class":84},[67,13012,10646],{"class":73},[67,13014,13015],{"class":69,"line":863},[67,13016,631],{"emptyLinePlaceholder":630},[67,13018,13019,13022,13024,13027,13029,13031],{"class":69,"line":876},[67,13020,13021],{"class":84},"    const",[67,13023,4215],{"class":84},[67,13025,13026],{"class":73}," c_l_a ",[67,13028,85],{"class":84},[67,13030,3871],{"class":77},[67,13032,3148],{"class":73},[67,13034,13035,13037,13039,13042,13044,13046],{"class":69,"line":889},[67,13036,13021],{"class":84},[67,13038,4215],{"class":84},[67,13040,13041],{"class":73}," c_l_b ",[67,13043,85],{"class":84},[67,13045,3871],{"class":77},[67,13047,3148],{"class":73},[67,13049,13050,13052,13054,13057,13059,13061,13063,13065,13067,13070,13072],{"class":69,"line":894},[67,13051,8345],{"class":73},[67,13053,3031],{"class":84},[67,13055,13056],{"class":114}," \"局部常量c_l_a地址为： \"",[67,13058,3299],{"class":84},[67,13060,3505],{"class":73},[67,13062,2006],{"class":84},[67,13064,2420],{"class":73},[67,13066,2344],{"class":84},[67,13068,13069],{"class":73},"c_l_a ",[67,13071,3031],{"class":84},[67,13073,10646],{"class":73},[67,13075,13076,13078,13080,13083,13085,13087,13089,13091,13093,13096,13098],{"class":69,"line":911},[67,13077,8345],{"class":73},[67,13079,3031],{"class":84},[67,13081,13082],{"class":114}," \"局部常量c_l_b地址为： \"",[67,13084,3299],{"class":84},[67,13086,3505],{"class":73},[67,13088,2006],{"class":84},[67,13090,2420],{"class":73},[67,13092,2344],{"class":84},[67,13094,13095],{"class":73},"c_l_b ",[67,13097,3031],{"class":84},[67,13099,10646],{"class":73},[67,13101,13102],{"class":69,"line":927},[67,13103,631],{"emptyLinePlaceholder":630},[67,13105,13106,13108,13110,13112],{"class":69,"line":932},[67,13107,4136],{"class":110},[67,13109,854],{"class":73},[67,13111,4141],{"class":114},[67,13113,4544],{"class":73},[67,13115,13116],{"class":69,"line":955},[67,13117,631],{"emptyLinePlaceholder":630},[67,13119,13120,13122,13124],{"class":69,"line":971},[67,13121,5910],{"class":84},[67,13123,5913],{"class":77},[67,13125,3148],{"class":73},[67,13127,13128],{"class":69,"line":1010},[67,13129,3419],{"class":73},[19,13131,13132],{},"总结：",[2994,13134,13135,13138,13141,13144],{},[29,13136,13137],{},"c++中程序运行前分为全局区和代码区",[29,13139,13140],{},"代码区特点是共享和只读",[29,13142,13143],{},"全局区中存放全局变量、静态变量、常量",[29,13145,13146],{},"常量区中存放const修饰的全局常量和字符串常量",[391,13148,13150],{"id":13149},"_512程序运行后","5.1.2程序运行后",[26,13152,13153],{},[29,13154,13155],{},"栈区：",[2994,13157,13158,13165],{},[29,13159,13160,13161,13164],{},"由编译器自动分配释放, 存放",[2144,13162,13163],{},"函数的参数值,局部变量","等",[29,13166,13167,13168,13171],{},"注意事项：",[2144,13169,13170],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[58,13173,13175],{"className":1992,"code":13174,"language":1994,"meta":63,"style":63},"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",[32,13176,13177,13188,13192,13207,13219,13223,13227,13235,13240,13255,13273,13290,13300,13308],{"__ignoreMap":63},[67,13178,13179,13181,13183,13186],{"class":69,"line":70},[67,13180,2006],{"class":84},[67,13182,986],{"class":84},[67,13184,13185],{"class":110}," func",[67,13187,3809],{"class":73},[67,13189,13190],{"class":69,"line":191},[67,13191,3400],{"class":73},[67,13193,13194,13196,13198,13200,13202,13204],{"class":69,"line":202},[67,13195,3818],{"class":84},[67,13197,12669],{"class":73},[67,13199,85],{"class":84},[67,13201,3871],{"class":77},[67,13203,2055],{"class":73},[67,13205,13206],{"class":2058}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[67,13208,13209,13211,13213,13216],{"class":69,"line":641},[67,13210,5910],{"class":84},[67,13212,12384],{"class":84},[67,13214,13215],{"class":73},"a;",[67,13217,13218],{"class":2058}," \u002F\u002F放回局部变量的地址\n",[67,13220,13221],{"class":69,"line":655},[67,13222,3419],{"class":73},[67,13224,13225],{"class":69,"line":660},[67,13226,631],{"emptyLinePlaceholder":630},[67,13228,13229,13231,13233],{"class":69,"line":665},[67,13230,2006],{"class":84},[67,13232,804],{"class":110},[67,13234,12653],{"class":73},[67,13236,13237],{"class":69,"line":677},[67,13238,13239],{"class":2058},"    \u002F\u002F接受func的返回值\n",[67,13241,13242,13244,13246,13249,13251,13253],{"class":69,"line":683},[67,13243,3818],{"class":84},[67,13245,986],{"class":84},[67,13247,13248],{"class":73},"p ",[67,13250,85],{"class":84},[67,13252,13185],{"class":110},[67,13254,7453],{"class":73},[67,13256,13257,13259,13261,13263,13265,13267,13270],{"class":69,"line":689},[67,13258,8345],{"class":73},[67,13260,3031],{"class":84},[67,13262,986],{"class":84},[67,13264,13248],{"class":73},[67,13266,3031],{"class":84},[67,13268,13269],{"class":73}," endl;",[67,13271,13272],{"class":2058}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[67,13274,13275,13277,13279,13281,13283,13285,13287],{"class":69,"line":694},[67,13276,8345],{"class":73},[67,13278,3031],{"class":84},[67,13280,986],{"class":84},[67,13282,13248],{"class":73},[67,13284,3031],{"class":84},[67,13286,13269],{"class":73},[67,13288,13289],{"class":2058}," \u002F\u002F第二次这个数据不再保留\n",[67,13291,13292,13294,13296,13298],{"class":69,"line":700},[67,13293,4136],{"class":110},[67,13295,854],{"class":73},[67,13297,4141],{"class":114},[67,13299,4544],{"class":73},[67,13301,13302,13304,13306],{"class":69,"line":706},[67,13303,5910],{"class":84},[67,13305,5913],{"class":77},[67,13307,3148],{"class":73},[67,13309,13310],{"class":69,"line":712},[67,13311,3419],{"class":73},[19,13313,13314],{},"输出结果：",[19,13316,13317],{},[3317,13318],{"alt":13319,"src":13320},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13322,13323],{},"总结：不要返回局部变量的地址",[26,13325,13326],{"start":191},[29,13327,13328],{},"堆区",[2994,13330,13331,13334],{},[29,13332,13333],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[29,13335,13336],{},"在c++中主要利用new在堆区开辟内存",[58,13338,13340],{"className":1992,"code":13339,"language":1994,"meta":63,"style":63},"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",[32,13341,13342,13357,13361,13366,13387,13394,13398,13406,13410,13415,13429,13441],{"__ignoreMap":63},[67,13343,13344,13346,13349,13352,13354],{"class":69,"line":70},[67,13345,2006],{"class":84},[67,13347,13348],{"class":84},"  *",[67,13350,13351],{"class":110},"func",[67,13353,4259],{"class":73},[67,13355,13356],{"class":2058},"  \u002F\u002F函数返回指针\n",[67,13358,13359],{"class":69,"line":191},[67,13360,3400],{"class":73},[67,13362,13363],{"class":69,"line":202},[67,13364,13365],{"class":2058},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[67,13367,13368,13370,13372,13374,13376,13379,13381,13383,13385],{"class":69,"line":641},[67,13369,5967],{"class":84},[67,13371,986],{"class":84},[67,13373,19],{"class":73},[67,13375,85],{"class":84},[67,13377,13378],{"class":84}," new",[67,13380,4215],{"class":84},[67,13382,854],{"class":73},[67,13384,2437],{"class":77},[67,13386,4544],{"class":73},[67,13388,13389,13391],{"class":69,"line":655},[67,13390,6201],{"class":84},[67,13392,13393],{"class":73}," p;\n",[67,13395,13396],{"class":69,"line":660},[67,13397,3419],{"class":73},[67,13399,13400,13402,13404],{"class":69,"line":665},[67,13401,2006],{"class":84},[67,13403,804],{"class":110},[67,13405,3809],{"class":73},[67,13407,13408],{"class":69,"line":677},[67,13409,3400],{"class":73},[67,13411,13412],{"class":69,"line":683},[67,13413,13414],{"class":2058},"    \u002F\u002F在堆区开辟数据\n",[67,13416,13417,13419,13421,13423,13425,13427],{"class":69,"line":689},[67,13418,3818],{"class":84},[67,13420,986],{"class":84},[67,13422,19],{"class":73},[67,13424,85],{"class":84},[67,13426,13351],{"class":110},[67,13428,7453],{"class":73},[67,13430,13431,13433,13435,13437,13439],{"class":69,"line":694},[67,13432,3405],{"class":73},[67,13434,8236],{"class":84},[67,13436,19],{"class":73},[67,13438,3031],{"class":84},[67,13440,3053],{"class":73},[67,13442,13443],{"class":69,"line":700},[67,13444,3419],{"class":73},[19,13446,13447],{},"图片展示：",[19,13449,13450],{},[3317,13451],{"alt":13319,"src":13452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13454,13455],{},"堆区内存由程序员管生死！！！",[26,13457,13458],{"start":202},[29,13459,13460],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13462,13463],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13465,13466,13467],{},"​语法：",[32,13468,13469],{}," new 数据类型",[19,13471,13472],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[58,13474,13476],{"className":1992,"code":13475,"language":1994,"meta":63,"style":63},"\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",[32,13477,13478,13483,13493,13497,13502,13507,13529,13533,13541,13545,13559,13571,13583,13595,13600,13605,13616,13620,13625,13633,13637,13642,13664,13690,13694,13712,13716,13742,13746,13758,13762,13767,13772,13780,13784,13788,13796,13800,13806,13812],{"__ignoreMap":63},[67,13479,13480],{"class":69,"line":70},[67,13481,13482],{"class":2058},"\u002F\u002F1.new的基本语法\n",[67,13484,13485,13487,13489,13491],{"class":69,"line":191},[67,13486,2006],{"class":84},[67,13488,986],{"class":84},[67,13490,13351],{"class":110},[67,13492,3809],{"class":73},[67,13494,13495],{"class":69,"line":202},[67,13496,3400],{"class":73},[67,13498,13499],{"class":69,"line":641},[67,13500,13501],{"class":2058},"    \u002F\u002F在堆区创建整型数据\n",[67,13503,13504],{"class":69,"line":655},[67,13505,13506],{"class":2058},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[67,13508,13509,13511,13513,13515,13518,13520,13522,13524,13526],{"class":69,"line":660},[67,13510,3818],{"class":84},[67,13512,986],{"class":84},[67,13514,19],{"class":73},[67,13516,13517],{"class":84},"=new",[67,13519,4215],{"class":84},[67,13521,854],{"class":73},[67,13523,2437],{"class":77},[67,13525,7783],{"class":73},[67,13527,13528],{"class":2058},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[67,13530,13531],{"class":69,"line":665},[67,13532,3419],{"class":73},[67,13534,13535,13537,13539],{"class":69,"line":677},[67,13536,7181],{"class":84},[67,13538,7405],{"class":110},[67,13540,3809],{"class":73},[67,13542,13543],{"class":69,"line":683},[67,13544,3400],{"class":73},[67,13546,13547,13549,13551,13553,13555,13557],{"class":69,"line":689},[67,13548,3818],{"class":84},[67,13550,986],{"class":84},[67,13552,19],{"class":73},[67,13554,85],{"class":84},[67,13556,13351],{"class":110},[67,13558,7453],{"class":73},[67,13560,13561,13563,13565,13567,13569],{"class":69,"line":694},[67,13562,3405],{"class":73},[67,13564,8236],{"class":84},[67,13566,19],{"class":73},[67,13568,3031],{"class":84},[67,13570,3053],{"class":73},[67,13572,13573,13575,13577,13579,13581],{"class":69,"line":700},[67,13574,3405],{"class":73},[67,13576,8236],{"class":84},[67,13578,19],{"class":73},[67,13580,3031],{"class":84},[67,13582,3053],{"class":73},[67,13584,13585,13587,13589,13591,13593],{"class":69,"line":706},[67,13586,3405],{"class":73},[67,13588,8236],{"class":84},[67,13590,19],{"class":73},[67,13592,3031],{"class":84},[67,13594,3053],{"class":73},[67,13596,13597],{"class":69,"line":712},[67,13598,13599],{"class":2058},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[67,13601,13602],{"class":69,"line":717},[67,13603,13604],{"class":2058},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[67,13606,13607,13610,13613],{"class":69,"line":723},[67,13608,13609],{"class":84},"    delete",[67,13611,13612],{"class":73}," p;",[67,13614,13615],{"class":2058},"\u002F\u002F删除这块地址\n",[67,13617,13618],{"class":69,"line":729},[67,13619,3419],{"class":73},[67,13621,13622],{"class":69,"line":735},[67,13623,13624],{"class":2058},"\u002F\u002F2.在堆区利用new开辟数组\n",[67,13626,13627,13629,13631],{"class":69,"line":741},[67,13628,7181],{"class":84},[67,13630,7474],{"class":110},[67,13632,3809],{"class":73},[67,13634,13635],{"class":69,"line":747},[67,13636,3400],{"class":73},[67,13638,13639],{"class":69,"line":753},[67,13640,13641],{"class":2058},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[67,13643,13644,13646,13648,13650,13652,13654,13656,13658,13661],{"class":69,"line":758},[67,13645,3818],{"class":84},[67,13647,986],{"class":84},[67,13649,5700],{"class":73},[67,13651,13517],{"class":84},[67,13653,4215],{"class":84},[67,13655,2879],{"class":73},[67,13657,2437],{"class":77},[67,13659,13660],{"class":73},"];",[67,13662,13663],{"class":2058},"\u002F\u002F10代表数组有10个元素\n",[67,13665,13666,13668,13670,13672,13674,13676,13678,13680,13682,13684,13686,13688],{"class":69,"line":764},[67,13667,935],{"class":84},[67,13669,3505],{"class":73},[67,13671,2006],{"class":84},[67,13673,4856],{"class":73},[67,13675,85],{"class":84},[67,13677,78],{"class":77},[67,13679,4863],{"class":73},[67,13681,259],{"class":84},[67,13683,2437],{"class":77},[67,13685,4863],{"class":73},[67,13687,4125],{"class":84},[67,13689,829],{"class":73},[67,13691,13692],{"class":69,"line":770},[67,13693,3863],{"class":73},[67,13695,13696,13699,13701,13703,13705,13707,13709],{"class":69,"line":776},[67,13697,13698],{"class":73},"        arr[i]",[67,13700,85],{"class":84},[67,13702,2432],{"class":73},[67,13704,2471],{"class":84},[67,13706,2302],{"class":77},[67,13708,2055],{"class":73},[67,13710,13711],{"class":2058},"\u002F\u002F给10个元素赋值100～109\n",[67,13713,13714],{"class":69,"line":782},[67,13715,4020],{"class":73},[67,13717,13718,13720,13722,13724,13726,13728,13730,13732,13734,13736,13738,13740],{"class":69,"line":788},[67,13719,935],{"class":84},[67,13721,3505],{"class":73},[67,13723,2006],{"class":84},[67,13725,4856],{"class":73},[67,13727,85],{"class":84},[67,13729,78],{"class":77},[67,13731,4863],{"class":73},[67,13733,259],{"class":84},[67,13735,2437],{"class":77},[67,13737,4863],{"class":73},[67,13739,4125],{"class":84},[67,13741,829],{"class":73},[67,13743,13744],{"class":69,"line":793},[67,13745,3863],{"class":73},[67,13747,13748,13750,13752,13754,13756],{"class":69,"line":798},[67,13749,5273],{"class":73},[67,13751,3031],{"class":84},[67,13753,6174],{"class":73},[67,13755,3031],{"class":84},[67,13757,3053],{"class":73},[67,13759,13760],{"class":69,"line":816},[67,13761,4020],{"class":73},[67,13763,13764],{"class":69,"line":832},[67,13765,13766],{"class":2058},"    \u002F\u002F释放堆区数组\n",[67,13768,13769],{"class":69,"line":843},[67,13770,13771],{"class":2058},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[67,13773,13774,13777],{"class":69,"line":848},[67,13775,13776],{"class":84},"    delete[]",[67,13778,13779],{"class":73}," arr;\n",[67,13781,13782],{"class":69,"line":863},[67,13783,3419],{"class":73},[67,13785,13786],{"class":69,"line":876},[67,13787,631],{"emptyLinePlaceholder":630},[67,13789,13790,13792,13794],{"class":69,"line":889},[67,13791,2006],{"class":84},[67,13793,804],{"class":110},[67,13795,3809],{"class":73},[67,13797,13798],{"class":69,"line":894},[67,13799,3400],{"class":73},[67,13801,13802,13804],{"class":69,"line":911},[67,13803,7450],{"class":110},[67,13805,7453],{"class":73},[67,13807,13808,13810],{"class":69,"line":927},[67,13809,7519],{"class":110},[67,13811,7453],{"class":73},[67,13813,13814],{"class":69,"line":932},[67,13815,3419],{"class":73},[1903,13817,13818],{},"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":63,"searchDepth":191,"depth":191,"links":13820},[13821],{"id":12489,"depth":191,"text":12490,"children":13822},[13823,13824],{"id":12521,"depth":202,"text":12522},{"id":13149,"depth":202,"text":13150},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12481,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13831,"title":13832,"body":13833,"description":63,"extension":1930,"meta":15313,"navigation":630,"path":15314,"seo":15315,"stem":15316,"__hash__":15317},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13834,"toc":15305},[13835,13838,13842,13845,13848,14017,14021,14026,14043,14048,14200,14204,14207,14210,14603,14607,14610,14615,14618,14930,14934,14940,15100,15102,15110,15114,15117,15124,15302],[10,13836,13832],{"id":13837},"_6引用",[14,13839,13841],{"id":13840},"_61引用基本用法","6.1引用基本用法",[19,13843,13844],{},"引用的本质：给变量起别名",[19,13846,13847],{},"语法：数据类型 &别名=原名",[58,13849,13851],{"className":1992,"code":13850,"language":1994,"meta":63,"style":63},"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",[32,13852,13853,13861,13865,13877,13889,13893,13912,13931,13935,13946,13950,13969,13987,13991,14001,14005,14013],{"__ignoreMap":63},[67,13854,13855,13857,13859],{"class":69,"line":70},[67,13856,2006],{"class":84},[67,13858,804],{"class":110},[67,13860,12653],{"class":73},[67,13862,13863],{"class":69,"line":191},[67,13864,631],{"emptyLinePlaceholder":630},[67,13866,13867,13869,13871,13873,13875],{"class":69,"line":202},[67,13868,3818],{"class":84},[67,13870,12669],{"class":73},[67,13872,85],{"class":84},[67,13874,3871],{"class":77},[67,13876,3148],{"class":73},[67,13878,13879,13881,13883,13885,13887],{"class":69,"line":641},[67,13880,3818],{"class":84},[67,13882,12384],{"class":84},[67,13884,12745],{"class":73},[67,13886,85],{"class":84},[67,13888,3287],{"class":73},[67,13890,13891],{"class":69,"line":655},[67,13892,631],{"emptyLinePlaceholder":630},[67,13894,13895,13897,13899,13902,13904,13906,13908,13910],{"class":69,"line":660},[67,13896,8345],{"class":73},[67,13898,3031],{"class":84},[67,13900,13901],{"class":114}," \"a = \"",[67,13903,3299],{"class":84},[67,13905,12669],{"class":73},[67,13907,3031],{"class":84},[67,13909,13269],{"class":73},[67,13911,9084],{"class":2058},[67,13913,13914,13916,13918,13921,13923,13925,13927,13929],{"class":69,"line":665},[67,13915,8345],{"class":73},[67,13917,3031],{"class":84},[67,13919,13920],{"class":114}," \"b = \"",[67,13922,3299],{"class":84},[67,13924,12682],{"class":73},[67,13926,3031],{"class":84},[67,13928,13269],{"class":73},[67,13930,9084],{"class":2058},[67,13932,13933],{"class":69,"line":677},[67,13934,631],{"emptyLinePlaceholder":630},[67,13936,13937,13940,13942,13944],{"class":69,"line":683},[67,13938,13939],{"class":73},"    b ",[67,13941,85],{"class":84},[67,13943,7571],{"class":77},[67,13945,3148],{"class":73},[67,13947,13948],{"class":69,"line":689},[67,13949,631],{"emptyLinePlaceholder":630},[67,13951,13952,13954,13956,13958,13960,13962,13964,13966],{"class":69,"line":694},[67,13953,8345],{"class":73},[67,13955,3031],{"class":84},[67,13957,13901],{"class":114},[67,13959,3299],{"class":84},[67,13961,12669],{"class":73},[67,13963,3031],{"class":84},[67,13965,13269],{"class":73},[67,13967,13968],{"class":2058},"\u002F\u002F100\n",[67,13970,13971,13973,13975,13977,13979,13981,13983,13985],{"class":69,"line":700},[67,13972,8345],{"class":73},[67,13974,3031],{"class":84},[67,13976,13920],{"class":114},[67,13978,3299],{"class":84},[67,13980,12682],{"class":73},[67,13982,3031],{"class":84},[67,13984,13269],{"class":73},[67,13986,13968],{"class":2058},[67,13988,13989],{"class":69,"line":706},[67,13990,631],{"emptyLinePlaceholder":630},[67,13992,13993,13995,13997,13999],{"class":69,"line":712},[67,13994,4136],{"class":110},[67,13996,854],{"class":73},[67,13998,4141],{"class":114},[67,14000,4544],{"class":73},[67,14002,14003],{"class":69,"line":717},[67,14004,631],{"emptyLinePlaceholder":630},[67,14006,14007,14009,14011],{"class":69,"line":723},[67,14008,5910],{"class":84},[67,14010,5913],{"class":77},[67,14012,3148],{"class":73},[67,14014,14015],{"class":69,"line":729},[67,14016,3419],{"class":73},[14,14018,14020],{"id":14019},"_62引用的注意事项","6.2引用的注意事项",[26,14022,14023],{},[29,14024,14025],{},"引用必须要初始化",[58,14027,14029],{"className":1992,"code":14028,"language":1994,"meta":63,"style":63},"int &b;\u002F\u002F非常错误！\n",[32,14030,14031],{"__ignoreMap":63},[67,14032,14033,14035,14037,14040],{"class":69,"line":70},[67,14034,2006],{"class":84},[67,14036,12384],{"class":84},[67,14038,14039],{"class":73},"b;",[67,14041,14042],{"class":2058},"\u002F\u002F非常错误！\n",[26,14044,14045],{"start":191},[29,14046,14047],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[58,14049,14051],{"className":1992,"code":14050,"language":1994,"meta":63,"style":63},"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",[32,14052,14053,14061,14073,14085,14093,14109,14122,14140,14158,14178,14188,14196],{"__ignoreMap":63},[67,14054,14055,14057,14059],{"class":69,"line":70},[67,14056,2006],{"class":84},[67,14058,804],{"class":110},[67,14060,12653],{"class":73},[67,14062,14063,14065,14067,14069,14071],{"class":69,"line":191},[67,14064,3818],{"class":84},[67,14066,12669],{"class":73},[67,14068,85],{"class":84},[67,14070,3871],{"class":77},[67,14072,3148],{"class":73},[67,14074,14075,14077,14079,14081,14083],{"class":69,"line":202},[67,14076,3818],{"class":84},[67,14078,12682],{"class":73},[67,14080,85],{"class":84},[67,14082,10756],{"class":77},[67,14084,3148],{"class":73},[67,14086,14087,14090],{"class":69,"line":641},[67,14088,14089],{"class":2058},"    \u002F\u002Fint &c;",[67,14091,14092],{"class":2058}," \u002F\u002F错误，引用必须初始化\n",[67,14094,14095,14097,14099,14101,14103,14106],{"class":69,"line":655},[67,14096,3818],{"class":84},[67,14098,12384],{"class":84},[67,14100,4771],{"class":73},[67,14102,85],{"class":84},[67,14104,14105],{"class":73}," a;",[67,14107,14108],{"class":2058}," \u002F\u002F一旦初始化后，就不可以更改\n",[67,14110,14111,14114,14116,14119],{"class":69,"line":660},[67,14112,14113],{"class":73},"    c ",[67,14115,85],{"class":84},[67,14117,14118],{"class":73}," b;",[67,14120,14121],{"class":2058}," \u002F\u002F这是赋值操作，不是更改引用\n",[67,14123,14124,14126,14128,14130,14132,14134,14136,14138],{"class":69,"line":665},[67,14125,8345],{"class":73},[67,14127,3031],{"class":84},[67,14129,13901],{"class":114},[67,14131,3299],{"class":84},[67,14133,12669],{"class":73},[67,14135,3031],{"class":84},[67,14137,13269],{"class":73},[67,14139,9069],{"class":2058},[67,14141,14142,14144,14146,14148,14150,14152,14154,14156],{"class":69,"line":677},[67,14143,8345],{"class":73},[67,14145,3031],{"class":84},[67,14147,13920],{"class":114},[67,14149,3299],{"class":84},[67,14151,12682],{"class":73},[67,14153,3031],{"class":84},[67,14155,13269],{"class":73},[67,14157,9069],{"class":2058},[67,14159,14160,14162,14164,14167,14169,14172,14174,14176],{"class":69,"line":683},[67,14161,8345],{"class":73},[67,14163,3031],{"class":84},[67,14165,14166],{"class":114}," \"c = \"",[67,14168,3299],{"class":84},[67,14170,14171],{"class":73}," c ",[67,14173,3031],{"class":84},[67,14175,13269],{"class":73},[67,14177,9069],{"class":2058},[67,14179,14180,14182,14184,14186],{"class":69,"line":689},[67,14181,4136],{"class":110},[67,14183,854],{"class":73},[67,14185,4141],{"class":114},[67,14187,4544],{"class":73},[67,14189,14190,14192,14194],{"class":69,"line":694},[67,14191,5910],{"class":84},[67,14193,5913],{"class":77},[67,14195,3148],{"class":73},[67,14197,14198],{"class":69,"line":700},[67,14199,3419],{"class":73},[14,14201,14203],{"id":14202},"_63引用做函数参数","6.3引用做函数参数",[19,14205,14206],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14208,14209],{},"优点：可以简化指针修改实参",[58,14211,14213],{"className":1992,"code":14212,"language":1994,"meta":63,"style":63},"\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",[32,14214,14215,14220,14242,14253,14263,14272,14276,14280,14285,14307,14319,14331,14341,14345,14349,14354,14376,14386,14394,14402,14406,14410,14418,14422,14434,14446,14450,14461,14487,14491,14511,14535,14539,14549,14573,14577,14587,14591,14599],{"__ignoreMap":63},[67,14216,14217],{"class":69,"line":70},[67,14218,14219],{"class":2058},"\u002F\u002F1. 值传递\n",[67,14221,14222,14224,14227,14229,14231,14233,14235,14237,14239],{"class":69,"line":191},[67,14223,7181],{"class":84},[67,14225,14226],{"class":110}," mySwap01",[67,14228,854],{"class":73},[67,14230,2006],{"class":84},[67,14232,3253],{"class":7033},[67,14234,1868],{"class":73},[67,14236,2006],{"class":84},[67,14238,4658],{"class":7033},[67,14240,14241],{"class":73},") {\n",[67,14243,14244,14246,14249,14251],{"class":69,"line":202},[67,14245,3818],{"class":84},[67,14247,14248],{"class":73}," temp ",[67,14250,85],{"class":84},[67,14252,3287],{"class":73},[67,14254,14255,14258,14260],{"class":69,"line":641},[67,14256,14257],{"class":73},"    a ",[67,14259,85],{"class":84},[67,14261,14262],{"class":73}," b;\n",[67,14264,14265,14267,14269],{"class":69,"line":655},[67,14266,13939],{"class":73},[67,14268,85],{"class":84},[67,14270,14271],{"class":73}," temp;\n",[67,14273,14274],{"class":69,"line":660},[67,14275,3419],{"class":73},[67,14277,14278],{"class":69,"line":665},[67,14279,631],{"emptyLinePlaceholder":630},[67,14281,14282],{"class":69,"line":677},[67,14283,14284],{"class":2058},"\u002F\u002F2. 地址传递\n",[67,14286,14287,14289,14292,14294,14297,14299,14301,14303,14305],{"class":69,"line":683},[67,14288,7181],{"class":84},[67,14290,14291],{"class":110}," mySwap02",[67,14293,854],{"class":73},[67,14295,14296],{"class":84},"int*",[67,14298,3253],{"class":7033},[67,14300,1868],{"class":73},[67,14302,14296],{"class":84},[67,14304,4658],{"class":7033},[67,14306,14241],{"class":73},[67,14308,14309,14311,14313,14315,14317],{"class":69,"line":689},[67,14310,3818],{"class":84},[67,14312,14248],{"class":73},[67,14314,85],{"class":84},[67,14316,986],{"class":84},[67,14318,8014],{"class":73},[67,14320,14321,14323,14325,14327,14329],{"class":69,"line":694},[67,14322,8220],{"class":84},[67,14324,12719],{"class":73},[67,14326,85],{"class":84},[67,14328,986],{"class":84},[67,14330,7886],{"class":73},[67,14332,14333,14335,14337,14339],{"class":69,"line":700},[67,14334,8220],{"class":84},[67,14336,12745],{"class":73},[67,14338,85],{"class":84},[67,14340,14271],{"class":73},[67,14342,14343],{"class":69,"line":706},[67,14344,3419],{"class":73},[67,14346,14347],{"class":69,"line":712},[67,14348,631],{"emptyLinePlaceholder":630},[67,14350,14351],{"class":69,"line":717},[67,14352,14353],{"class":2058},"\u002F\u002F3. 引用传递\n",[67,14355,14356,14358,14361,14363,14366,14368,14370,14372,14374],{"class":69,"line":723},[67,14357,7181],{"class":84},[67,14359,14360],{"class":110}," mySwap03",[67,14362,854],{"class":73},[67,14364,14365],{"class":84},"int&",[67,14367,3253],{"class":7033},[67,14369,1868],{"class":73},[67,14371,14365],{"class":84},[67,14373,4658],{"class":7033},[67,14375,14241],{"class":73},[67,14377,14378,14380,14382,14384],{"class":69,"line":729},[67,14379,3818],{"class":84},[67,14381,14248],{"class":73},[67,14383,85],{"class":84},[67,14385,3287],{"class":73},[67,14387,14388,14390,14392],{"class":69,"line":735},[67,14389,14257],{"class":73},[67,14391,85],{"class":84},[67,14393,14262],{"class":73},[67,14395,14396,14398,14400],{"class":69,"line":741},[67,14397,13939],{"class":73},[67,14399,85],{"class":84},[67,14401,14271],{"class":73},[67,14403,14404],{"class":69,"line":747},[67,14405,3419],{"class":73},[67,14407,14408],{"class":69,"line":753},[67,14409,631],{"emptyLinePlaceholder":630},[67,14411,14412,14414,14416],{"class":69,"line":758},[67,14413,2006],{"class":84},[67,14415,804],{"class":110},[67,14417,12653],{"class":73},[67,14419,14420],{"class":69,"line":764},[67,14421,631],{"emptyLinePlaceholder":630},[67,14423,14424,14426,14428,14430,14432],{"class":69,"line":770},[67,14425,3818],{"class":84},[67,14427,12669],{"class":73},[67,14429,85],{"class":84},[67,14431,3871],{"class":77},[67,14433,3148],{"class":73},[67,14435,14436,14438,14440,14442,14444],{"class":69,"line":776},[67,14437,3818],{"class":84},[67,14439,12682],{"class":73},[67,14441,85],{"class":84},[67,14443,10756],{"class":77},[67,14445,3148],{"class":73},[67,14447,14448],{"class":69,"line":782},[67,14449,631],{"emptyLinePlaceholder":630},[67,14451,14452,14455,14458],{"class":69,"line":788},[67,14453,14454],{"class":110},"    mySwap01",[67,14456,14457],{"class":73},"(a, b);",[67,14459,14460],{"class":2058},"\u002F\u002F值传递，形参不会修饰实参\n",[67,14462,14463,14465,14467,14470,14472,14474,14476,14479,14481,14483,14485],{"class":69,"line":793},[67,14464,8345],{"class":73},[67,14466,3031],{"class":84},[67,14468,14469],{"class":114}," \"a:\"",[67,14471,3299],{"class":84},[67,14473,12669],{"class":73},[67,14475,3031],{"class":84},[67,14477,14478],{"class":114}," \" b:\"",[67,14480,3299],{"class":84},[67,14482,12682],{"class":73},[67,14484,3031],{"class":84},[67,14486,10646],{"class":73},[67,14488,14489],{"class":69,"line":798},[67,14490,631],{"emptyLinePlaceholder":630},[67,14492,14493,14496,14498,14500,14503,14505,14508],{"class":69,"line":816},[67,14494,14495],{"class":110},"    mySwap02",[67,14497,854],{"class":73},[67,14499,2344],{"class":84},[67,14501,14502],{"class":73},"a, ",[67,14504,2344],{"class":84},[67,14506,14507],{"class":73},"b);",[67,14509,14510],{"class":2058},"\u002F\u002F地址传递，形参会修饰实参\n",[67,14512,14513,14515,14517,14519,14521,14523,14525,14527,14529,14531,14533],{"class":69,"line":832},[67,14514,8345],{"class":73},[67,14516,3031],{"class":84},[67,14518,14469],{"class":114},[67,14520,3299],{"class":84},[67,14522,12669],{"class":73},[67,14524,3031],{"class":84},[67,14526,14478],{"class":114},[67,14528,3299],{"class":84},[67,14530,12682],{"class":73},[67,14532,3031],{"class":84},[67,14534,10646],{"class":73},[67,14536,14537],{"class":69,"line":843},[67,14538,631],{"emptyLinePlaceholder":630},[67,14540,14541,14544,14546],{"class":69,"line":848},[67,14542,14543],{"class":110},"    mySwap03",[67,14545,14457],{"class":73},[67,14547,14548],{"class":2058},"\u002F\u002F引用传递，形参会修饰实参\n",[67,14550,14551,14553,14555,14557,14559,14561,14563,14565,14567,14569,14571],{"class":69,"line":863},[67,14552,8345],{"class":73},[67,14554,3031],{"class":84},[67,14556,14469],{"class":114},[67,14558,3299],{"class":84},[67,14560,12669],{"class":73},[67,14562,3031],{"class":84},[67,14564,14478],{"class":114},[67,14566,3299],{"class":84},[67,14568,12682],{"class":73},[67,14570,3031],{"class":84},[67,14572,10646],{"class":73},[67,14574,14575],{"class":69,"line":876},[67,14576,631],{"emptyLinePlaceholder":630},[67,14578,14579,14581,14583,14585],{"class":69,"line":889},[67,14580,4136],{"class":110},[67,14582,854],{"class":73},[67,14584,4141],{"class":114},[67,14586,4544],{"class":73},[67,14588,14589],{"class":69,"line":894},[67,14590,631],{"emptyLinePlaceholder":630},[67,14592,14593,14595,14597],{"class":69,"line":911},[67,14594,5910],{"class":84},[67,14596,5913],{"class":77},[67,14598,3148],{"class":73},[67,14600,14601],{"class":69,"line":927},[67,14602,3419],{"class":73},[14,14604,14606],{"id":14605},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14608,14609],{},"作用：引用是可以作为函数的返回值存在的",[19,14611,10831,14612],{},[2144,14613,14614],{},"不要返回局部变量引用",[19,14616,14617],{},"用法：函数调用作为左值",[58,14619,14621],{"className":11741,"code":14620,"language":11743,"meta":63,"style":63},"\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",[32,14622,14623,14628,14636,14651,14657,14661,14665,14670,14678,14695,14701,14705,14709,14717,14721,14726,14740,14760,14779,14783,14788,14801,14821,14839,14843,14859,14863,14882,14900,14904,14914,14918,14926],{"__ignoreMap":63},[67,14624,14625],{"class":69,"line":70},[67,14626,14627],{"class":2058},"\u002F\u002F返回局部变量引用\n",[67,14629,14630,14632,14634],{"class":69,"line":191},[67,14631,14365],{"class":84},[67,14633,7405],{"class":110},[67,14635,12653],{"class":73},[67,14637,14638,14640,14642,14644,14646,14648],{"class":69,"line":202},[67,14639,3818],{"class":84},[67,14641,12669],{"class":73},[67,14643,85],{"class":84},[67,14645,3871],{"class":77},[67,14647,2055],{"class":73},[67,14649,14650],{"class":2058}," \u002F\u002F局部变量\n",[67,14652,14653,14655],{"class":69,"line":641},[67,14654,5910],{"class":84},[67,14656,3287],{"class":73},[67,14658,14659],{"class":69,"line":655},[67,14660,3419],{"class":73},[67,14662,14663],{"class":69,"line":660},[67,14664,631],{"emptyLinePlaceholder":630},[67,14666,14667],{"class":69,"line":665},[67,14668,14669],{"class":2058},"\u002F\u002F返回静态变量引用\n",[67,14671,14672,14674,14676],{"class":69,"line":677},[67,14673,14365],{"class":84},[67,14675,7474],{"class":110},[67,14677,12653],{"class":73},[67,14679,14680,14682,14684,14686,14688,14690,14692],{"class":69,"line":683},[67,14681,12820],{"class":84},[67,14683,4215],{"class":84},[67,14685,12669],{"class":73},[67,14687,85],{"class":84},[67,14689,10756],{"class":77},[67,14691,2055],{"class":73},[67,14693,14694],{"class":2058},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[67,14696,14697,14699],{"class":69,"line":689},[67,14698,5910],{"class":84},[67,14700,3287],{"class":73},[67,14702,14703],{"class":69,"line":694},[67,14704,3419],{"class":73},[67,14706,14707],{"class":69,"line":700},[67,14708,631],{"emptyLinePlaceholder":630},[67,14710,14711,14713,14715],{"class":69,"line":706},[67,14712,2006],{"class":84},[67,14714,804],{"class":110},[67,14716,12653],{"class":73},[67,14718,14719],{"class":69,"line":712},[67,14720,631],{"emptyLinePlaceholder":630},[67,14722,14723],{"class":69,"line":717},[67,14724,14725],{"class":2058},"    \u002F\u002F不能返回局部变量的引用\n",[67,14727,14728,14731,14734,14736,14738],{"class":69,"line":723},[67,14729,14730],{"class":84},"    int&",[67,14732,14733],{"class":73}," ref ",[67,14735,85],{"class":84},[67,14737,7405],{"class":110},[67,14739,7453],{"class":73},[67,14741,14742,14744,14746,14749,14751,14753,14755,14757],{"class":69,"line":729},[67,14743,8345],{"class":73},[67,14745,3031],{"class":84},[67,14747,14748],{"class":114}," \"ref = \"",[67,14750,3299],{"class":84},[67,14752,14733],{"class":73},[67,14754,3031],{"class":84},[67,14756,13269],{"class":73},[67,14758,14759],{"class":2058},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[67,14761,14762,14764,14766,14768,14770,14772,14774,14776],{"class":69,"line":735},[67,14763,8345],{"class":73},[67,14765,3031],{"class":84},[67,14767,14748],{"class":114},[67,14769,3299],{"class":84},[67,14771,14733],{"class":73},[67,14773,3031],{"class":84},[67,14775,13269],{"class":73},[67,14777,14778],{"class":2058},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[67,14780,14781],{"class":69,"line":741},[67,14782,631],{"emptyLinePlaceholder":630},[67,14784,14785],{"class":69,"line":747},[67,14786,14787],{"class":2058},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[67,14789,14790,14792,14795,14797,14799],{"class":69,"line":753},[67,14791,14730],{"class":84},[67,14793,14794],{"class":73}," ref2 ",[67,14796,85],{"class":84},[67,14798,7474],{"class":110},[67,14800,7453],{"class":73},[67,14802,14803,14805,14807,14810,14812,14814,14816,14818],{"class":69,"line":758},[67,14804,8345],{"class":73},[67,14806,3031],{"class":84},[67,14808,14809],{"class":114}," \"ref2 = \"",[67,14811,3299],{"class":84},[67,14813,14794],{"class":73},[67,14815,3031],{"class":84},[67,14817,13269],{"class":73},[67,14819,14820],{"class":2058}," \u002F\u002F20\n",[67,14822,14823,14825,14827,14829,14831,14833,14835,14837],{"class":69,"line":764},[67,14824,8345],{"class":73},[67,14826,3031],{"class":84},[67,14828,14809],{"class":114},[67,14830,3299],{"class":84},[67,14832,14794],{"class":73},[67,14834,3031],{"class":84},[67,14836,13269],{"class":73},[67,14838,14820],{"class":2058},[67,14840,14841],{"class":69,"line":770},[67,14842,631],{"emptyLinePlaceholder":630},[67,14844,14845,14847,14850,14852,14854,14856],{"class":69,"line":776},[67,14846,7519],{"class":110},[67,14848,14849],{"class":73},"() ",[67,14851,85],{"class":84},[67,14853,4824],{"class":77},[67,14855,2055],{"class":73},[67,14857,14858],{"class":2058},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[67,14860,14861],{"class":69,"line":782},[67,14862,631],{"emptyLinePlaceholder":630},[67,14864,14865,14867,14869,14871,14873,14875,14877,14879],{"class":69,"line":788},[67,14866,8345],{"class":73},[67,14868,3031],{"class":84},[67,14870,14809],{"class":114},[67,14872,3299],{"class":84},[67,14874,14794],{"class":73},[67,14876,3031],{"class":84},[67,14878,13269],{"class":73},[67,14880,14881],{"class":2058}," \u002F\u002F1000\n",[67,14883,14884,14886,14888,14890,14892,14894,14896,14898],{"class":69,"line":793},[67,14885,8345],{"class":73},[67,14887,3031],{"class":84},[67,14889,14809],{"class":114},[67,14891,3299],{"class":84},[67,14893,14794],{"class":73},[67,14895,3031],{"class":84},[67,14897,13269],{"class":73},[67,14899,14881],{"class":2058},[67,14901,14902],{"class":69,"line":798},[67,14903,631],{"emptyLinePlaceholder":630},[67,14905,14906,14908,14910,14912],{"class":69,"line":816},[67,14907,4136],{"class":110},[67,14909,854],{"class":73},[67,14911,4141],{"class":114},[67,14913,4544],{"class":73},[67,14915,14916],{"class":69,"line":832},[67,14917,631],{"emptyLinePlaceholder":630},[67,14919,14920,14922,14924],{"class":69,"line":843},[67,14921,5910],{"class":84},[67,14923,5913],{"class":77},[67,14925,3148],{"class":73},[67,14927,14928],{"class":69,"line":848},[67,14929,3419],{"class":73},[14,14931,14933],{"id":14932},"_65引用的本质","6.5引用的本质",[19,14935,14936,14937],{},"本质：",[2144,14938,14939],{},"引用的本质在c++内部实现是一个指针常量.",[58,14941,14943],{"className":1992,"code":14942,"language":1994,"meta":63,"style":63},"\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",[32,14944,14945,14950,14966,14980,14984,14993,15005,15010,15015,15026,15039,15043,15059,15076,15080,15088,15096],{"__ignoreMap":63},[67,14946,14947],{"class":69,"line":70},[67,14948,14949],{"class":2058},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[67,14951,14952,14954,14956,14958,14960,14963],{"class":69,"line":191},[67,14953,7181],{"class":84},[67,14955,13185],{"class":110},[67,14957,854],{"class":73},[67,14959,14365],{"class":84},[67,14961,14962],{"class":7033}," ref",[67,14964,14965],{"class":73},"){\n",[67,14967,14968,14971,14973,14975,14977],{"class":69,"line":202},[67,14969,14970],{"class":73},"    ref ",[67,14972,85],{"class":84},[67,14974,7571],{"class":77},[67,14976,2055],{"class":73},[67,14978,14979],{"class":2058}," \u002F\u002F ref是引用，转换为*ref = 100\n",[67,14981,14982],{"class":69,"line":641},[67,14983,3419],{"class":73},[67,14985,14986,14988,14990],{"class":69,"line":655},[67,14987,2006],{"class":84},[67,14989,804],{"class":110},[67,14991,14992],{"class":73},"(){\n",[67,14994,14995,14997,14999,15001,15003],{"class":69,"line":660},[67,14996,3818],{"class":84},[67,14998,12669],{"class":73},[67,15000,85],{"class":84},[67,15002,3871],{"class":77},[67,15004,3148],{"class":73},[67,15006,15007],{"class":69,"line":665},[67,15008,15009],{"class":73},"    \n",[67,15011,15012],{"class":69,"line":677},[67,15013,15014],{"class":2058},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[67,15016,15017,15019,15021,15023],{"class":69,"line":683},[67,15018,14730],{"class":84},[67,15020,14733],{"class":73},[67,15022,85],{"class":84},[67,15024,15025],{"class":73}," a; \n",[67,15027,15028,15030,15032,15034,15036],{"class":69,"line":689},[67,15029,14970],{"class":73},[67,15031,85],{"class":84},[67,15033,10756],{"class":77},[67,15035,2055],{"class":73},[67,15037,15038],{"class":2058}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[67,15040,15041],{"class":69,"line":694},[67,15042,15009],{"class":73},[67,15044,15045,15047,15049,15051,15053,15055,15057],{"class":69,"line":700},[67,15046,8345],{"class":73},[67,15048,3031],{"class":84},[67,15050,14469],{"class":114},[67,15052,3299],{"class":84},[67,15054,12669],{"class":73},[67,15056,3031],{"class":84},[67,15058,10646],{"class":73},[67,15060,15061,15063,15065,15068,15070,15072,15074],{"class":69,"line":706},[67,15062,8345],{"class":73},[67,15064,3031],{"class":84},[67,15066,15067],{"class":114}," \"ref:\"",[67,15069,3299],{"class":84},[67,15071,14733],{"class":73},[67,15073,3031],{"class":84},[67,15075,10646],{"class":73},[67,15077,15078],{"class":69,"line":712},[67,15079,15009],{"class":73},[67,15081,15082,15085],{"class":69,"line":717},[67,15083,15084],{"class":110},"    func",[67,15086,15087],{"class":73},"(a);\n",[67,15089,15090,15092,15094],{"class":69,"line":723},[67,15091,5910],{"class":84},[67,15093,5913],{"class":77},[67,15095,3148],{"class":73},[67,15097,15098],{"class":69,"line":729},[67,15099,3419],{"class":73},[19,15101,13132],{},[26,15103,15104,15107],{},[29,15105,15106],{},"引用的本质，就是一个指针常量",[29,15108,15109],{},"引用一旦初始化，就不可以发生改变",[14,15111,15113],{"id":15112},"_66常量引用","6.6常量引用",[19,15115,15116],{},"作用：常量引用主要用来修饰形参",[19,15118,15119,15120,15123],{},"在函数形参列表中，可以加",[2144,15121,15122],{},"const修饰形参","，防止形参改变实参",[58,15125,15127],{"className":1992,"code":15126,"language":1994,"meta":63,"style":63},"\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",[32,15128,15129,15134,15139,15158,15163,15176,15180,15184,15192,15196,15201,15206,15220,15224,15232,15244,15248,15253,15265,15272,15276,15286,15290,15298],{"__ignoreMap":63},[67,15130,15131],{"class":69,"line":70},[67,15132,15133],{"class":2058},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[67,15135,15136],{"class":69,"line":191},[67,15137,15138],{"class":2058},"\u002F\u002F加上const就不能修改实参的\n",[67,15140,15141,15143,15146,15148,15150,15153,15156],{"class":69,"line":202},[67,15142,7181],{"class":84},[67,15144,15145],{"class":110}," showValue",[67,15147,854],{"class":73},[67,15149,8608],{"class":84},[67,15151,15152],{"class":84}," int&",[67,15154,15155],{"class":7033}," v",[67,15157,14241],{"class":73},[67,15159,15160],{"class":69,"line":641},[67,15161,15162],{"class":2058},"    \u002F\u002Fv += 100;\n",[67,15164,15165,15167,15169,15172,15174],{"class":69,"line":655},[67,15166,8345],{"class":73},[67,15168,3031],{"class":84},[67,15170,15171],{"class":73}," v ",[67,15173,3031],{"class":84},[67,15175,10646],{"class":73},[67,15177,15178],{"class":69,"line":660},[67,15179,3419],{"class":73},[67,15181,15182],{"class":69,"line":665},[67,15183,631],{"emptyLinePlaceholder":630},[67,15185,15186,15188,15190],{"class":69,"line":677},[67,15187,2006],{"class":84},[67,15189,804],{"class":110},[67,15191,12653],{"class":73},[67,15193,15194],{"class":69,"line":683},[67,15195,631],{"emptyLinePlaceholder":630},[67,15197,15198],{"class":69,"line":689},[67,15199,15200],{"class":2058},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[67,15202,15203],{"class":69,"line":694},[67,15204,15205],{"class":2058},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[67,15207,15208,15210,15212,15214,15216,15218],{"class":69,"line":700},[67,15209,13021],{"class":84},[67,15211,15152],{"class":84},[67,15213,14733],{"class":73},[67,15215,85],{"class":84},[67,15217,3871],{"class":77},[67,15219,3148],{"class":73},[67,15221,15222],{"class":69,"line":706},[67,15223,631],{"emptyLinePlaceholder":630},[67,15225,15226,15229],{"class":69,"line":712},[67,15227,15228],{"class":2058},"    \u002F\u002Fref = 100;",[67,15230,15231],{"class":2058},"  \u002F\u002F加入const后不可以修改变量\n",[67,15233,15234,15236,15238,15240,15242],{"class":69,"line":717},[67,15235,8345],{"class":73},[67,15237,3031],{"class":84},[67,15239,14733],{"class":73},[67,15241,3031],{"class":84},[67,15243,10646],{"class":73},[67,15245,15246],{"class":69,"line":723},[67,15247,631],{"emptyLinePlaceholder":630},[67,15249,15250],{"class":69,"line":729},[67,15251,15252],{"class":2058},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[67,15254,15255,15257,15259,15261,15263],{"class":69,"line":735},[67,15256,3818],{"class":84},[67,15258,12669],{"class":73},[67,15260,85],{"class":84},[67,15262,3871],{"class":77},[67,15264,3148],{"class":73},[67,15266,15267,15270],{"class":69,"line":741},[67,15268,15269],{"class":110},"    showValue",[67,15271,15087],{"class":73},[67,15273,15274],{"class":69,"line":747},[67,15275,631],{"emptyLinePlaceholder":630},[67,15277,15278,15280,15282,15284],{"class":69,"line":753},[67,15279,4136],{"class":110},[67,15281,854],{"class":73},[67,15283,4141],{"class":114},[67,15285,4544],{"class":73},[67,15287,15288],{"class":69,"line":758},[67,15289,631],{"emptyLinePlaceholder":630},[67,15291,15292,15294,15296],{"class":69,"line":764},[67,15293,5910],{"class":84},[67,15295,5913],{"class":77},[67,15297,3148],{"class":73},[67,15299,15300],{"class":69,"line":770},[67,15301,3419],{"class":73},[1903,15303,15304],{},"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":63,"searchDepth":191,"depth":191,"links":15306},[15307,15308,15309,15310,15311,15312],{"id":13840,"depth":191,"text":13841},{"id":14019,"depth":191,"text":14020},{"id":14202,"depth":191,"text":14203},{"id":14605,"depth":191,"text":14606},{"id":14932,"depth":191,"text":14933},{"id":15112,"depth":191,"text":15113},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13832,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15319,"title":15320,"body":15321,"description":63,"extension":1930,"meta":16401,"navigation":630,"path":16402,"seo":16403,"stem":16404,"__hash__":16405},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15322,"toc":16393},[15323,15326,15330,15333,15338,15569,15571,15582,15586,15589,15597,15701,15704,15708,15711,15715,15718,15723,15745,15751,16078,16081,16085,16093,16390],[10,15324,15320],{"id":15325},"_7函数高级部分",[14,15327,15329],{"id":15328},"_71函数默认参数","7.1函数默认参数",[19,15331,15332],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15334,7000,15335],{},[32,15336,15337],{}," 返回值类型  函数名 （参数= 默认值）{}",[58,15339,15341],{"className":1992,"code":15340,"language":1994,"meta":63,"style":63},"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",[32,15342,15343,15377,15392,15396,15400,15405,15410,15439,15459,15469,15473,15477,15485,15489,15517,15539,15543,15553,15557,15565],{"__ignoreMap":63},[67,15344,15345,15347,15349,15351,15353,15355,15357,15359,15361,15363,15365,15367,15369,15371,15373,15375],{"class":69,"line":70},[67,15346,2006],{"class":84},[67,15348,13185],{"class":110},[67,15350,854],{"class":73},[67,15352,2006],{"class":84},[67,15354,3253],{"class":7033},[67,15356,1868],{"class":73},[67,15358,2006],{"class":84},[67,15360,4658],{"class":7033},[67,15362,671],{"class":84},[67,15364,3871],{"class":77},[67,15366,1868],{"class":73},[67,15368,2006],{"class":84},[67,15370,4674],{"class":7033},[67,15372,671],{"class":84},[67,15374,3871],{"class":77},[67,15376,14241],{"class":73},[67,15378,15379,15381,15383,15385,15387,15389],{"class":69,"line":191},[67,15380,5910],{"class":84},[67,15382,12669],{"class":73},[67,15384,2471],{"class":84},[67,15386,12682],{"class":73},[67,15388,2471],{"class":84},[67,15390,15391],{"class":73}," c;\n",[67,15393,15394],{"class":69,"line":202},[67,15395,3419],{"class":73},[67,15397,15398],{"class":69,"line":641},[67,15399,631],{"emptyLinePlaceholder":630},[67,15401,15402],{"class":69,"line":655},[67,15403,15404],{"class":2058},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[67,15406,15407],{"class":69,"line":660},[67,15408,15409],{"class":2058},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[67,15411,15412,15414,15417,15419,15421,15423,15425,15427,15429,15431,15433,15435,15437],{"class":69,"line":665},[67,15413,2006],{"class":84},[67,15415,15416],{"class":110}," func2",[67,15418,854],{"class":73},[67,15420,2006],{"class":84},[67,15422,3253],{"class":7033},[67,15424,671],{"class":84},[67,15426,3871],{"class":77},[67,15428,1868],{"class":73},[67,15430,2006],{"class":84},[67,15432,4658],{"class":7033},[67,15434,671],{"class":84},[67,15436,3871],{"class":77},[67,15438,4544],{"class":73},[67,15440,15441,15443,15445,15447,15449,15451,15453,15455,15457],{"class":69,"line":677},[67,15442,2006],{"class":84},[67,15444,15416],{"class":110},[67,15446,854],{"class":73},[67,15448,2006],{"class":84},[67,15450,3253],{"class":7033},[67,15452,1868],{"class":73},[67,15454,2006],{"class":84},[67,15456,4658],{"class":7033},[67,15458,14241],{"class":73},[67,15460,15461,15463,15465,15467],{"class":69,"line":683},[67,15462,5910],{"class":84},[67,15464,12669],{"class":73},[67,15466,2471],{"class":84},[67,15468,14262],{"class":73},[67,15470,15471],{"class":69,"line":689},[67,15472,3419],{"class":73},[67,15474,15475],{"class":69,"line":694},[67,15476,631],{"emptyLinePlaceholder":630},[67,15478,15479,15481,15483],{"class":69,"line":700},[67,15480,2006],{"class":84},[67,15482,804],{"class":110},[67,15484,12653],{"class":73},[67,15486,15487],{"class":69,"line":706},[67,15488,631],{"emptyLinePlaceholder":630},[67,15490,15491,15493,15495,15498,15500,15502,15504,15506,15508,15510,15513,15515],{"class":69,"line":712},[67,15492,8345],{"class":73},[67,15494,3031],{"class":84},[67,15496,15497],{"class":114}," \"ret = \"",[67,15499,3299],{"class":84},[67,15501,13185],{"class":110},[67,15503,854],{"class":73},[67,15505,2689],{"class":77},[67,15507,1868],{"class":73},[67,15509,2689],{"class":77},[67,15511,15512],{"class":73},") ",[67,15514,3031],{"class":84},[67,15516,10646],{"class":73},[67,15518,15519,15521,15523,15525,15527,15529,15531,15533,15535,15537],{"class":69,"line":717},[67,15520,8345],{"class":73},[67,15522,3031],{"class":84},[67,15524,15497],{"class":114},[67,15526,3299],{"class":84},[67,15528,13185],{"class":110},[67,15530,854],{"class":73},[67,15532,2302],{"class":77},[67,15534,15512],{"class":73},[67,15536,3031],{"class":84},[67,15538,10646],{"class":73},[67,15540,15541],{"class":69,"line":723},[67,15542,631],{"emptyLinePlaceholder":630},[67,15544,15545,15547,15549,15551],{"class":69,"line":729},[67,15546,4136],{"class":110},[67,15548,854],{"class":73},[67,15550,4141],{"class":114},[67,15552,4544],{"class":73},[67,15554,15555],{"class":69,"line":735},[67,15556,631],{"emptyLinePlaceholder":630},[67,15558,15559,15561,15563],{"class":69,"line":741},[67,15560,5910],{"class":84},[67,15562,5913],{"class":77},[67,15564,3148],{"class":73},[67,15566,15567],{"class":69,"line":747},[67,15568,3419],{"class":73},[19,15570,13132],{},[26,15572,15573,15576,15579],{},[29,15574,15575],{},"我传就用我；没传就用你",[29,15577,15578],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[29,15580,15581],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15583,15585],{"id":15584},"_72函数的占位参数","7.2函数的占位参数",[19,15587,15588],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15590,15591,15593,15594],{},[2144,15592,7000],{}," ",[32,15595,15596],{},"返回值类型 函数名 (数据类型){}",[58,15598,15600],{"className":1992,"code":15599,"language":1994,"meta":63,"style":63},"\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",[32,15601,15602,15607,15625,15638,15642,15650,15654,15671,15675,15685,15689,15697],{"__ignoreMap":63},[67,15603,15604],{"class":69,"line":70},[67,15605,15606],{"class":2058},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[67,15608,15609,15611,15613,15615,15617,15619,15621,15623],{"class":69,"line":191},[67,15610,7181],{"class":84},[67,15612,13185],{"class":110},[67,15614,854],{"class":73},[67,15616,2006],{"class":84},[67,15618,3253],{"class":7033},[67,15620,1868],{"class":73},[67,15622,2006],{"class":84},[67,15624,14241],{"class":73},[67,15626,15627,15629,15631,15634,15636],{"class":69,"line":202},[67,15628,8345],{"class":73},[67,15630,3031],{"class":84},[67,15632,15633],{"class":114}," \"this is func\"",[67,15635,3299],{"class":84},[67,15637,10646],{"class":73},[67,15639,15640],{"class":69,"line":641},[67,15641,3419],{"class":73},[67,15643,15644,15646,15648],{"class":69,"line":655},[67,15645,2006],{"class":84},[67,15647,804],{"class":110},[67,15649,12653],{"class":73},[67,15651,15652],{"class":69,"line":660},[67,15653,631],{"emptyLinePlaceholder":630},[67,15655,15656,15658,15660,15662,15664,15666,15668],{"class":69,"line":665},[67,15657,15084],{"class":110},[67,15659,854],{"class":73},[67,15661,2437],{"class":77},[67,15663,2369],{"class":73},[67,15665,2437],{"class":77},[67,15667,7783],{"class":73},[67,15669,15670],{"class":2058}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[67,15672,15673],{"class":69,"line":677},[67,15674,631],{"emptyLinePlaceholder":630},[67,15676,15677,15679,15681,15683],{"class":69,"line":683},[67,15678,4136],{"class":110},[67,15680,854],{"class":73},[67,15682,4141],{"class":114},[67,15684,4544],{"class":73},[67,15686,15687],{"class":69,"line":689},[67,15688,631],{"emptyLinePlaceholder":630},[67,15690,15691,15693,15695],{"class":69,"line":694},[67,15692,5910],{"class":84},[67,15694,5913],{"class":77},[67,15696,3148],{"class":73},[67,15698,15699],{"class":69,"line":700},[67,15700,3419],{"class":73},[19,15702,15703],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15705,15707],{"id":15706},"_73函数重载","7.3函数重载",[19,15709,15710],{},"意思是函数名是可以相同的",[391,15712,15714],{"id":15713},"_731基本语法","7.3.1基本语法",[19,15716,15717],{},"作用：函数名可以相同，提高复用性",[19,15719,15720],{},[2144,15721,15722],{},"函数重载满足条件：",[2994,15724,15725,15728,15731],{},[29,15726,15727],{},"同一个作用域下",[29,15729,15730],{},"函数名称相同",[29,15732,15733,15734,15737,15738,15741,15742],{},"函数参数",[2144,15735,15736],{},"类型不同","  或者 ",[2144,15739,15740],{},"个数不同"," 或者 ",[2144,15743,15744],{},"顺序不同",[19,15746,15747,15750],{},[2144,15748,15749],{},"注意:","  函数的返回值不可以作为函数重载的条件",[58,15752,15754],{"className":11741,"code":15753,"language":11743,"meta":63,"style":63},"\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",[32,15755,15756,15761,15769,15773,15786,15790,15804,15808,15821,15825,15840,15844,15857,15861,15882,15886,15899,15903,15923,15927,15940,15944,15948,15953,15958,15963,15968,15973,15977,15981,15989,15993,15999,16009,16019,16033,16048,16052,16062,16066,16074],{"__ignoreMap":63},[67,15757,15758],{"class":69,"line":70},[67,15759,15760],{"class":2058},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[67,15762,15763,15765,15767],{"class":69,"line":191},[67,15764,7181],{"class":84},[67,15766,13185],{"class":110},[67,15768,3809],{"class":73},[67,15770,15771],{"class":69,"line":202},[67,15772,3400],{"class":73},[67,15774,15775,15777,15779,15782,15784],{"class":69,"line":641},[67,15776,8345],{"class":73},[67,15778,3031],{"class":84},[67,15780,15781],{"class":114}," \"func 的调用！\"",[67,15783,3299],{"class":84},[67,15785,10646],{"class":73},[67,15787,15788],{"class":69,"line":655},[67,15789,3419],{"class":73},[67,15791,15792,15794,15796,15798,15800,15802],{"class":69,"line":660},[67,15793,7181],{"class":84},[67,15795,13185],{"class":110},[67,15797,854],{"class":73},[67,15799,2006],{"class":84},[67,15801,3253],{"class":7033},[67,15803,829],{"class":73},[67,15805,15806],{"class":69,"line":665},[67,15807,3400],{"class":73},[67,15809,15810,15812,15814,15817,15819],{"class":69,"line":677},[67,15811,8345],{"class":73},[67,15813,3031],{"class":84},[67,15815,15816],{"class":114}," \"func (int a) 的调用！\"",[67,15818,3299],{"class":84},[67,15820,10646],{"class":73},[67,15822,15823],{"class":69,"line":683},[67,15824,3419],{"class":73},[67,15826,15827,15829,15831,15833,15836,15838],{"class":69,"line":689},[67,15828,7181],{"class":84},[67,15830,13185],{"class":110},[67,15832,854],{"class":73},[67,15834,15835],{"class":84},"double",[67,15837,3253],{"class":7033},[67,15839,829],{"class":73},[67,15841,15842],{"class":69,"line":694},[67,15843,3400],{"class":73},[67,15845,15846,15848,15850,15853,15855],{"class":69,"line":700},[67,15847,8345],{"class":73},[67,15849,3031],{"class":84},[67,15851,15852],{"class":114}," \"func (double a)的调用！\"",[67,15854,3299],{"class":84},[67,15856,10646],{"class":73},[67,15858,15859],{"class":69,"line":706},[67,15860,3419],{"class":73},[67,15862,15863,15865,15867,15869,15871,15873,15876,15878,15880],{"class":69,"line":712},[67,15864,7181],{"class":84},[67,15866,13185],{"class":110},[67,15868,854],{"class":73},[67,15870,2006],{"class":84},[67,15872,3253],{"class":7033},[67,15874,15875],{"class":73}," ,",[67,15877,15835],{"class":84},[67,15879,4658],{"class":7033},[67,15881,829],{"class":73},[67,15883,15884],{"class":69,"line":717},[67,15885,3400],{"class":73},[67,15887,15888,15890,15892,15895,15897],{"class":69,"line":723},[67,15889,8345],{"class":73},[67,15891,3031],{"class":84},[67,15893,15894],{"class":114}," \"func (int a ,double b) 的调用！\"",[67,15896,3299],{"class":84},[67,15898,10646],{"class":73},[67,15900,15901],{"class":69,"line":729},[67,15902,3419],{"class":73},[67,15904,15905,15907,15909,15911,15913,15915,15917,15919,15921],{"class":69,"line":735},[67,15906,7181],{"class":84},[67,15908,13185],{"class":110},[67,15910,854],{"class":73},[67,15912,15835],{"class":84},[67,15914,3253],{"class":7033},[67,15916,15875],{"class":73},[67,15918,2006],{"class":84},[67,15920,4658],{"class":7033},[67,15922,829],{"class":73},[67,15924,15925],{"class":69,"line":741},[67,15926,3400],{"class":73},[67,15928,15929,15931,15933,15936,15938],{"class":69,"line":747},[67,15930,8345],{"class":73},[67,15932,3031],{"class":84},[67,15934,15935],{"class":114}," \"func (double a ,int b)的调用！\"",[67,15937,3299],{"class":84},[67,15939,10646],{"class":73},[67,15941,15942],{"class":69,"line":753},[67,15943,3419],{"class":73},[67,15945,15946],{"class":69,"line":758},[67,15947,631],{"emptyLinePlaceholder":630},[67,15949,15950],{"class":69,"line":764},[67,15951,15952],{"class":2058},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[67,15954,15955],{"class":69,"line":770},[67,15956,15957],{"class":2058},"\u002F\u002Fint func(double a, int b)\n",[67,15959,15960],{"class":69,"line":776},[67,15961,15962],{"class":2058},"\u002F\u002F{\n",[67,15964,15965],{"class":69,"line":782},[67,15966,15967],{"class":2058},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[67,15969,15970],{"class":69,"line":788},[67,15971,15972],{"class":2058},"\u002F\u002F}\n",[67,15974,15975],{"class":69,"line":793},[67,15976,631],{"emptyLinePlaceholder":630},[67,15978,15979],{"class":69,"line":798},[67,15980,631],{"emptyLinePlaceholder":630},[67,15982,15983,15985,15987],{"class":69,"line":816},[67,15984,2006],{"class":84},[67,15986,804],{"class":110},[67,15988,12653],{"class":73},[67,15990,15991],{"class":69,"line":832},[67,15992,631],{"emptyLinePlaceholder":630},[67,15994,15995,15997],{"class":69,"line":843},[67,15996,15084],{"class":110},[67,15998,7453],{"class":73},[67,16000,16001,16003,16005,16007],{"class":69,"line":848},[67,16002,15084],{"class":110},[67,16004,854],{"class":73},[67,16006,2437],{"class":77},[67,16008,4544],{"class":73},[67,16010,16011,16013,16015,16017],{"class":69,"line":863},[67,16012,15084],{"class":110},[67,16014,854],{"class":73},[67,16016,2049],{"class":77},[67,16018,4544],{"class":73},[67,16020,16021,16023,16025,16027,16029,16031],{"class":69,"line":876},[67,16022,15084],{"class":110},[67,16024,854],{"class":73},[67,16026,2437],{"class":77},[67,16028,2369],{"class":73},[67,16030,2049],{"class":77},[67,16032,4544],{"class":73},[67,16034,16035,16037,16039,16041,16044,16046],{"class":69,"line":889},[67,16036,15084],{"class":110},[67,16038,854],{"class":73},[67,16040,2049],{"class":77},[67,16042,16043],{"class":73}," , ",[67,16045,2437],{"class":77},[67,16047,4544],{"class":73},[67,16049,16050],{"class":69,"line":894},[67,16051,15009],{"class":73},[67,16053,16054,16056,16058,16060],{"class":69,"line":911},[67,16055,4136],{"class":110},[67,16057,854],{"class":73},[67,16059,4141],{"class":114},[67,16061,4544],{"class":73},[67,16063,16064],{"class":69,"line":927},[67,16065,631],{"emptyLinePlaceholder":630},[67,16067,16068,16070,16072],{"class":69,"line":932},[67,16069,5910],{"class":84},[67,16071,5913],{"class":77},[67,16073,3148],{"class":73},[67,16075,16076],{"class":69,"line":955},[67,16077,3419],{"class":73},[19,16079,16080],{},"重点：函数返回值不可以作为函数重载条件！",[391,16082,16084],{"id":16083},"_732注意事项","7.3.2注意事项",[2994,16086,16087,16090],{},[29,16088,16089],{},"引用作为重载条件!!!",[29,16091,16092],{},"函数重载碰到函数默认参数",[58,16094,16096],{"className":1992,"code":16095,"language":1994,"meta":63,"style":63},"\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",[32,16097,16098,16103,16108,16112,16128,16132,16145,16149,16153,16171,16175,16188,16192,16196,16200,16205,16209,16233,16237,16250,16254,16258,16272,16276,16289,16293,16297,16305,16309,16321,16331,16344,16348,16352,16360,16364,16374,16378,16386],{"__ignoreMap":63},[67,16099,16100],{"class":69,"line":70},[67,16101,16102],{"class":2058},"\u002F\u002F函数重载注意事项\n",[67,16104,16105],{"class":69,"line":191},[67,16106,16107],{"class":2058},"\u002F\u002F1、引用作为重载条件\n",[67,16109,16110],{"class":69,"line":202},[67,16111,631],{"emptyLinePlaceholder":630},[67,16113,16114,16116,16118,16120,16122,16124,16126],{"class":69,"line":641},[67,16115,7181],{"class":84},[67,16117,13185],{"class":110},[67,16119,854],{"class":73},[67,16121,2006],{"class":84},[67,16123,12384],{"class":84},[67,16125,2230],{"class":7033},[67,16127,829],{"class":73},[67,16129,16130],{"class":69,"line":655},[67,16131,3400],{"class":73},[67,16133,16134,16136,16138,16141,16143],{"class":69,"line":660},[67,16135,8345],{"class":73},[67,16137,3031],{"class":84},[67,16139,16140],{"class":114}," \"func (int &a) 调用 \"",[67,16142,3299],{"class":84},[67,16144,10646],{"class":73},[67,16146,16147],{"class":69,"line":665},[67,16148,3419],{"class":73},[67,16150,16151],{"class":69,"line":677},[67,16152,631],{"emptyLinePlaceholder":630},[67,16154,16155,16157,16159,16161,16163,16165,16167,16169],{"class":69,"line":683},[67,16156,7181],{"class":84},[67,16158,13185],{"class":110},[67,16160,854],{"class":73},[67,16162,8608],{"class":84},[67,16164,4215],{"class":84},[67,16166,12384],{"class":84},[67,16168,2230],{"class":7033},[67,16170,829],{"class":73},[67,16172,16173],{"class":69,"line":689},[67,16174,3400],{"class":73},[67,16176,16177,16179,16181,16184,16186],{"class":69,"line":694},[67,16178,8345],{"class":73},[67,16180,3031],{"class":84},[67,16182,16183],{"class":114}," \"func (const int &a) 调用 \"",[67,16185,3299],{"class":84},[67,16187,10646],{"class":73},[67,16189,16190],{"class":69,"line":700},[67,16191,3419],{"class":73},[67,16193,16194],{"class":69,"line":706},[67,16195,631],{"emptyLinePlaceholder":630},[67,16197,16198],{"class":69,"line":712},[67,16199,631],{"emptyLinePlaceholder":630},[67,16201,16202],{"class":69,"line":717},[67,16203,16204],{"class":2058},"\u002F\u002F2、函数重载碰到函数默认参数\n",[67,16206,16207],{"class":69,"line":723},[67,16208,631],{"emptyLinePlaceholder":630},[67,16210,16211,16213,16215,16217,16219,16221,16223,16225,16227,16229,16231],{"class":69,"line":729},[67,16212,7181],{"class":84},[67,16214,15416],{"class":110},[67,16216,854],{"class":73},[67,16218,2006],{"class":84},[67,16220,3253],{"class":7033},[67,16222,1868],{"class":73},[67,16224,2006],{"class":84},[67,16226,4658],{"class":7033},[67,16228,671],{"class":84},[67,16230,3871],{"class":77},[67,16232,829],{"class":73},[67,16234,16235],{"class":69,"line":735},[67,16236,3400],{"class":73},[67,16238,16239,16241,16243,16246,16248],{"class":69,"line":741},[67,16240,8345],{"class":73},[67,16242,3031],{"class":84},[67,16244,16245],{"class":114}," \"func2(int a, int b = 10) 调用\"",[67,16247,3299],{"class":84},[67,16249,10646],{"class":73},[67,16251,16252],{"class":69,"line":747},[67,16253,3419],{"class":73},[67,16255,16256],{"class":69,"line":753},[67,16257,631],{"emptyLinePlaceholder":630},[67,16259,16260,16262,16264,16266,16268,16270],{"class":69,"line":758},[67,16261,7181],{"class":84},[67,16263,15416],{"class":110},[67,16265,854],{"class":73},[67,16267,2006],{"class":84},[67,16269,3253],{"class":7033},[67,16271,829],{"class":73},[67,16273,16274],{"class":69,"line":764},[67,16275,3400],{"class":73},[67,16277,16278,16280,16282,16285,16287],{"class":69,"line":770},[67,16279,8345],{"class":73},[67,16281,3031],{"class":84},[67,16283,16284],{"class":114}," \"func2(int a) 调用\"",[67,16286,3299],{"class":84},[67,16288,10646],{"class":73},[67,16290,16291],{"class":69,"line":776},[67,16292,3419],{"class":73},[67,16294,16295],{"class":69,"line":782},[67,16296,631],{"emptyLinePlaceholder":630},[67,16298,16299,16301,16303],{"class":69,"line":788},[67,16300,2006],{"class":84},[67,16302,804],{"class":110},[67,16304,12653],{"class":73},[67,16306,16307],{"class":69,"line":793},[67,16308,15009],{"class":73},[67,16310,16311,16313,16315,16317,16319],{"class":69,"line":798},[67,16312,3818],{"class":84},[67,16314,12669],{"class":73},[67,16316,85],{"class":84},[67,16318,3871],{"class":77},[67,16320,3148],{"class":73},[67,16322,16323,16325,16328],{"class":69,"line":816},[67,16324,15084],{"class":110},[67,16326,16327],{"class":73},"(a);",[67,16329,16330],{"class":2058}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[67,16332,16333,16335,16337,16339,16341],{"class":69,"line":832},[67,16334,15084],{"class":110},[67,16336,854],{"class":73},[67,16338,2437],{"class":77},[67,16340,7783],{"class":73},[67,16342,16343],{"class":2058},"\u002F\u002F调用有const   10是个常量\n",[67,16345,16346],{"class":69,"line":843},[67,16347,631],{"emptyLinePlaceholder":630},[67,16349,16350],{"class":69,"line":848},[67,16351,631],{"emptyLinePlaceholder":630},[67,16353,16354,16357],{"class":69,"line":863},[67,16355,16356],{"class":2058},"    \u002F\u002Ffunc2(10);",[67,16358,16359],{"class":2058}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[67,16361,16362],{"class":69,"line":876},[67,16363,631],{"emptyLinePlaceholder":630},[67,16365,16366,16368,16370,16372],{"class":69,"line":889},[67,16367,4136],{"class":110},[67,16369,854],{"class":73},[67,16371,4141],{"class":114},[67,16373,4544],{"class":73},[67,16375,16376],{"class":69,"line":894},[67,16377,631],{"emptyLinePlaceholder":630},[67,16379,16380,16382,16384],{"class":69,"line":911},[67,16381,5910],{"class":84},[67,16383,5913],{"class":77},[67,16385,3148],{"class":73},[67,16387,16388],{"class":69,"line":927},[67,16389,3419],{"class":73},[1903,16391,16392],{},"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":63,"searchDepth":191,"depth":191,"links":16394},[16395,16396,16397],{"id":15328,"depth":191,"text":15329},{"id":15584,"depth":191,"text":15585},{"id":15706,"depth":191,"text":15707,"children":16398},[16399,16400],{"id":15713,"depth":202,"text":15714},{"id":16083,"depth":202,"text":16084},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15320,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16407,"title":16408,"body":16409,"description":25161,"extension":1930,"meta":25162,"navigation":630,"path":25163,"seo":25164,"stem":25165,"__hash__":25166},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16410,"toc":25142},[16411,16414,16420,16427,16432,16435,16438,16441,16445,16449,16452,16455,16463,16468,16471,16478,16483,16642,16645,16897,16900,16903,16906,16911,16914,16917,16928,16933,17169,17173,17183,17186,17194,17341,17345,17348,17351,17355,17800,17804,17812,17820,18732,18739,18744,19372,19375,19378,19381,19500,19503,19590,19593,19719,19722,19816,19819,20172,20176,20184,20188,20195,20198,20201,20212,20218,20223,20235,20243,20263,20271,20288,20474,20477,20481,20484,20487,20490,20493,20496,20499,20502,20962,20968,20972,20975,20986,21573,21576,22065,22069,22072,22075,22078,22081,22084,22092,22488,22492,22495,22498,22944,22947,22950,22955,22958,22963,22966,22970,22973,22975,22981,22984,23290,23300,23341,23345,23348,23350,23383,23386,23693,23695,23710,23713,23736,23745,23751,23754,23758,23761,23764,23769,23780,23785,23793,23798,23928,23931,23934,24109,24114,24326,24330,24333,24447,24452,24691,24695,24699,24702,24705,24710,24815,24818,24821,24824,24828,24939,24942,24945,24950,25002,25005,25008,25013,25059,25062,25067,25135,25137,25140],[10,16412,16408],{"id":16413},"_8类和对象",[19,16415,16416,16417],{},"C++面向对象的三大特性为",[2144,16418,16419],{},"封装、继承、多态",[19,16421,16422,16423,16426],{},"C++认为",[2144,16424,16425],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16428,16429],{},[2144,16430,16431],{},"例如：",[19,16433,16434],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16436,16437],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16439,16440],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16442,16444],{"id":16443},"_81封装","8.1封装",[391,16446,16448],{"id":16447},"_811封装的意义","8.1.1封装的意义",[19,16450,16451],{},"封装是C++面向对象三大特性之一",[19,16453,16454],{},"封装的意义：",[2994,16456,16457,16460],{},[29,16458,16459],{},"将属性和行为作为一个整体，表现生活中的事物",[29,16461,16462],{},"将属性和行为加以权限控制",[19,16464,16465],{},[2144,16466,16467],{},"封装意义一：",[19,16469,16470],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16472,16473,15593,16475],{},[2144,16474,7000],{},[32,16476,16477],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[26,16479,16480],{},[29,16481,16482],{},"**示例1：**设计一个圆类，求圆的周长",[58,16484,16486],{"className":1992,"code":16485,"language":1994,"meta":63,"style":63},"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",[32,16487,16488,16496,16500,16505,16510,16515,16520,16527,16532,16542,16546,16564,16568,16572,16580,16584,16589,16594,16599,16604,16615,16638],{"__ignoreMap":63},[67,16489,16490,16493],{"class":69,"line":70},[67,16491,16492],{"class":84},"class",[67,16494,16495],{"class":110}," Circle\n",[67,16497,16498],{"class":69,"line":191},[67,16499,3400],{"class":73},[67,16501,16502],{"class":69,"line":202},[67,16503,16504],{"class":2058},"    \u002F\u002F访问权限\n",[67,16506,16507],{"class":69,"line":641},[67,16508,16509],{"class":2058},"    \u002F\u002F公共权限\n",[67,16511,16512],{"class":69,"line":655},[67,16513,16514],{"class":84},"public:\n",[67,16516,16517],{"class":69,"line":660},[67,16518,16519],{"class":2058},"    \u002F\u002F属性\n",[67,16521,16522,16524],{"class":69,"line":665},[67,16523,3818],{"class":84},[67,16525,16526],{"class":73}," m_r;\n",[67,16528,16529],{"class":69,"line":677},[67,16530,16531],{"class":2058},"    \u002F\u002F行为\n",[67,16533,16534,16537,16540],{"class":69,"line":683},[67,16535,16536],{"class":84},"    double",[67,16538,16539],{"class":110}," calculateZC",[67,16541,3809],{"class":73},[67,16543,16544],{"class":69,"line":689},[67,16545,3863],{"class":73},[67,16547,16548,16551,16554,16556,16559,16561],{"class":69,"line":694},[67,16549,16550],{"class":84},"        return",[67,16552,16553],{"class":77}," 2",[67,16555,965],{"class":84},[67,16557,16558],{"class":73},"PI",[67,16560,965],{"class":84},[67,16562,16563],{"class":73},"m_r;\n",[67,16565,16566],{"class":69,"line":700},[67,16567,4020],{"class":73},[67,16569,16570],{"class":69,"line":706},[67,16571,5815],{"class":73},[67,16573,16574,16576,16578],{"class":69,"line":712},[67,16575,2006],{"class":84},[67,16577,804],{"class":110},[67,16579,3809],{"class":73},[67,16581,16582],{"class":69,"line":717},[67,16583,3400],{"class":73},[67,16585,16586],{"class":69,"line":723},[67,16587,16588],{"class":2058},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[67,16590,16591],{"class":69,"line":729},[67,16592,16593],{"class":2058},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[67,16595,16596],{"class":69,"line":735},[67,16597,16598],{"class":73},"    Circle c1;\n",[67,16600,16601],{"class":69,"line":741},[67,16602,16603],{"class":2058},"    \u002F\u002F给圆对象 的属性进行赋值\n",[67,16605,16606,16609,16611,16613],{"class":69,"line":747},[67,16607,16608],{"class":73},"    c1.m_r",[67,16610,85],{"class":84},[67,16612,2437],{"class":77},[67,16614,3148],{"class":73},[67,16616,16617,16619,16621,16624,16626,16629,16632,16634,16636],{"class":69,"line":753},[67,16618,3405],{"class":73},[67,16620,3031],{"class":84},[67,16622,16623],{"class":114},"\"圆的周长\"",[67,16625,3031],{"class":84},[67,16627,16628],{"class":73},"c1.",[67,16630,16631],{"class":110},"calculateZC",[67,16633,4259],{"class":73},[67,16635,3031],{"class":84},[67,16637,3053],{"class":73},[67,16639,16640],{"class":69,"line":758},[67,16641,3419],{"class":73},[19,16643,16644],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[58,16646,16648],{"className":1992,"code":16647,"language":1994,"meta":63,"style":63},"#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",[32,16649,16650,16656,16666,16672,16678,16682,16686,16691,16698,16703,16720,16724,16734,16738,16743,16759,16763,16773,16777,16782,16790,16794,16826,16830,16834,16842,16846,16851,16856,16870,16884,16893],{"__ignoreMap":63},[67,16651,16652,16654],{"class":69,"line":70},[67,16653,3784],{"class":84},[67,16655,3787],{"class":114},[67,16657,16658,16660,16662,16664],{"class":69,"line":191},[67,16659,3792],{"class":84},[67,16661,3795],{"class":84},[67,16663,3798],{"class":110},[67,16665,3148],{"class":73},[67,16667,16668,16670],{"class":69,"line":202},[67,16669,3784],{"class":84},[67,16671,9565],{"class":114},[67,16673,16674,16676],{"class":69,"line":641},[67,16675,16492],{"class":84},[67,16677,9578],{"class":110},[67,16679,16680],{"class":69,"line":655},[67,16681,3400],{"class":73},[67,16683,16684],{"class":69,"line":660},[67,16685,16514],{"class":84},[67,16687,16688],{"class":69,"line":665},[67,16689,16690],{"class":73},"    string m_name;\n",[67,16692,16693,16695],{"class":69,"line":677},[67,16694,3818],{"class":84},[67,16696,16697],{"class":73}," m_id;\n",[67,16699,16700],{"class":69,"line":683},[67,16701,16702],{"class":2058},"    \u002F\u002F赋值姓名\n",[67,16704,16705,16708,16711,16713,16716,16718],{"class":69,"line":689},[67,16706,16707],{"class":84},"    void",[67,16709,16710],{"class":110}," setName",[67,16712,854],{"class":73},[67,16714,16715],{"class":110},"string",[67,16717,266],{"class":7033},[67,16719,829],{"class":73},[67,16721,16722],{"class":69,"line":694},[67,16723,3863],{"class":73},[67,16725,16726,16729,16731],{"class":69,"line":700},[67,16727,16728],{"class":73},"        m_name",[67,16730,85],{"class":84},[67,16732,16733],{"class":73},"name;\n",[67,16735,16736],{"class":69,"line":706},[67,16737,4020],{"class":73},[67,16739,16740],{"class":69,"line":712},[67,16741,16742],{"class":2058},"    \u002F\u002F赋值学号\n",[67,16744,16745,16747,16750,16752,16754,16757],{"class":69,"line":717},[67,16746,16707],{"class":84},[67,16748,16749],{"class":110}," setId",[67,16751,854],{"class":73},[67,16753,2006],{"class":84},[67,16755,16756],{"class":7033}," id",[67,16758,829],{"class":73},[67,16760,16761],{"class":69,"line":723},[67,16762,3863],{"class":73},[67,16764,16765,16768,16770],{"class":69,"line":729},[67,16766,16767],{"class":73},"        m_id",[67,16769,85],{"class":84},[67,16771,16772],{"class":73},"id;\n",[67,16774,16775],{"class":69,"line":735},[67,16776,4020],{"class":73},[67,16778,16779],{"class":69,"line":741},[67,16780,16781],{"class":2058},"    \u002F\u002F打印学生信息\n",[67,16783,16784,16786,16788],{"class":69,"line":747},[67,16785,16707],{"class":84},[67,16787,11421],{"class":110},[67,16789,3809],{"class":73},[67,16791,16792],{"class":69,"line":753},[67,16793,3863],{"class":73},[67,16795,16796,16798,16800,16803,16805,16808,16810,16812,16814,16817,16819,16822,16824],{"class":69,"line":758},[67,16797,5273],{"class":73},[67,16799,3031],{"class":84},[67,16801,16802],{"class":114},"\"姓名：\"",[67,16804,3031],{"class":84},[67,16806,16807],{"class":73},"m_name",[67,16809,3031],{"class":84},[67,16811,6179],{"class":114},[67,16813,3031],{"class":84},[67,16815,16816],{"class":114},"\"学号：\"",[67,16818,3031],{"class":84},[67,16820,16821],{"class":73},"m_id",[67,16823,3031],{"class":84},[67,16825,3053],{"class":73},[67,16827,16828],{"class":69,"line":764},[67,16829,4020],{"class":73},[67,16831,16832],{"class":69,"line":770},[67,16833,5815],{"class":73},[67,16835,16836,16838,16840],{"class":69,"line":776},[67,16837,2006],{"class":84},[67,16839,804],{"class":110},[67,16841,3809],{"class":73},[67,16843,16844],{"class":69,"line":782},[67,16845,3400],{"class":73},[67,16847,16848],{"class":69,"line":788},[67,16849,16850],{"class":2058},"    \u002F\u002F实例化\n",[67,16852,16853],{"class":69,"line":793},[67,16854,16855],{"class":73},"    Student s1;\n",[67,16857,16858,16861,16864,16866,16868],{"class":69,"line":798},[67,16859,16860],{"class":73},"    s1.",[67,16862,16863],{"class":110},"setName",[67,16865,854],{"class":73},[67,16867,9732],{"class":114},[67,16869,4544],{"class":73},[67,16871,16872,16874,16877,16879,16882],{"class":69,"line":816},[67,16873,16860],{"class":73},[67,16875,16876],{"class":110},"setId",[67,16878,854],{"class":73},[67,16880,16881],{"class":77},"123456",[67,16883,4544],{"class":73},[67,16885,16886,16888,16891],{"class":69,"line":832},[67,16887,16860],{"class":73},[67,16889,16890],{"class":110},"printInfo",[67,16892,7453],{"class":73},[67,16894,16895],{"class":69,"line":843},[67,16896,3419],{"class":73},[19,16898,16899],{},"类中的属性和行为统称为成员",[19,16901,16902],{},"属性：成员属性(成员变量)",[19,16904,16905],{},"方法：成员函数(成员方法)",[19,16907,16908],{},[2144,16909,16910],{},"封装意义二：",[19,16912,16913],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16915,16916],{},"访问权限有三种：",[26,16918,16919,16922,16925],{},[29,16920,16921],{},"public        公共权限",[29,16923,16924],{},"protected 保护权限",[29,16926,16927],{},"private      私有权限",[19,16929,16930],{},[2144,16931,16932],{},"示例：",[58,16934,16936],{"className":11741,"code":16935,"language":11743,"meta":63,"style":63},"\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",[32,16937,16938,16943,16948,16953,16958,16962,16969,16973,16978,16982,16987,16991,16996,17001,17006,17010,17015,17020,17027,17031,17035,17043,17047,17058,17070,17082,17086,17090,17094,17102,17106,17111,17123,17131,17139,17143,17153,17157,17165],{"__ignoreMap":63},[67,16939,16940],{"class":69,"line":70},[67,16941,16942],{"class":2058},"\u002F\u002F三种权限\n",[67,16944,16945],{"class":69,"line":191},[67,16946,16947],{"class":2058},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[67,16949,16950],{"class":69,"line":202},[67,16951,16952],{"class":2058},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[67,16954,16955],{"class":69,"line":641},[67,16956,16957],{"class":2058},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[67,16959,16960],{"class":69,"line":655},[67,16961,631],{"emptyLinePlaceholder":630},[67,16963,16964,16966],{"class":69,"line":660},[67,16965,16492],{"class":84},[67,16967,16968],{"class":110}," Person\n",[67,16970,16971],{"class":69,"line":665},[67,16972,3400],{"class":73},[67,16974,16975],{"class":69,"line":677},[67,16976,16977],{"class":2058},"    \u002F\u002F姓名  公共权限\n",[67,16979,16980],{"class":69,"line":683},[67,16981,16514],{"class":84},[67,16983,16984],{"class":69,"line":689},[67,16985,16986],{"class":73},"    string m_Name;\n",[67,16988,16989],{"class":69,"line":694},[67,16990,631],{"emptyLinePlaceholder":630},[67,16992,16993],{"class":69,"line":700},[67,16994,16995],{"class":2058},"    \u002F\u002F汽车  保护权限\n",[67,16997,16998],{"class":69,"line":706},[67,16999,17000],{"class":84},"protected:\n",[67,17002,17003],{"class":69,"line":712},[67,17004,17005],{"class":73},"    string m_Car;\n",[67,17007,17008],{"class":69,"line":717},[67,17009,631],{"emptyLinePlaceholder":630},[67,17011,17012],{"class":69,"line":723},[67,17013,17014],{"class":2058},"    \u002F\u002F银行卡密码  私有权限\n",[67,17016,17017],{"class":69,"line":729},[67,17018,17019],{"class":84},"private:\n",[67,17021,17022,17024],{"class":69,"line":735},[67,17023,3818],{"class":84},[67,17025,17026],{"class":73}," m_Password;\n",[67,17028,17029],{"class":69,"line":741},[67,17030,631],{"emptyLinePlaceholder":630},[67,17032,17033],{"class":69,"line":747},[67,17034,16514],{"class":84},[67,17036,17037,17039,17041],{"class":69,"line":753},[67,17038,16707],{"class":84},[67,17040,13185],{"class":110},[67,17042,3809],{"class":73},[67,17044,17045],{"class":69,"line":758},[67,17046,3863],{"class":73},[67,17048,17049,17052,17054,17056],{"class":69,"line":764},[67,17050,17051],{"class":73},"        m_Name ",[67,17053,85],{"class":84},[67,17055,10744],{"class":114},[67,17057,3148],{"class":73},[67,17059,17060,17063,17065,17068],{"class":69,"line":770},[67,17061,17062],{"class":73},"        m_Car ",[67,17064,85],{"class":84},[67,17066,17067],{"class":114}," \"拖拉机\"",[67,17069,3148],{"class":73},[67,17071,17072,17075,17077,17080],{"class":69,"line":776},[67,17073,17074],{"class":73},"        m_Password ",[67,17076,85],{"class":84},[67,17078,17079],{"class":77}," 123456",[67,17081,3148],{"class":73},[67,17083,17084],{"class":69,"line":782},[67,17085,4020],{"class":73},[67,17087,17088],{"class":69,"line":788},[67,17089,5815],{"class":73},[67,17091,17092],{"class":69,"line":793},[67,17093,631],{"emptyLinePlaceholder":630},[67,17095,17096,17098,17100],{"class":69,"line":798},[67,17097,2006],{"class":84},[67,17099,804],{"class":110},[67,17101,12653],{"class":73},[67,17103,17104],{"class":69,"line":816},[67,17105,631],{"emptyLinePlaceholder":630},[67,17107,17108],{"class":69,"line":832},[67,17109,17110],{"class":73},"    Person p;\n",[67,17112,17113,17116,17118,17121],{"class":69,"line":843},[67,17114,17115],{"class":73},"    p.m_Name ",[67,17117,85],{"class":84},[67,17119,17120],{"class":114}," \"李四\"",[67,17122,3148],{"class":73},[67,17124,17125,17128],{"class":69,"line":848},[67,17126,17127],{"class":2058},"    \u002F\u002Fp.m_Car = \"奔驰\";",[67,17129,17130],{"class":2058},"  \u002F\u002F保护权限类外访问不到\n",[67,17132,17133,17136],{"class":69,"line":863},[67,17134,17135],{"class":2058},"    \u002F\u002Fp.m_Password = 123;",[67,17137,17138],{"class":2058}," \u002F\u002F私有权限类外访问不到\n",[67,17140,17141],{"class":69,"line":876},[67,17142,631],{"emptyLinePlaceholder":630},[67,17144,17145,17147,17149,17151],{"class":69,"line":889},[67,17146,4136],{"class":110},[67,17148,854],{"class":73},[67,17150,4141],{"class":114},[67,17152,4544],{"class":73},[67,17154,17155],{"class":69,"line":894},[67,17156,631],{"emptyLinePlaceholder":630},[67,17158,17159,17161,17163],{"class":69,"line":911},[67,17160,5910],{"class":84},[67,17162,5913],{"class":77},[67,17164,3148],{"class":73},[67,17166,17167],{"class":69,"line":927},[67,17168,3419],{"class":73},[391,17170,17172],{"id":17171},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17174,17175,17176,17179,17180],{},"在C++中 struct和class唯一的",[2144,17177,17178],{},"区别","就在于 ",[2144,17181,17182],{},"默认的访问权限不同",[19,17184,17185],{},"区别：",[2994,17187,17188,17191],{},[29,17189,17190],{},"struct 默认权限为公共",[29,17192,17193],{},"class   默认权限为私有",[58,17195,17197],{"className":11741,"code":17196,"language":11743,"meta":63,"style":63},"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",[32,17198,17199,17206,17210,17220,17224,17228,17235,17239,17249,17253,17257,17265,17269,17274,17288,17292,17297,17311,17315,17325,17329,17337],{"__ignoreMap":63},[67,17200,17201,17203],{"class":69,"line":70},[67,17202,16492],{"class":84},[67,17204,17205],{"class":110}," C1\n",[67,17207,17208],{"class":69,"line":191},[67,17209,3400],{"class":73},[67,17211,17212,17214,17217],{"class":69,"line":202},[67,17213,3818],{"class":84},[67,17215,17216],{"class":73},"  m_A;",[67,17218,17219],{"class":2058}," \u002F\u002F默认是私有权限\n",[67,17221,17222],{"class":69,"line":641},[67,17223,5815],{"class":73},[67,17225,17226],{"class":69,"line":655},[67,17227,631],{"emptyLinePlaceholder":630},[67,17229,17230,17232],{"class":69,"line":660},[67,17231,9575],{"class":84},[67,17233,17234],{"class":110}," C2\n",[67,17236,17237],{"class":69,"line":665},[67,17238,3400],{"class":73},[67,17240,17241,17243,17246],{"class":69,"line":677},[67,17242,3818],{"class":84},[67,17244,17245],{"class":73}," m_A;",[67,17247,17248],{"class":2058},"  \u002F\u002F默认是公共权限\n",[67,17250,17251],{"class":69,"line":683},[67,17252,5815],{"class":73},[67,17254,17255],{"class":69,"line":689},[67,17256,631],{"emptyLinePlaceholder":630},[67,17258,17259,17261,17263],{"class":69,"line":694},[67,17260,2006],{"class":84},[67,17262,804],{"class":110},[67,17264,12653],{"class":73},[67,17266,17267],{"class":69,"line":700},[67,17268,631],{"emptyLinePlaceholder":630},[67,17270,17271],{"class":69,"line":706},[67,17272,17273],{"class":73},"    C1 c1;\n",[67,17275,17276,17279,17281,17283,17285],{"class":69,"line":712},[67,17277,17278],{"class":73},"    c1.m_A ",[67,17280,85],{"class":84},[67,17282,3871],{"class":77},[67,17284,2055],{"class":73},[67,17286,17287],{"class":2058}," \u002F\u002F错误，访问权限是私有\n",[67,17289,17290],{"class":69,"line":717},[67,17291,631],{"emptyLinePlaceholder":630},[67,17293,17294],{"class":69,"line":723},[67,17295,17296],{"class":73},"    C2 c2;\n",[67,17298,17299,17302,17304,17306,17308],{"class":69,"line":729},[67,17300,17301],{"class":73},"    c2.m_A ",[67,17303,85],{"class":84},[67,17305,3871],{"class":77},[67,17307,2055],{"class":73},[67,17309,17310],{"class":2058}," \u002F\u002F正确，访问权限是公共\n",[67,17312,17313],{"class":69,"line":735},[67,17314,631],{"emptyLinePlaceholder":630},[67,17316,17317,17319,17321,17323],{"class":69,"line":741},[67,17318,4136],{"class":110},[67,17320,854],{"class":73},[67,17322,4141],{"class":114},[67,17324,4544],{"class":73},[67,17326,17327],{"class":69,"line":747},[67,17328,631],{"emptyLinePlaceholder":630},[67,17330,17331,17333,17335],{"class":69,"line":753},[67,17332,5910],{"class":84},[67,17334,5913],{"class":77},[67,17336,3148],{"class":73},[67,17338,17339],{"class":69,"line":758},[67,17340,3419],{"class":73},[391,17342,17344],{"id":17343},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17346,17347],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17349,17350],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17352,17353],{},[2144,17354,16932],{},[58,17356,17358],{"className":11741,"code":17357,"language":11743,"meta":63,"style":63},"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",[32,17359,17360,17370,17374,17378,17383,17397,17406,17410,17420,17424,17431,17435,17439,17443,17448,17457,17464,17468,17473,17489,17512,17525,17532,17536,17545,17549,17553,17558,17574,17584,17588,17592,17596,17604,17608,17618,17622,17630,17634,17638,17646,17650,17654,17659,17672,17695,17699,17704,17717,17739,17743,17748,17762,17770,17774,17784,17788,17796],{"__ignoreMap":63},[67,17361,17362,17364,17367],{"class":69,"line":70},[67,17363,16492],{"class":84},[67,17365,17366],{"class":110}," Person",[67,17368,17369],{"class":73}," {\n",[67,17371,17372],{"class":69,"line":191},[67,17373,16514],{"class":84},[67,17375,17376],{"class":69,"line":202},[67,17377,631],{"emptyLinePlaceholder":630},[67,17379,17380],{"class":69,"line":641},[67,17381,17382],{"class":2058},"    \u002F\u002F姓名设置可读可写\n",[67,17384,17385,17387,17389,17391,17393,17395],{"class":69,"line":655},[67,17386,16707],{"class":84},[67,17388,16710],{"class":110},[67,17390,854],{"class":73},[67,17392,16715],{"class":110},[67,17394,266],{"class":7033},[67,17396,14241],{"class":73},[67,17398,17399,17401,17403],{"class":69,"line":660},[67,17400,17051],{"class":73},[67,17402,85],{"class":84},[67,17404,17405],{"class":73}," name;\n",[67,17407,17408],{"class":69,"line":665},[67,17409,4020],{"class":73},[67,17411,17412,17415,17418],{"class":69,"line":677},[67,17413,17414],{"class":110},"    string",[67,17416,17417],{"class":110}," getName",[67,17419,3809],{"class":73},[67,17421,17422],{"class":69,"line":683},[67,17423,3863],{"class":73},[67,17425,17426,17428],{"class":69,"line":689},[67,17427,16550],{"class":84},[67,17429,17430],{"class":73}," m_Name;\n",[67,17432,17433],{"class":69,"line":694},[67,17434,4020],{"class":73},[67,17436,17437],{"class":69,"line":700},[67,17438,631],{"emptyLinePlaceholder":630},[67,17440,17441],{"class":69,"line":706},[67,17442,631],{"emptyLinePlaceholder":630},[67,17444,17445],{"class":69,"line":712},[67,17446,17447],{"class":2058},"    \u002F\u002F获取年龄 \n",[67,17449,17450,17452,17455],{"class":69,"line":717},[67,17451,3818],{"class":84},[67,17453,17454],{"class":110}," getAge",[67,17456,12653],{"class":73},[67,17458,17459,17461],{"class":69,"line":723},[67,17460,16550],{"class":84},[67,17462,17463],{"class":73}," m_Age;\n",[67,17465,17466],{"class":69,"line":729},[67,17467,4020],{"class":73},[67,17469,17470],{"class":69,"line":735},[67,17471,17472],{"class":2058},"    \u002F\u002F设置年龄\n",[67,17474,17475,17477,17480,17482,17484,17487],{"class":69,"line":741},[67,17476,16707],{"class":84},[67,17478,17479],{"class":110}," setAge",[67,17481,854],{"class":73},[67,17483,2006],{"class":84},[67,17485,17486],{"class":7033}," age",[67,17488,14241],{"class":73},[67,17490,17491,17493,17496,17498,17500,17502,17505,17507,17510],{"class":69,"line":747},[67,17492,4329],{"class":84},[67,17494,17495],{"class":73}," (age ",[67,17497,259],{"class":84},[67,17499,5913],{"class":77},[67,17501,5077],{"class":84},[67,17503,17504],{"class":73}," age ",[67,17506,2948],{"class":84},[67,17508,17509],{"class":77}," 150",[67,17511,14241],{"class":73},[67,17513,17514,17516,17518,17521,17523],{"class":69,"line":753},[67,17515,11524],{"class":73},[67,17517,3031],{"class":84},[67,17519,17520],{"class":114}," \"你个老妖精!\"",[67,17522,3299],{"class":84},[67,17524,10646],{"class":73},[67,17526,17527,17530],{"class":69,"line":758},[67,17528,17529],{"class":84},"            return",[67,17531,3148],{"class":73},[67,17533,17534],{"class":69,"line":764},[67,17535,4361],{"class":73},[67,17537,17538,17541,17543],{"class":69,"line":770},[67,17539,17540],{"class":73},"        m_Age ",[67,17542,85],{"class":84},[67,17544,9613],{"class":73},[67,17546,17547],{"class":69,"line":776},[67,17548,4020],{"class":73},[67,17550,17551],{"class":69,"line":782},[67,17552,631],{"emptyLinePlaceholder":630},[67,17554,17555],{"class":69,"line":788},[67,17556,17557],{"class":2058},"    \u002F\u002F情人设置为只写\n",[67,17559,17560,17562,17565,17567,17569,17572],{"class":69,"line":793},[67,17561,16707],{"class":84},[67,17563,17564],{"class":110}," setLover",[67,17566,854],{"class":73},[67,17568,16715],{"class":110},[67,17570,17571],{"class":7033}," lover",[67,17573,14241],{"class":73},[67,17575,17576,17579,17581],{"class":69,"line":798},[67,17577,17578],{"class":73},"        m_Lover ",[67,17580,85],{"class":84},[67,17582,17583],{"class":73}," lover;\n",[67,17585,17586],{"class":69,"line":816},[67,17587,4020],{"class":73},[67,17589,17590],{"class":69,"line":832},[67,17591,631],{"emptyLinePlaceholder":630},[67,17593,17594],{"class":69,"line":843},[67,17595,17019],{"class":84},[67,17597,17598,17601],{"class":69,"line":848},[67,17599,17600],{"class":73},"    string m_Name;",[67,17602,17603],{"class":2058}," \u002F\u002F可读可写  姓名\n",[67,17605,17606],{"class":69,"line":863},[67,17607,15009],{"class":73},[67,17609,17610,17612,17615],{"class":69,"line":876},[67,17611,3818],{"class":84},[67,17613,17614],{"class":73}," m_Age;",[67,17616,17617],{"class":2058}," \u002F\u002F只读  年龄\n",[67,17619,17620],{"class":69,"line":889},[67,17621,631],{"emptyLinePlaceholder":630},[67,17623,17624,17627],{"class":69,"line":894},[67,17625,17626],{"class":73},"    string m_Lover;",[67,17628,17629],{"class":2058}," \u002F\u002F只写  情人\n",[67,17631,17632],{"class":69,"line":911},[67,17633,5815],{"class":73},[67,17635,17636],{"class":69,"line":927},[67,17637,631],{"emptyLinePlaceholder":630},[67,17639,17640,17642,17644],{"class":69,"line":932},[67,17641,2006],{"class":84},[67,17643,804],{"class":110},[67,17645,12653],{"class":73},[67,17647,17648],{"class":69,"line":955},[67,17649,631],{"emptyLinePlaceholder":630},[67,17651,17652],{"class":69,"line":971},[67,17653,17110],{"class":73},[67,17655,17656],{"class":69,"line":1010},[67,17657,17658],{"class":2058},"    \u002F\u002F姓名设置\n",[67,17660,17661,17664,17666,17668,17670],{"class":69,"line":1016},[67,17662,17663],{"class":73},"    p.",[67,17665,16863],{"class":110},[67,17667,854],{"class":73},[67,17669,9732],{"class":114},[67,17671,4544],{"class":73},[67,17673,17674,17676,17678,17681,17683,17686,17689,17691,17693],{"class":69,"line":1021},[67,17675,8345],{"class":73},[67,17677,3031],{"class":84},[67,17679,17680],{"class":114}," \"姓名： \"",[67,17682,3299],{"class":84},[67,17684,17685],{"class":73}," p.",[67,17687,17688],{"class":110},"getName",[67,17690,14849],{"class":73},[67,17692,3031],{"class":84},[67,17694,10646],{"class":73},[67,17696,17697],{"class":69,"line":1034},[67,17698,631],{"emptyLinePlaceholder":630},[67,17700,17701],{"class":69,"line":1053},[67,17702,17703],{"class":2058},"    \u002F\u002F年龄设置\n",[67,17705,17706,17708,17711,17713,17715],{"class":69,"line":1070},[67,17707,17663],{"class":73},[67,17709,17710],{"class":110},"setAge",[67,17712,854],{"class":73},[67,17714,2645],{"class":77},[67,17716,4544],{"class":73},[67,17718,17719,17721,17723,17726,17728,17730,17733,17735,17737],{"class":69,"line":1083},[67,17720,8345],{"class":73},[67,17722,3031],{"class":84},[67,17724,17725],{"class":114}," \"年龄： \"",[67,17727,3299],{"class":84},[67,17729,17685],{"class":73},[67,17731,17732],{"class":110},"getAge",[67,17734,14849],{"class":73},[67,17736,3031],{"class":84},[67,17738,10646],{"class":73},[67,17740,17741],{"class":69,"line":1088},[67,17742,631],{"emptyLinePlaceholder":630},[67,17744,17745],{"class":69,"line":1093},[67,17746,17747],{"class":2058},"    \u002F\u002F情人设置\n",[67,17749,17750,17752,17755,17757,17760],{"class":69,"line":1110},[67,17751,17663],{"class":73},[67,17753,17754],{"class":110},"setLover",[67,17756,854],{"class":73},[67,17758,17759],{"class":114},"\"苍井\"",[67,17761,4544],{"class":73},[67,17763,17764,17767],{"class":69,"line":11603},[67,17765,17766],{"class":2058},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[67,17768,17769],{"class":2058},"  \u002F\u002F只写属性，不可以读取\n",[67,17771,17772],{"class":69,"line":11612},[67,17773,631],{"emptyLinePlaceholder":630},[67,17775,17776,17778,17780,17782],{"class":69,"line":11617},[67,17777,4136],{"class":110},[67,17779,854],{"class":73},[67,17781,4141],{"class":114},[67,17783,4544],{"class":73},[67,17785,17786],{"class":69,"line":11623},[67,17787,631],{"emptyLinePlaceholder":630},[67,17789,17790,17792,17794],{"class":69,"line":11644},[67,17791,5910],{"class":84},[67,17793,5913],{"class":77},[67,17795,3148],{"class":73},[67,17797,17798],{"class":69,"line":11650},[67,17799,3419],{"class":73},[391,17801,17803],{"id":17802},"_814封装案例","8.1.4封装案例",[26,17805,17806],{},[29,17807,17808,17811],{},[2144,17809,17810],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[2994,17813,17814,17817],{},[29,17815,17816],{},"求出立方体的面积和体积",[29,17818,17819],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[58,17821,17823],{"className":1992,"code":17822,"language":1994,"meta":63,"style":63},"#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",[32,17824,17825,17831,17841,17848,17852,17856,17861,17891,17895,17905,17915,17925,17929,17938,17942,17978,17982,17991,17995,18011,18015,18020,18029,18033,18040,18044,18053,18057,18064,18068,18077,18081,18088,18092,18097,18114,18118,18164,18168,18177,18181,18185,18189,18198,18202,18206,18211,18215,18221,18227,18233,18237,18241,18246,18268,18272,18326,18330,18338,18342,18347,18352,18365,18372,18388,18399,18405,18428,18434,18457,18471,18491,18497,18508,18531,18553,18558,18564,18578,18591,18596,18610,18615,18621,18626,18640,18645,18650,18664,18676,18681,18694,18699,18704,18709,18722,18727],{"__ignoreMap":63},[67,17826,17827,17829],{"class":69,"line":70},[67,17828,3784],{"class":84},[67,17830,3787],{"class":114},[67,17832,17833,17835,17837,17839],{"class":69,"line":191},[67,17834,3792],{"class":84},[67,17836,3795],{"class":84},[67,17838,3798],{"class":110},[67,17840,3148],{"class":73},[67,17842,17843,17845],{"class":69,"line":202},[67,17844,16492],{"class":84},[67,17846,17847],{"class":110}," Cube\n",[67,17849,17850],{"class":69,"line":641},[67,17851,3400],{"class":73},[67,17853,17854],{"class":69,"line":655},[67,17855,16514],{"class":84},[67,17857,17858],{"class":69,"line":660},[67,17859,17860],{"class":2058},"    \u002F\u002F输入长宽高\n",[67,17862,17863,17865,17868,17870,17872,17875,17877,17879,17882,17884,17886,17889],{"class":69,"line":665},[67,17864,16707],{"class":84},[67,17866,17867],{"class":110}," setLwh",[67,17869,854],{"class":73},[67,17871,2006],{"class":84},[67,17873,17874],{"class":7033}," l",[67,17876,2369],{"class":73},[67,17878,2006],{"class":84},[67,17880,17881],{"class":7033}," w",[67,17883,2369],{"class":73},[67,17885,2006],{"class":84},[67,17887,17888],{"class":7033}," h",[67,17890,829],{"class":73},[67,17892,17893],{"class":69,"line":677},[67,17894,3863],{"class":73},[67,17896,17897,17900,17902],{"class":69,"line":683},[67,17898,17899],{"class":73},"        m_L",[67,17901,85],{"class":84},[67,17903,17904],{"class":73},"l;\n",[67,17906,17907,17910,17912],{"class":69,"line":689},[67,17908,17909],{"class":73},"        m_W",[67,17911,85],{"class":84},[67,17913,17914],{"class":73},"w;\n",[67,17916,17917,17920,17922],{"class":69,"line":694},[67,17918,17919],{"class":73},"        m_H",[67,17921,85],{"class":84},[67,17923,17924],{"class":73},"h;\n",[67,17926,17927],{"class":69,"line":700},[67,17928,4020],{"class":73},[67,17930,17931,17933,17936],{"class":69,"line":706},[67,17932,3818],{"class":84},[67,17934,17935],{"class":110}," mianji",[67,17937,3809],{"class":73},[67,17939,17940],{"class":69,"line":712},[67,17941,3863],{"class":73},[67,17943,17944,17946,17948,17950,17953,17955,17958,17960,17963,17965,17968,17970,17973,17975],{"class":69,"line":717},[67,17945,16550],{"class":84},[67,17947,16553],{"class":77},[67,17949,965],{"class":84},[67,17951,17952],{"class":73},"(m_L",[67,17954,965],{"class":84},[67,17956,17957],{"class":73},"m_W ",[67,17959,2471],{"class":84},[67,17961,17962],{"class":73}," m_L",[67,17964,965],{"class":84},[67,17966,17967],{"class":73},"m_H ",[67,17969,2471],{"class":84},[67,17971,17972],{"class":73}," m_W",[67,17974,965],{"class":84},[67,17976,17977],{"class":73},"m_H);\n",[67,17979,17980],{"class":69,"line":723},[67,17981,4020],{"class":73},[67,17983,17984,17986,17989],{"class":69,"line":729},[67,17985,3818],{"class":84},[67,17987,17988],{"class":110}," tiji",[67,17990,3809],{"class":73},[67,17992,17993],{"class":69,"line":735},[67,17994,3863],{"class":73},[67,17996,17997,17999,18001,18003,18006,18008],{"class":69,"line":741},[67,17998,16550],{"class":84},[67,18000,17962],{"class":73},[67,18002,965],{"class":84},[67,18004,18005],{"class":73},"m_W",[67,18007,965],{"class":84},[67,18009,18010],{"class":73},"m_H;\n",[67,18012,18013],{"class":69,"line":747},[67,18014,4020],{"class":73},[67,18016,18017],{"class":69,"line":753},[67,18018,18019],{"class":2058},"    \u002F\u002F获取长宽高\n",[67,18021,18022,18024,18027],{"class":69,"line":758},[67,18023,3818],{"class":84},[67,18025,18026],{"class":110}," getLength",[67,18028,3809],{"class":73},[67,18030,18031],{"class":69,"line":764},[67,18032,3863],{"class":73},[67,18034,18035,18037],{"class":69,"line":770},[67,18036,16550],{"class":84},[67,18038,18039],{"class":73}," m_L;\n",[67,18041,18042],{"class":69,"line":776},[67,18043,4020],{"class":73},[67,18045,18046,18048,18051],{"class":69,"line":782},[67,18047,3818],{"class":84},[67,18049,18050],{"class":110}," getWidth",[67,18052,3809],{"class":73},[67,18054,18055],{"class":69,"line":788},[67,18056,3863],{"class":73},[67,18058,18059,18061],{"class":69,"line":793},[67,18060,16550],{"class":84},[67,18062,18063],{"class":73}," m_W;\n",[67,18065,18066],{"class":69,"line":798},[67,18067,4020],{"class":73},[67,18069,18070,18072,18075],{"class":69,"line":816},[67,18071,3818],{"class":84},[67,18073,18074],{"class":110}," getHeight",[67,18076,3809],{"class":73},[67,18078,18079],{"class":69,"line":832},[67,18080,3863],{"class":73},[67,18082,18083,18085],{"class":69,"line":843},[67,18084,16550],{"class":84},[67,18086,18087],{"class":73}," m_H;\n",[67,18089,18090],{"class":69,"line":848},[67,18091,4020],{"class":73},[67,18093,18094],{"class":69,"line":863},[67,18095,18096],{"class":2058},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[67,18098,18099,18102,18105,18107,18110,18112],{"class":69,"line":876},[67,18100,18101],{"class":84},"    bool",[67,18103,18104],{"class":110}," isEqual",[67,18106,854],{"class":73},[67,18108,18109],{"class":110},"Cube",[67,18111,4674],{"class":7033},[67,18113,829],{"class":73},[67,18115,18116],{"class":69,"line":889},[67,18117,3863],{"class":73},[67,18119,18120,18122,18125,18128,18130,18132,18135,18137,18140,18143,18145,18147,18150,18152,18154,18157,18159,18161],{"class":69,"line":894},[67,18121,4329],{"class":84},[67,18123,18124],{"class":73}," (c.",[67,18126,18127],{"class":110},"getLength",[67,18129,14849],{"class":73},[67,18131,4774],{"class":84},[67,18133,18134],{"class":73}," m_L ",[67,18136,3558],{"class":84},[67,18138,18139],{"class":73}," c.",[67,18141,18142],{"class":110},"getWidth",[67,18144,14849],{"class":73},[67,18146,4774],{"class":84},[67,18148,18149],{"class":73}," m_W ",[67,18151,3558],{"class":84},[67,18153,18139],{"class":73},[67,18155,18156],{"class":110},"getHeight",[67,18158,14849],{"class":73},[67,18160,4774],{"class":84},[67,18162,18163],{"class":73}," m_H)\n",[67,18165,18166],{"class":69,"line":911},[67,18167,4342],{"class":73},[67,18169,18170,18172,18175],{"class":69,"line":927},[67,18171,17529],{"class":84},[67,18173,18174],{"class":77}," true",[67,18176,3148],{"class":73},[67,18178,18179],{"class":69,"line":932},[67,18180,4361],{"class":73},[67,18182,18183],{"class":69,"line":955},[67,18184,4402],{"class":84},[67,18186,18187],{"class":69,"line":971},[67,18188,4342],{"class":73},[67,18190,18191,18193,18196],{"class":69,"line":1010},[67,18192,17529],{"class":84},[67,18194,18195],{"class":77}," false",[67,18197,3148],{"class":73},[67,18199,18200],{"class":69,"line":1016},[67,18201,4361],{"class":73},[67,18203,18204],{"class":69,"line":1021},[67,18205,4020],{"class":73},[67,18207,18208],{"class":69,"line":1034},[67,18209,18210],{"class":2058},"    \u002F\u002F私有属性\n",[67,18212,18213],{"class":69,"line":1053},[67,18214,17019],{"class":84},[67,18216,18217,18219],{"class":69,"line":1070},[67,18218,3818],{"class":84},[67,18220,18039],{"class":73},[67,18222,18223,18225],{"class":69,"line":1083},[67,18224,3818],{"class":84},[67,18226,18063],{"class":73},[67,18228,18229,18231],{"class":69,"line":1088},[67,18230,3818],{"class":84},[67,18232,18087],{"class":73},[67,18234,18235],{"class":69,"line":1093},[67,18236,631],{"emptyLinePlaceholder":630},[67,18238,18239],{"class":69,"line":1110},[67,18240,5815],{"class":73},[67,18242,18243],{"class":69,"line":11603},[67,18244,18245],{"class":2058},"\u002F\u002F全局函数判断两个立方体是否相等\n",[67,18247,18248,18250,18252,18254,18256,18259,18261,18263,18266],{"class":69,"line":11612},[67,18249,3209],{"class":84},[67,18251,18104],{"class":110},[67,18253,854],{"class":73},[67,18255,18109],{"class":110},[67,18257,18258],{"class":7033}," c1",[67,18260,2369],{"class":73},[67,18262,18109],{"class":110},[67,18264,18265],{"class":7033}," c2",[67,18267,829],{"class":73},[67,18269,18270],{"class":69,"line":11617},[67,18271,3400],{"class":73},[67,18273,18274,18276,18279,18281,18283,18285,18288,18290,18293,18295,18297,18299,18301,18303,18305,18307,18309,18311,18313,18315,18317,18319,18321,18323],{"class":69,"line":11623},[67,18275,5910],{"class":84},[67,18277,18278],{"class":73}," (c1.",[67,18280,18127],{"class":110},[67,18282,14849],{"class":73},[67,18284,4774],{"class":84},[67,18286,18287],{"class":73}," c2.",[67,18289,18127],{"class":110},[67,18291,18292],{"class":73},"()) ",[67,18294,3558],{"class":84},[67,18296,18278],{"class":73},[67,18298,18142],{"class":110},[67,18300,14849],{"class":73},[67,18302,4774],{"class":84},[67,18304,18287],{"class":73},[67,18306,18142],{"class":110},[67,18308,18292],{"class":73},[67,18310,3558],{"class":84},[67,18312,18278],{"class":73},[67,18314,18156],{"class":110},[67,18316,14849],{"class":73},[67,18318,4774],{"class":84},[67,18320,18287],{"class":73},[67,18322,18156],{"class":110},[67,18324,18325],{"class":73},"());\n",[67,18327,18328],{"class":69,"line":11644},[67,18329,3419],{"class":73},[67,18331,18332,18334,18336],{"class":69,"line":11650},[67,18333,2006],{"class":84},[67,18335,804],{"class":110},[67,18337,3809],{"class":73},[67,18339,18340],{"class":69,"line":11664},[67,18341,3400],{"class":73},[67,18343,18344],{"class":69,"line":11670},[67,18345,18346],{"class":73},"    Cube c1;\n",[67,18348,18349],{"class":69,"line":11697},[67,18350,18351],{"class":2058},"    \u002F\u002F输入立方体的长宽高\n",[67,18353,18354,18356,18358,18361,18363],{"class":69,"line":11706},[67,18355,3405],{"class":73},[67,18357,3031],{"class":84},[67,18359,18360],{"class":114},"\"请输入第一个立方体的长、宽、高：\"",[67,18362,3031],{"class":84},[67,18364,3053],{"class":73},[67,18366,18367,18369],{"class":69,"line":11712},[67,18368,3818],{"class":84},[67,18370,18371],{"class":73}," l,w,h,l1,w1,h1;\n",[67,18373,18374,18376,18378,18380,18382,18384,18386],{"class":69,"line":11720},[67,18375,3845],{"class":73},[67,18377,3284],{"class":84},[67,18379,2508],{"class":73},[67,18381,3284],{"class":84},[67,18383,2784],{"class":73},[67,18385,3284],{"class":84},[67,18387,17924],{"class":73},[67,18389,18390,18393,18396],{"class":69,"line":11725},[67,18391,18392],{"class":73},"    c1.",[67,18394,18395],{"class":110},"setLwh",[67,18397,18398],{"class":73},"(l,w,h);\n",[67,18400,18402],{"class":69,"line":18401},66,[67,18403,18404],{"class":2058},"    \u002F\u002F面积\n",[67,18406,18408,18410,18412,18415,18417,18419,18422,18424,18426],{"class":69,"line":18407},67,[67,18409,3405],{"class":73},[67,18411,3031],{"class":84},[67,18413,18414],{"class":114},"\"立方体的表面积为：\"",[67,18416,3031],{"class":84},[67,18418,16628],{"class":73},[67,18420,18421],{"class":110},"mianji",[67,18423,4259],{"class":73},[67,18425,3031],{"class":84},[67,18427,3053],{"class":73},[67,18429,18431],{"class":69,"line":18430},68,[67,18432,18433],{"class":2058},"    \u002F\u002F体积\n",[67,18435,18437,18439,18441,18444,18446,18448,18451,18453,18455],{"class":69,"line":18436},69,[67,18438,3405],{"class":73},[67,18440,3031],{"class":84},[67,18442,18443],{"class":114},"\"立方体的体积为：\"",[67,18445,3031],{"class":84},[67,18447,16628],{"class":73},[67,18449,18450],{"class":110},"tiji",[67,18452,4259],{"class":73},[67,18454,3031],{"class":84},[67,18456,3053],{"class":73},[67,18458,18460,18462,18464,18467,18469],{"class":69,"line":18459},70,[67,18461,3405],{"class":73},[67,18463,3031],{"class":84},[67,18465,18466],{"class":114},"\"请输入第二个立方体的长、宽、高：\"",[67,18468,3031],{"class":84},[67,18470,3053],{"class":73},[67,18472,18474,18476,18478,18481,18483,18486,18488],{"class":69,"line":18473},71,[67,18475,3845],{"class":73},[67,18477,3284],{"class":84},[67,18479,18480],{"class":73},"l1",[67,18482,3284],{"class":84},[67,18484,18485],{"class":73},"w1",[67,18487,3284],{"class":84},[67,18489,18490],{"class":73},"h1;\n",[67,18492,18494],{"class":69,"line":18493},72,[67,18495,18496],{"class":73},"    Cube c2;\n",[67,18498,18500,18503,18505],{"class":69,"line":18499},73,[67,18501,18502],{"class":73},"    c2.",[67,18504,18395],{"class":110},[67,18506,18507],{"class":73},"(l1,w1,h1);\n",[67,18509,18511,18513,18515,18518,18520,18523,18525,18527,18529],{"class":69,"line":18510},74,[67,18512,3405],{"class":73},[67,18514,3031],{"class":84},[67,18516,18517],{"class":114},"\"第二个立方体的表面积为：\"",[67,18519,3031],{"class":84},[67,18521,18522],{"class":73},"c2.",[67,18524,18421],{"class":110},[67,18526,4259],{"class":73},[67,18528,3031],{"class":84},[67,18530,3053],{"class":73},[67,18532,18534,18536,18538,18541,18543,18545,18547,18549,18551],{"class":69,"line":18533},75,[67,18535,3405],{"class":73},[67,18537,3031],{"class":84},[67,18539,18540],{"class":114},"\"第二个立方体的体积为：\"",[67,18542,3031],{"class":84},[67,18544,18522],{"class":73},[67,18546,18450],{"class":110},[67,18548,4259],{"class":73},[67,18550,3031],{"class":84},[67,18552,3053],{"class":73},[67,18554,18556],{"class":69,"line":18555},76,[67,18557,631],{"emptyLinePlaceholder":630},[67,18559,18561],{"class":69,"line":18560},77,[67,18562,18563],{"class":2058},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[67,18565,18567,18569,18571,18574,18576],{"class":69,"line":18566},78,[67,18568,3405],{"class":73},[67,18570,3031],{"class":84},[67,18572,18573],{"class":114},"\"内部函数判断结果：\"",[67,18575,3031],{"class":84},[67,18577,3053],{"class":73},[67,18579,18581,18583,18585,18588],{"class":69,"line":18580},79,[67,18582,897],{"class":84},[67,18584,18278],{"class":73},[67,18586,18587],{"class":110},"isEqual",[67,18589,18590],{"class":73},"(c2))\n",[67,18592,18594],{"class":69,"line":18593},80,[67,18595,3863],{"class":73},[67,18597,18599,18601,18603,18606,18608],{"class":69,"line":18598},81,[67,18600,5273],{"class":73},[67,18602,3031],{"class":84},[67,18604,18605],{"class":114},"\"两个立方体相等\"",[67,18607,3031],{"class":84},[67,18609,3053],{"class":73},[67,18611,18613],{"class":69,"line":18612},82,[67,18614,4020],{"class":73},[67,18616,18618],{"class":69,"line":18617},83,[67,18619,18620],{"class":84},"    else\n",[67,18622,18624],{"class":69,"line":18623},84,[67,18625,3863],{"class":73},[67,18627,18629,18631,18633,18636,18638],{"class":69,"line":18628},85,[67,18630,5273],{"class":73},[67,18632,3031],{"class":84},[67,18634,18635],{"class":114},"\"两个立方体不相等\"",[67,18637,3031],{"class":84},[67,18639,3053],{"class":73},[67,18641,18643],{"class":69,"line":18642},86,[67,18644,4020],{"class":73},[67,18646,18648],{"class":69,"line":18647},87,[67,18649,631],{"emptyLinePlaceholder":630},[67,18651,18653,18655,18657,18660,18662],{"class":69,"line":18652},88,[67,18654,3405],{"class":73},[67,18656,3031],{"class":84},[67,18658,18659],{"class":114},"\"全局函数判断结果：\"",[67,18661,3031],{"class":84},[67,18663,3053],{"class":73},[67,18665,18667,18669,18671,18673],{"class":69,"line":18666},89,[67,18668,897],{"class":84},[67,18670,3505],{"class":73},[67,18672,18587],{"class":110},[67,18674,18675],{"class":73},"(c1, c2))\n",[67,18677,18679],{"class":69,"line":18678},90,[67,18680,3863],{"class":73},[67,18682,18684,18686,18688,18690,18692],{"class":69,"line":18683},91,[67,18685,5273],{"class":73},[67,18687,3031],{"class":84},[67,18689,18605],{"class":114},[67,18691,3031],{"class":84},[67,18693,3053],{"class":73},[67,18695,18697],{"class":69,"line":18696},92,[67,18698,4020],{"class":73},[67,18700,18702],{"class":69,"line":18701},93,[67,18703,18620],{"class":84},[67,18705,18707],{"class":69,"line":18706},94,[67,18708,3863],{"class":73},[67,18710,18712,18714,18716,18718,18720],{"class":69,"line":18711},95,[67,18713,5273],{"class":73},[67,18715,3031],{"class":84},[67,18717,18635],{"class":114},[67,18719,3031],{"class":84},[67,18721,3053],{"class":73},[67,18723,18725],{"class":69,"line":18724},96,[67,18726,4020],{"class":73},[67,18728,18730],{"class":69,"line":18729},97,[67,18731,3419],{"class":73},[26,18733,18734],{"start":191},[29,18735,18736],{},[2144,18737,18738],{},"练习案例2：点和圆的关系",[2994,18740,18741],{},[29,18742,18743],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[58,18745,18747],{"className":1992,"code":18746,"language":1994,"meta":63,"style":63},"#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",[32,18748,18749,18755,18765,18772,18779,18783,18787,18792,18826,18831,18847,18861,18865,18869,18876,18883,18887,18893,18897,18901,18905,18927,18950,18955,18969,18984,18988,18992,18998,19003,19008,19012,19038,19042,19072,19100,19128,19145,19149,19162,19166,19170,19174,19187,19191,19195,19203,19207,19211,19215,19220,19224,19235,19242,19251,19261,19272,19279,19292,19303,19313,19324,19331,19345,19350,19360,19368],{"__ignoreMap":63},[67,18750,18751,18753],{"class":69,"line":70},[67,18752,3784],{"class":84},[67,18754,3787],{"class":114},[67,18756,18757,18759,18761,18763],{"class":69,"line":191},[67,18758,3792],{"class":84},[67,18760,3795],{"class":84},[67,18762,3798],{"class":110},[67,18764,3148],{"class":73},[67,18766,18767,18769],{"class":69,"line":202},[67,18768,3784],{"class":84},[67,18770,18771],{"class":114},"\u003Ccmath>\n",[67,18773,18774,18776],{"class":69,"line":641},[67,18775,16492],{"class":84},[67,18777,18778],{"class":110}," Point\n",[67,18780,18781],{"class":69,"line":655},[67,18782,3400],{"class":73},[67,18784,18785],{"class":69,"line":660},[67,18786,16514],{"class":84},[67,18788,18789],{"class":69,"line":665},[67,18790,18791],{"class":2058},"    \u002F\u002F赋值\n",[67,18793,18794,18796,18799,18801,18803,18806,18808,18810,18813,18816,18818,18821,18823],{"class":69,"line":677},[67,18795,16707],{"class":84},[67,18797,18798],{"class":110}," setPoint",[67,18800,854],{"class":73},[67,18802,15835],{"class":84},[67,18804,18805],{"class":7033}," x",[67,18807,1868],{"class":73},[67,18809,15835],{"class":84},[67,18811,18812],{"class":7033}," y",[67,18814,18815],{"class":73},") { m_x ",[67,18817,85],{"class":84},[67,18819,18820],{"class":73}," x; m_y ",[67,18822,85],{"class":84},[67,18824,18825],{"class":73}," y; }\n",[67,18827,18828],{"class":69,"line":683},[67,18829,18830],{"class":2058},"    \u002F\u002F获取坐标\n",[67,18832,18833,18835,18838,18841,18844],{"class":69,"line":689},[67,18834,16536],{"class":84},[67,18836,18837],{"class":110}," getX",[67,18839,18840],{"class":73},"() { ",[67,18842,18843],{"class":84},"return",[67,18845,18846],{"class":73}," m_x; }\n",[67,18848,18849,18851,18854,18856,18858],{"class":69,"line":694},[67,18850,16536],{"class":84},[67,18852,18853],{"class":110}," getY",[67,18855,18840],{"class":73},[67,18857,18843],{"class":84},[67,18859,18860],{"class":73}," m_y; }\n",[67,18862,18863],{"class":69,"line":700},[67,18864,631],{"emptyLinePlaceholder":630},[67,18866,18867],{"class":69,"line":706},[67,18868,17019],{"class":84},[67,18870,18871,18873],{"class":69,"line":712},[67,18872,16536],{"class":84},[67,18874,18875],{"class":73}," m_x;\n",[67,18877,18878,18880],{"class":69,"line":717},[67,18879,16536],{"class":84},[67,18881,18882],{"class":73}," m_y;\n",[67,18884,18885],{"class":69,"line":723},[67,18886,5815],{"class":73},[67,18888,18889,18891],{"class":69,"line":729},[67,18890,16492],{"class":84},[67,18892,16495],{"class":110},[67,18894,18895],{"class":69,"line":735},[67,18896,3400],{"class":73},[67,18898,18899],{"class":69,"line":741},[67,18900,16514],{"class":84},[67,18902,18903],{"class":69,"line":747},[67,18904,18791],{"class":2058},[67,18906,18907,18909,18912,18914,18916,18919,18922,18924],{"class":69,"line":753},[67,18908,16707],{"class":84},[67,18910,18911],{"class":110}," setRadius",[67,18913,854],{"class":73},[67,18915,15835],{"class":84},[67,18917,18918],{"class":7033}," r",[67,18920,18921],{"class":73},") { m_r ",[67,18923,85],{"class":84},[67,18925,18926],{"class":73}," r; }\n",[67,18928,18929,18931,18934,18936,18939,18942,18945,18947],{"class":69,"line":758},[67,18930,16707],{"class":84},[67,18932,18933],{"class":110}," setCenter",[67,18935,854],{"class":73},[67,18937,18938],{"class":110},"Point",[67,18940,18941],{"class":7033}," center",[67,18943,18944],{"class":73},") { m_center ",[67,18946,85],{"class":84},[67,18948,18949],{"class":73}," center; }\n",[67,18951,18952],{"class":69,"line":764},[67,18953,18954],{"class":2058},"    \u002F\u002F获取属性\n",[67,18956,18957,18959,18962,18964,18966],{"class":69,"line":770},[67,18958,16536],{"class":84},[67,18960,18961],{"class":110}," getRadius",[67,18963,18840],{"class":73},[67,18965,18843],{"class":84},[67,18967,18968],{"class":73}," m_r; }\n",[67,18970,18971,18974,18977,18979,18981],{"class":69,"line":776},[67,18972,18973],{"class":110},"    Point",[67,18975,18976],{"class":110}," getCenter",[67,18978,18840],{"class":73},[67,18980,18843],{"class":84},[67,18982,18983],{"class":73}," m_center; }\n",[67,18985,18986],{"class":69,"line":782},[67,18987,631],{"emptyLinePlaceholder":630},[67,18989,18990],{"class":69,"line":788},[67,18991,17019],{"class":84},[67,18993,18994,18996],{"class":69,"line":793},[67,18995,16536],{"class":84},[67,18997,16526],{"class":73},[67,18999,19000],{"class":69,"line":798},[67,19001,19002],{"class":2058},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[67,19004,19005],{"class":69,"line":816},[67,19006,19007],{"class":73},"    Point m_center;\n",[67,19009,19010],{"class":69,"line":832},[67,19011,5815],{"class":73},[67,19013,19014,19016,19019,19021,19024,19026,19028,19030,19032,19034,19036],{"class":69,"line":843},[67,19015,7181],{"class":84},[67,19017,19018],{"class":110}," isInCircle",[67,19020,854],{"class":73},[67,19022,19023],{"class":110},"Circle",[67,19025,12384],{"class":84},[67,19027,2280],{"class":7033},[67,19029,2369],{"class":73},[67,19031,18938],{"class":110},[67,19033,12384],{"class":84},[67,19035,19],{"class":7033},[67,19037,829],{"class":73},[67,19039,19040],{"class":69,"line":848},[67,19041,3400],{"class":73},[67,19043,19044,19046,19049,19051,19053,19056,19059,19062,19064,19066,19068,19070],{"class":69,"line":863},[67,19045,16536],{"class":84},[67,19047,19048],{"class":73}," dx ",[67,19050,85],{"class":84},[67,19052,18139],{"class":73},[67,19054,19055],{"class":110},"getCenter",[67,19057,19058],{"class":73},"().",[67,19060,19061],{"class":110},"getX",[67,19063,14849],{"class":73},[67,19065,1863],{"class":84},[67,19067,17685],{"class":73},[67,19069,19061],{"class":110},[67,19071,7453],{"class":73},[67,19073,19074,19076,19079,19081,19083,19085,19087,19090,19092,19094,19096,19098],{"class":69,"line":876},[67,19075,16536],{"class":84},[67,19077,19078],{"class":73}," dy ",[67,19080,85],{"class":84},[67,19082,18139],{"class":73},[67,19084,19055],{"class":110},[67,19086,19058],{"class":73},[67,19088,19089],{"class":110},"getY",[67,19091,14849],{"class":73},[67,19093,1863],{"class":84},[67,19095,17685],{"class":73},[67,19097,19089],{"class":110},[67,19099,7453],{"class":73},[67,19101,19102,19104,19107,19109,19112,19115,19117,19119,19121,19123,19125],{"class":69,"line":889},[67,19103,16536],{"class":84},[67,19105,19106],{"class":73}," distance ",[67,19108,85],{"class":84},[67,19110,19111],{"class":110}," sqrt",[67,19113,19114],{"class":73},"(dx ",[67,19116,965],{"class":84},[67,19118,19048],{"class":73},[67,19120,2471],{"class":84},[67,19122,19078],{"class":73},[67,19124,965],{"class":84},[67,19126,19127],{"class":73}," dy);\n",[67,19129,19130,19132,19135,19137,19139,19142],{"class":69,"line":894},[67,19131,897],{"class":84},[67,19133,19134],{"class":73}," (distance ",[67,19136,259],{"class":84},[67,19138,18139],{"class":73},[67,19140,19141],{"class":110},"getRadius",[67,19143,19144],{"class":73},"())\n",[67,19146,19147],{"class":69,"line":911},[67,19148,3863],{"class":73},[67,19150,19151,19153,19155,19158,19160],{"class":69,"line":927},[67,19152,11475],{"class":73},[67,19154,3031],{"class":84},[67,19156,19157],{"class":114}," \"点在圆内\"",[67,19159,3299],{"class":84},[67,19161,10646],{"class":73},[67,19163,19164],{"class":69,"line":932},[67,19165,4020],{"class":73},[67,19167,19168],{"class":69,"line":955},[67,19169,18620],{"class":84},[67,19171,19172],{"class":69,"line":971},[67,19173,3863],{"class":73},[67,19175,19176,19178,19180,19183,19185],{"class":69,"line":1010},[67,19177,11475],{"class":73},[67,19179,3031],{"class":84},[67,19181,19182],{"class":114}," \"点在圆外\"",[67,19184,3299],{"class":84},[67,19186,10646],{"class":73},[67,19188,19189],{"class":69,"line":1016},[67,19190,4020],{"class":73},[67,19192,19193],{"class":69,"line":1021},[67,19194,3419],{"class":73},[67,19196,19197,19199,19201],{"class":69,"line":1034},[67,19198,2006],{"class":84},[67,19200,804],{"class":110},[67,19202,3809],{"class":73},[67,19204,19205],{"class":69,"line":1053},[67,19206,3400],{"class":73},[67,19208,19209],{"class":69,"line":1070},[67,19210,16850],{"class":2058},[67,19212,19213],{"class":69,"line":1083},[67,19214,16598],{"class":73},[67,19216,19217],{"class":69,"line":1088},[67,19218,19219],{"class":73},"    Point p1;\n",[67,19221,19222],{"class":69,"line":1093},[67,19223,18791],{"class":2058},[67,19225,19226,19228,19230,19233],{"class":69,"line":1110},[67,19227,3405],{"class":73},[67,19229,3031],{"class":84},[67,19231,19232],{"class":114},"\"请输入圆的半径：\"",[67,19234,3148],{"class":73},[67,19236,19237,19239],{"class":69,"line":11603},[67,19238,16536],{"class":84},[67,19240,19241],{"class":73}," r;\n",[67,19243,19244,19246,19248],{"class":69,"line":11612},[67,19245,3845],{"class":73},[67,19247,3284],{"class":84},[67,19249,19250],{"class":73},"r;\n",[67,19252,19253,19255,19258],{"class":69,"line":11617},[67,19254,18392],{"class":73},[67,19256,19257],{"class":110},"setRadius",[67,19259,19260],{"class":73},"(r);\n",[67,19262,19263,19265,19267,19270],{"class":69,"line":11623},[67,19264,3405],{"class":73},[67,19266,3031],{"class":84},[67,19268,19269],{"class":114},"\"请输入圆心坐标：\"",[67,19271,3148],{"class":73},[67,19273,19274,19276],{"class":69,"line":11644},[67,19275,16536],{"class":84},[67,19277,19278],{"class":73}," x, y;\n",[67,19280,19281,19283,19285,19287,19289],{"class":69,"line":11650},[67,19282,3845],{"class":73},[67,19284,3284],{"class":84},[67,19286,2809],{"class":73},[67,19288,3284],{"class":84},[67,19290,19291],{"class":73},"y;\n",[67,19293,19294,19297,19300],{"class":69,"line":11664},[67,19295,19296],{"class":73},"    p1.",[67,19298,19299],{"class":110},"setPoint",[67,19301,19302],{"class":73},"(x, y);\n",[67,19304,19305,19307,19310],{"class":69,"line":11670},[67,19306,18392],{"class":73},[67,19308,19309],{"class":110},"setCenter",[67,19311,19312],{"class":73},"(p1);\n",[67,19314,19315,19317,19319,19322],{"class":69,"line":11697},[67,19316,3405],{"class":73},[67,19318,3031],{"class":84},[67,19320,19321],{"class":114},"\"请输入测试点坐标：\"",[67,19323,3148],{"class":73},[67,19325,19326,19328],{"class":69,"line":11706},[67,19327,16536],{"class":84},[67,19329,19330],{"class":73}," x1, y1;\n",[67,19332,19333,19335,19337,19340,19342],{"class":69,"line":11712},[67,19334,3845],{"class":73},[67,19336,3284],{"class":84},[67,19338,19339],{"class":73},"x1",[67,19341,3284],{"class":84},[67,19343,19344],{"class":73},"y1;\n",[67,19346,19347],{"class":69,"line":11720},[67,19348,19349],{"class":73},"    Point p2;\n",[67,19351,19352,19355,19357],{"class":69,"line":11725},[67,19353,19354],{"class":73},"    p2.",[67,19356,19299],{"class":110},[67,19358,19359],{"class":73},"(x1, y1);\n",[67,19361,19362,19365],{"class":69,"line":18401},[67,19363,19364],{"class":110},"    isInCircle",[67,19366,19367],{"class":73},"(c1, p2);\n",[67,19369,19370],{"class":69,"line":18407},[67,19371,3419],{"class":73},[19,19373,19374],{},"在类中可以让另一个类作为本来的成员",[19,19376,19377],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19379,19380],{},"创建point.h",[58,19382,19384],{"className":1992,"code":19383,"language":1994,"meta":63,"style":63},"#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",[32,19385,19386,19397,19403,19413,19419,19423,19428,19432,19436,19456,19460,19468,19476,19480,19484,19490,19496],{"__ignoreMap":63},[67,19387,19388,19391,19394],{"class":69,"line":70},[67,19389,19390],{"class":84},"#pragma",[67,19392,19393],{"class":110}," once",[67,19395,19396],{"class":2058}," \u002F\u002F防止头文件重复包含\n",[67,19398,19399,19401],{"class":69,"line":191},[67,19400,3784],{"class":84},[67,19402,3787],{"class":114},[67,19404,19405,19407,19409,19411],{"class":69,"line":202},[67,19406,3792],{"class":84},[67,19408,3795],{"class":84},[67,19410,3798],{"class":110},[67,19412,3148],{"class":73},[67,19414,19415,19417],{"class":69,"line":641},[67,19416,16492],{"class":84},[67,19418,18778],{"class":110},[67,19420,19421],{"class":69,"line":655},[67,19422,3400],{"class":73},[67,19424,19425],{"class":69,"line":660},[67,19426,19427],{"class":2058},"\u002F\u002F做好声明与变量定义就可以\n",[67,19429,19430],{"class":69,"line":665},[67,19431,16514],{"class":84},[67,19433,19434],{"class":69,"line":677},[67,19435,18791],{"class":2058},[67,19437,19438,19440,19442,19444,19446,19448,19450,19452,19454],{"class":69,"line":683},[67,19439,16707],{"class":84},[67,19441,18798],{"class":110},[67,19443,854],{"class":73},[67,19445,15835],{"class":84},[67,19447,18805],{"class":7033},[67,19449,1868],{"class":73},[67,19451,15835],{"class":84},[67,19453,18812],{"class":7033},[67,19455,4544],{"class":73},[67,19457,19458],{"class":69,"line":689},[67,19459,18830],{"class":2058},[67,19461,19462,19464,19466],{"class":69,"line":694},[67,19463,16536],{"class":84},[67,19465,18837],{"class":110},[67,19467,7453],{"class":73},[67,19469,19470,19472,19474],{"class":69,"line":700},[67,19471,16536],{"class":84},[67,19473,18853],{"class":110},[67,19475,7453],{"class":73},[67,19477,19478],{"class":69,"line":706},[67,19479,631],{"emptyLinePlaceholder":630},[67,19481,19482],{"class":69,"line":712},[67,19483,17019],{"class":84},[67,19485,19486,19488],{"class":69,"line":717},[67,19487,16536],{"class":84},[67,19489,18875],{"class":73},[67,19491,19492,19494],{"class":69,"line":723},[67,19493,16536],{"class":84},[67,19495,18882],{"class":73},[67,19497,19498],{"class":69,"line":729},[67,19499,5815],{"class":73},[19,19501,19502],{},"创建point.cpp",[58,19504,19506],{"className":1992,"code":19505,"language":1994,"meta":63,"style":63},"#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",[32,19507,19508,19515,19520,19554,19558,19574],{"__ignoreMap":63},[67,19509,19510,19512],{"class":69,"line":70},[67,19511,3784],{"class":84},[67,19513,19514],{"class":114},"\u003Cpoint.h>\n",[67,19516,19517],{"class":69,"line":191},[67,19518,19519],{"class":2058},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[67,19521,19522,19524,19527,19530,19532,19534,19536,19538,19540,19542,19544,19546,19548,19550,19552],{"class":69,"line":202},[67,19523,16707],{"class":84},[67,19525,19526],{"class":110}," Point",[67,19528,19529],{"class":73},"::",[67,19531,19299],{"class":110},[67,19533,854],{"class":73},[67,19535,15835],{"class":84},[67,19537,18805],{"class":7033},[67,19539,1868],{"class":73},[67,19541,15835],{"class":84},[67,19543,18812],{"class":7033},[67,19545,18815],{"class":73},[67,19547,85],{"class":84},[67,19549,18820],{"class":73},[67,19551,85],{"class":84},[67,19553,18825],{"class":73},[67,19555,19556],{"class":69,"line":641},[67,19557,18830],{"class":2058},[67,19559,19560,19562,19564,19566,19568,19570,19572],{"class":69,"line":655},[67,19561,16536],{"class":84},[67,19563,19526],{"class":110},[67,19565,19529],{"class":73},[67,19567,19061],{"class":110},[67,19569,18840],{"class":73},[67,19571,18843],{"class":84},[67,19573,18846],{"class":73},[67,19575,19576,19578,19580,19582,19584,19586,19588],{"class":69,"line":660},[67,19577,16536],{"class":84},[67,19579,19526],{"class":110},[67,19581,19529],{"class":73},[67,19583,19089],{"class":110},[67,19585,18840],{"class":73},[67,19587,18843],{"class":84},[67,19589,18860],{"class":73},[19,19591,19592],{},"创建circle.h",[58,19594,19596],{"className":1992,"code":19595,"language":1994,"meta":63,"style":63},"#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",[32,19597,19598,19605,19611,19621,19627,19633,19637,19641,19645,19659,19673,19677,19685,19693,19697,19701,19707,19711,19715],{"__ignoreMap":63},[67,19599,19600,19602],{"class":69,"line":70},[67,19601,19390],{"class":84},[67,19603,19604],{"class":110}," once\n",[67,19606,19607,19609],{"class":69,"line":191},[67,19608,3784],{"class":84},[67,19610,3787],{"class":114},[67,19612,19613,19615,19617,19619],{"class":69,"line":202},[67,19614,3792],{"class":84},[67,19616,3795],{"class":84},[67,19618,3798],{"class":110},[67,19620,3148],{"class":73},[67,19622,19623,19625],{"class":69,"line":641},[67,19624,3784],{"class":84},[67,19626,19514],{"class":114},[67,19628,19629,19631],{"class":69,"line":655},[67,19630,16492],{"class":84},[67,19632,16495],{"class":110},[67,19634,19635],{"class":69,"line":660},[67,19636,3400],{"class":73},[67,19638,19639],{"class":69,"line":665},[67,19640,16514],{"class":84},[67,19642,19643],{"class":69,"line":677},[67,19644,18791],{"class":2058},[67,19646,19647,19649,19651,19653,19655,19657],{"class":69,"line":683},[67,19648,16707],{"class":84},[67,19650,18911],{"class":110},[67,19652,854],{"class":73},[67,19654,15835],{"class":84},[67,19656,18918],{"class":7033},[67,19658,4544],{"class":73},[67,19660,19661,19663,19665,19667,19669,19671],{"class":69,"line":689},[67,19662,16707],{"class":84},[67,19664,18933],{"class":110},[67,19666,854],{"class":73},[67,19668,18938],{"class":110},[67,19670,18941],{"class":7033},[67,19672,4544],{"class":73},[67,19674,19675],{"class":69,"line":694},[67,19676,18954],{"class":2058},[67,19678,19679,19681,19683],{"class":69,"line":700},[67,19680,16536],{"class":84},[67,19682,18961],{"class":110},[67,19684,7453],{"class":73},[67,19686,19687,19689,19691],{"class":69,"line":706},[67,19688,18973],{"class":110},[67,19690,18976],{"class":110},[67,19692,7453],{"class":73},[67,19694,19695],{"class":69,"line":712},[67,19696,631],{"emptyLinePlaceholder":630},[67,19698,19699],{"class":69,"line":717},[67,19700,17019],{"class":84},[67,19702,19703,19705],{"class":69,"line":723},[67,19704,16536],{"class":84},[67,19706,16526],{"class":73},[67,19708,19709],{"class":69,"line":729},[67,19710,19002],{"class":2058},[67,19712,19713],{"class":69,"line":735},[67,19714,19007],{"class":73},[67,19716,19717],{"class":69,"line":741},[67,19718,5815],{"class":73},[19,19720,19721],{},"创建circle.cpp",[58,19723,19725],{"className":1992,"code":19724,"language":1994,"meta":63,"style":63},"#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",[32,19726,19727,19734,19757,19779,19784,19800],{"__ignoreMap":63},[67,19728,19729,19731],{"class":69,"line":70},[67,19730,3784],{"class":84},[67,19732,19733],{"class":114},"\u003Ccircle.h>\n",[67,19735,19736,19738,19741,19743,19745,19747,19749,19751,19753,19755],{"class":69,"line":191},[67,19737,7181],{"class":84},[67,19739,19740],{"class":110}," Circle",[67,19742,19529],{"class":73},[67,19744,19257],{"class":110},[67,19746,854],{"class":73},[67,19748,15835],{"class":84},[67,19750,18918],{"class":7033},[67,19752,18921],{"class":73},[67,19754,85],{"class":84},[67,19756,18926],{"class":73},[67,19758,19759,19761,19763,19765,19767,19769,19771,19773,19775,19777],{"class":69,"line":202},[67,19760,7181],{"class":84},[67,19762,19740],{"class":110},[67,19764,19529],{"class":73},[67,19766,19309],{"class":110},[67,19768,854],{"class":73},[67,19770,18938],{"class":110},[67,19772,18941],{"class":7033},[67,19774,18944],{"class":73},[67,19776,85],{"class":84},[67,19778,18949],{"class":73},[67,19780,19781],{"class":69,"line":641},[67,19782,19783],{"class":2058},"\u002F\u002F获取属性\n",[67,19785,19786,19788,19790,19792,19794,19796,19798],{"class":69,"line":655},[67,19787,15835],{"class":84},[67,19789,19740],{"class":110},[67,19791,19529],{"class":73},[67,19793,19141],{"class":110},[67,19795,18840],{"class":73},[67,19797,18843],{"class":84},[67,19799,18968],{"class":73},[67,19801,19802,19804,19806,19808,19810,19812,19814],{"class":69,"line":660},[67,19803,18938],{"class":110},[67,19805,19740],{"class":110},[67,19807,19529],{"class":73},[67,19809,19055],{"class":110},[67,19811,18840],{"class":73},[67,19813,18843],{"class":84},[67,19815,18983],{"class":73},[19,19817,19818],{},"使用封装的类",[58,19820,19822],{"className":1992,"code":19821,"language":1994,"meta":63,"style":63},"#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",[32,19823,19824,19830,19840,19846,19852,19876,19880,19906,19932,19956,19970,19974,19986,19990,19994,19998,20010,20014,20018,20026,20030,20034,20038,20042,20046,20056,20062,20070,20078,20088,20094,20106,20114,20122,20132,20138,20150,20154,20162,20168],{"__ignoreMap":63},[67,19825,19826,19828],{"class":69,"line":70},[67,19827,3784],{"class":84},[67,19829,3787],{"class":114},[67,19831,19832,19834,19836,19838],{"class":69,"line":191},[67,19833,3792],{"class":84},[67,19835,3795],{"class":84},[67,19837,3798],{"class":110},[67,19839,3148],{"class":73},[67,19841,19842,19844],{"class":69,"line":202},[67,19843,3784],{"class":84},[67,19845,19733],{"class":114},[67,19847,19848,19850],{"class":69,"line":641},[67,19849,3784],{"class":84},[67,19851,19514],{"class":114},[67,19853,19854,19856,19858,19860,19862,19864,19866,19868,19870,19872,19874],{"class":69,"line":655},[67,19855,7181],{"class":84},[67,19857,19018],{"class":110},[67,19859,854],{"class":73},[67,19861,19023],{"class":110},[67,19863,12384],{"class":84},[67,19865,2280],{"class":7033},[67,19867,2369],{"class":73},[67,19869,18938],{"class":110},[67,19871,12384],{"class":84},[67,19873,19],{"class":7033},[67,19875,829],{"class":73},[67,19877,19878],{"class":69,"line":660},[67,19879,3400],{"class":73},[67,19881,19882,19884,19886,19888,19890,19892,19894,19896,19898,19900,19902,19904],{"class":69,"line":665},[67,19883,16536],{"class":84},[67,19885,19048],{"class":73},[67,19887,85],{"class":84},[67,19889,18139],{"class":73},[67,19891,19055],{"class":110},[67,19893,19058],{"class":73},[67,19895,19061],{"class":110},[67,19897,14849],{"class":73},[67,19899,1863],{"class":84},[67,19901,17685],{"class":73},[67,19903,19061],{"class":110},[67,19905,7453],{"class":73},[67,19907,19908,19910,19912,19914,19916,19918,19920,19922,19924,19926,19928,19930],{"class":69,"line":677},[67,19909,16536],{"class":84},[67,19911,19078],{"class":73},[67,19913,85],{"class":84},[67,19915,18139],{"class":73},[67,19917,19055],{"class":110},[67,19919,19058],{"class":73},[67,19921,19089],{"class":110},[67,19923,14849],{"class":73},[67,19925,1863],{"class":84},[67,19927,17685],{"class":73},[67,19929,19089],{"class":110},[67,19931,7453],{"class":73},[67,19933,19934,19936,19938,19940,19942,19944,19946,19948,19950,19952,19954],{"class":69,"line":683},[67,19935,16536],{"class":84},[67,19937,19106],{"class":73},[67,19939,85],{"class":84},[67,19941,19111],{"class":110},[67,19943,19114],{"class":73},[67,19945,965],{"class":84},[67,19947,19048],{"class":73},[67,19949,2471],{"class":84},[67,19951,19078],{"class":73},[67,19953,965],{"class":84},[67,19955,19127],{"class":73},[67,19957,19958,19960,19962,19964,19966,19968],{"class":69,"line":689},[67,19959,897],{"class":84},[67,19961,19134],{"class":73},[67,19963,259],{"class":84},[67,19965,18139],{"class":73},[67,19967,19141],{"class":110},[67,19969,19144],{"class":73},[67,19971,19972],{"class":69,"line":694},[67,19973,3863],{"class":73},[67,19975,19976,19978,19980,19982,19984],{"class":69,"line":700},[67,19977,11475],{"class":73},[67,19979,3031],{"class":84},[67,19981,19157],{"class":114},[67,19983,3299],{"class":84},[67,19985,10646],{"class":73},[67,19987,19988],{"class":69,"line":706},[67,19989,4020],{"class":73},[67,19991,19992],{"class":69,"line":712},[67,19993,18620],{"class":84},[67,19995,19996],{"class":69,"line":717},[67,19997,3863],{"class":73},[67,19999,20000,20002,20004,20006,20008],{"class":69,"line":723},[67,20001,11475],{"class":73},[67,20003,3031],{"class":84},[67,20005,19182],{"class":114},[67,20007,3299],{"class":84},[67,20009,10646],{"class":73},[67,20011,20012],{"class":69,"line":729},[67,20013,4020],{"class":73},[67,20015,20016],{"class":69,"line":735},[67,20017,3419],{"class":73},[67,20019,20020,20022,20024],{"class":69,"line":741},[67,20021,2006],{"class":84},[67,20023,804],{"class":110},[67,20025,3809],{"class":73},[67,20027,20028],{"class":69,"line":747},[67,20029,3400],{"class":73},[67,20031,20032],{"class":69,"line":753},[67,20033,16850],{"class":2058},[67,20035,20036],{"class":69,"line":758},[67,20037,16598],{"class":73},[67,20039,20040],{"class":69,"line":764},[67,20041,19219],{"class":73},[67,20043,20044],{"class":69,"line":770},[67,20045,18791],{"class":2058},[67,20047,20048,20050,20052,20054],{"class":69,"line":776},[67,20049,3405],{"class":73},[67,20051,3031],{"class":84},[67,20053,19232],{"class":114},[67,20055,3148],{"class":73},[67,20057,20058,20060],{"class":69,"line":782},[67,20059,16536],{"class":84},[67,20061,19241],{"class":73},[67,20063,20064,20066,20068],{"class":69,"line":788},[67,20065,3845],{"class":73},[67,20067,3284],{"class":84},[67,20069,19250],{"class":73},[67,20071,20072,20074,20076],{"class":69,"line":793},[67,20073,18392],{"class":73},[67,20075,19257],{"class":110},[67,20077,19260],{"class":73},[67,20079,20080,20082,20084,20086],{"class":69,"line":798},[67,20081,3405],{"class":73},[67,20083,3031],{"class":84},[67,20085,19269],{"class":114},[67,20087,3148],{"class":73},[67,20089,20090,20092],{"class":69,"line":816},[67,20091,16536],{"class":84},[67,20093,19278],{"class":73},[67,20095,20096,20098,20100,20102,20104],{"class":69,"line":832},[67,20097,3845],{"class":73},[67,20099,3284],{"class":84},[67,20101,2809],{"class":73},[67,20103,3284],{"class":84},[67,20105,19291],{"class":73},[67,20107,20108,20110,20112],{"class":69,"line":843},[67,20109,19296],{"class":73},[67,20111,19299],{"class":110},[67,20113,19302],{"class":73},[67,20115,20116,20118,20120],{"class":69,"line":848},[67,20117,18392],{"class":73},[67,20119,19309],{"class":110},[67,20121,19312],{"class":73},[67,20123,20124,20126,20128,20130],{"class":69,"line":863},[67,20125,3405],{"class":73},[67,20127,3031],{"class":84},[67,20129,19321],{"class":114},[67,20131,3148],{"class":73},[67,20133,20134,20136],{"class":69,"line":876},[67,20135,16536],{"class":84},[67,20137,19330],{"class":73},[67,20139,20140,20142,20144,20146,20148],{"class":69,"line":889},[67,20141,3845],{"class":73},[67,20143,3284],{"class":84},[67,20145,19339],{"class":73},[67,20147,3284],{"class":84},[67,20149,19344],{"class":73},[67,20151,20152],{"class":69,"line":894},[67,20153,19349],{"class":73},[67,20155,20156,20158,20160],{"class":69,"line":911},[67,20157,19354],{"class":73},[67,20159,19299],{"class":110},[67,20161,19359],{"class":73},[67,20163,20164,20166],{"class":69,"line":927},[67,20165,19364],{"class":110},[67,20167,19367],{"class":73},[67,20169,20170],{"class":69,"line":932},[67,20171,3419],{"class":73},[14,20173,20175],{"id":20174},"_82对象的初始化清理","8.2对象的初始化清理",[2994,20177,20178,20181],{},[29,20179,20180],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[29,20182,20183],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[391,20185,20187],{"id":20186},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20189,20190,20191,20194],{},"对象的",[2144,20192,20193],{},"初始化和清理","也是两个非常重要的安全问题",[19,20196,20197],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20199,20200],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20202,20203,20204,20207,20208,20211],{},"c++利用了",[2144,20205,20206],{},"构造函数","和",[2144,20209,20210],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20213,20214,20215],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2144,20216,20217],{},"我们不提供构造和析构，编译器会提供",[19,20219,20220],{},[2144,20221,20222],{},"编译器提供的构造函数和析构函数是空实现。",[2994,20224,20225,20228],{},[29,20226,20227],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[29,20229,20230,20231,20234],{},"析构函数：主要作用在于对象",[2144,20232,20233],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20236,20237,20240],{},[2144,20238,20239],{},"构造函数语法：",[32,20241,20242],{},"类名(){}",[26,20244,20245,20248,20251,20254,20257],{},[29,20246,20247],{},"构造函数，没有返回值也不写void",[29,20249,20250],{},"函数名称与类名相同",[29,20252,20253],{},"构造函数可以有参数，因此可以发生重载",[29,20255,20256],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[29,20258,20259,20260,2420],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[32,20261,20262],{},"Person(){}",[19,20264,20265,15593,20268],{},[2144,20266,20267],{},"析构函数语法：",[32,20269,20270],{},"~类名(){}",[26,20272,20273,20276,20279,20285],{},[29,20274,20275],{},"析构函数，没有返回值也不写void",[29,20277,20278],{},"函数名称与类名相同,在名称前加上符号  ~",[29,20280,20281,20282],{},"析构函数不可以有参数，因此",[2144,20283,20284],{},"不可以发生重载",[29,20286,20287],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[58,20289,20291],{"className":1992,"code":20290,"language":1994,"meta":63,"style":63},"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",[32,20292,20293,20299,20303,20307,20312,20319,20323,20336,20340,20345,20352,20356,20369,20373,20377,20381,20385,20393,20397,20405,20409,20413,20421,20425,20430,20434,20441,20445,20458,20462,20470],{"__ignoreMap":63},[67,20294,20295,20297],{"class":69,"line":70},[67,20296,16492],{"class":84},[67,20298,16968],{"class":110},[67,20300,20301],{"class":69,"line":191},[67,20302,3400],{"class":73},[67,20304,20305],{"class":69,"line":202},[67,20306,16514],{"class":84},[67,20308,20309],{"class":69,"line":641},[67,20310,20311],{"class":2058},"    \u002F\u002F构造函数\n",[67,20313,20314,20317],{"class":69,"line":655},[67,20315,20316],{"class":110},"    Person",[67,20318,3809],{"class":73},[67,20320,20321],{"class":69,"line":660},[67,20322,3863],{"class":73},[67,20324,20325,20327,20329,20332,20334],{"class":69,"line":665},[67,20326,11475],{"class":73},[67,20328,3031],{"class":84},[67,20330,20331],{"class":114}," \"Person的构造函数调用\"",[67,20333,3299],{"class":84},[67,20335,10646],{"class":73},[67,20337,20338],{"class":69,"line":677},[67,20339,4020],{"class":73},[67,20341,20342],{"class":69,"line":683},[67,20343,20344],{"class":2058},"    \u002F\u002F析构函数\n",[67,20346,20347,20350],{"class":69,"line":689},[67,20348,20349],{"class":110},"    ~Person",[67,20351,3809],{"class":73},[67,20353,20354],{"class":69,"line":694},[67,20355,3863],{"class":73},[67,20357,20358,20360,20362,20365,20367],{"class":69,"line":700},[67,20359,11475],{"class":73},[67,20361,3031],{"class":84},[67,20363,20364],{"class":114}," \"Person的析构函数调用\"",[67,20366,3299],{"class":84},[67,20368,10646],{"class":73},[67,20370,20371],{"class":69,"line":706},[67,20372,4020],{"class":73},[67,20374,20375],{"class":69,"line":712},[67,20376,631],{"emptyLinePlaceholder":630},[67,20378,20379],{"class":69,"line":717},[67,20380,5815],{"class":73},[67,20382,20383],{"class":69,"line":723},[67,20384,631],{"emptyLinePlaceholder":630},[67,20386,20387,20389,20391],{"class":69,"line":729},[67,20388,7181],{"class":84},[67,20390,7405],{"class":110},[67,20392,3809],{"class":73},[67,20394,20395],{"class":69,"line":735},[67,20396,3400],{"class":73},[67,20398,20399,20402],{"class":69,"line":741},[67,20400,20401],{"class":73},"    Person p;",[67,20403,20404],{"class":2058},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[67,20406,20407],{"class":69,"line":747},[67,20408,3419],{"class":73},[67,20410,20411],{"class":69,"line":753},[67,20412,631],{"emptyLinePlaceholder":630},[67,20414,20415,20417,20419],{"class":69,"line":758},[67,20416,2006],{"class":84},[67,20418,804],{"class":110},[67,20420,12653],{"class":73},[67,20422,20423],{"class":69,"line":764},[67,20424,15009],{"class":73},[67,20426,20427],{"class":69,"line":770},[67,20428,20429],{"class":2058},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[67,20431,20432],{"class":69,"line":776},[67,20433,631],{"emptyLinePlaceholder":630},[67,20435,20436,20438],{"class":69,"line":782},[67,20437,20401],{"class":73},[67,20439,20440],{"class":2058},"\u002F\u002F只有构造函数\n",[67,20442,20443],{"class":69,"line":788},[67,20444,631],{"emptyLinePlaceholder":630},[67,20446,20447,20449,20451,20453,20455],{"class":69,"line":793},[67,20448,4136],{"class":110},[67,20450,854],{"class":73},[67,20452,4141],{"class":114},[67,20454,7783],{"class":73},[67,20456,20457],{"class":2058},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[67,20459,20460],{"class":69,"line":798},[67,20461,631],{"emptyLinePlaceholder":630},[67,20463,20464,20466,20468],{"class":69,"line":816},[67,20465,5910],{"class":84},[67,20467,5913],{"class":77},[67,20469,3148],{"class":73},[67,20471,20472],{"class":69,"line":832},[67,20473,3419],{"class":73},[19,20475,20476],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[391,20478,20480],{"id":20479},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20482,20483],{},"两种分类方式：",[19,20485,20486],{},"​\t按参数分为： 有参构造和无参构造",[19,20488,20489],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20491,20492],{},"三种调用方式：",[19,20494,20495],{},"​\t括号法",[19,20497,20498],{},"​\t显示法",[19,20500,20501],{},"​\t隐式转换法",[58,20503,20505],{"className":1992,"code":20504,"language":1994,"meta":63,"style":63},"#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",[32,20506,20507,20513,20523,20528,20533,20538,20543,20547,20555,20559,20563,20567,20573,20577,20590,20594,20606,20610,20619,20632,20636,20640,20646,20650,20663,20667,20672,20688,20692,20697,20706,20719,20723,20729,20733,20738,20746,20750,20755,20759,20767,20771,20776,20781,20786,20791,20796,20800,20805,20810,20815,20820,20824,20829,20834,20850,20862,20867,20871,20876,20881,20886,20890,20895,20909,20922,20926,20934,20938,20944,20950,20958],{"__ignoreMap":63},[67,20508,20509,20511],{"class":69,"line":70},[67,20510,3784],{"class":84},[67,20512,3787],{"class":114},[67,20514,20515,20517,20519,20521],{"class":69,"line":191},[67,20516,3792],{"class":84},[67,20518,3795],{"class":84},[67,20520,3798],{"class":110},[67,20522,3148],{"class":73},[67,20524,20525],{"class":69,"line":202},[67,20526,20527],{"class":2058},"\u002F\u002F1.构造函数的分类及调用\n",[67,20529,20530],{"class":69,"line":641},[67,20531,20532],{"class":2058},"\u002F\u002F分类\n",[67,20534,20535],{"class":69,"line":655},[67,20536,20537],{"class":2058},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[67,20539,20540],{"class":69,"line":660},[67,20541,20542],{"class":2058},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[67,20544,20545],{"class":69,"line":665},[67,20546,631],{"emptyLinePlaceholder":630},[67,20548,20549,20551,20553],{"class":69,"line":677},[67,20550,16492],{"class":84},[67,20552,17366],{"class":110},[67,20554,4499],{"class":73},[67,20556,20557],{"class":69,"line":683},[67,20558,3400],{"class":73},[67,20560,20561],{"class":69,"line":689},[67,20562,16514],{"class":84},[67,20564,20565],{"class":69,"line":694},[67,20566,20311],{"class":2058},[67,20568,20569,20571],{"class":69,"line":700},[67,20570,20316],{"class":110},[67,20572,3809],{"class":73},[67,20574,20575],{"class":69,"line":706},[67,20576,3863],{"class":73},[67,20578,20579,20581,20583,20586,20588],{"class":69,"line":712},[67,20580,5273],{"class":73},[67,20582,3031],{"class":84},[67,20584,20585],{"class":114},"\"Person构造函数无参构造\"",[67,20587,3031],{"class":84},[67,20589,3053],{"class":73},[67,20591,20592],{"class":69,"line":717},[67,20593,4020],{"class":73},[67,20595,20596,20598,20600,20602,20604],{"class":69,"line":723},[67,20597,20316],{"class":110},[67,20599,854],{"class":73},[67,20601,2006],{"class":84},[67,20603,3253],{"class":7033},[67,20605,829],{"class":73},[67,20607,20608],{"class":69,"line":729},[67,20609,3863],{"class":73},[67,20611,20612,20615,20617],{"class":69,"line":735},[67,20613,20614],{"class":73},"        age",[67,20616,85],{"class":84},[67,20618,8014],{"class":73},[67,20620,20621,20623,20625,20628,20630],{"class":69,"line":741},[67,20622,5273],{"class":73},[67,20624,3031],{"class":84},[67,20626,20627],{"class":114},"\"Person构造函数有参构造\"",[67,20629,3031],{"class":84},[67,20631,3053],{"class":73},[67,20633,20634],{"class":69,"line":747},[67,20635,4020],{"class":73},[67,20637,20638],{"class":69,"line":753},[67,20639,20344],{"class":2058},[67,20641,20642,20644],{"class":69,"line":758},[67,20643,20349],{"class":110},[67,20645,3809],{"class":73},[67,20647,20648],{"class":69,"line":764},[67,20649,3863],{"class":73},[67,20651,20652,20654,20656,20659,20661],{"class":69,"line":770},[67,20653,5273],{"class":73},[67,20655,3031],{"class":84},[67,20657,20658],{"class":114},"\"Person析构函数被调用\"",[67,20660,3031],{"class":84},[67,20662,3053],{"class":73},[67,20664,20665],{"class":69,"line":776},[67,20666,4020],{"class":73},[67,20668,20669],{"class":69,"line":782},[67,20670,20671],{"class":2058},"    \u002F\u002F拷贝构造函数\n",[67,20673,20674,20676,20678,20680,20682,20684,20686],{"class":69,"line":788},[67,20675,20316],{"class":110},[67,20677,854],{"class":73},[67,20679,8608],{"class":84},[67,20681,17366],{"class":110},[67,20683,12384],{"class":84},[67,20685,19],{"class":7033},[67,20687,829],{"class":73},[67,20689,20690],{"class":69,"line":793},[67,20691,3863],{"class":73},[67,20693,20694],{"class":69,"line":798},[67,20695,20696],{"class":2058},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[67,20698,20699,20701,20703],{"class":69,"line":816},[67,20700,20614],{"class":73},[67,20702,85],{"class":84},[67,20704,20705],{"class":73},"p.age;\n",[67,20707,20708,20710,20712,20715,20717],{"class":69,"line":832},[67,20709,5273],{"class":73},[67,20711,3031],{"class":84},[67,20713,20714],{"class":114},"\"Person拷贝构造函数被调用\"",[67,20716,3031],{"class":84},[67,20718,3053],{"class":73},[67,20720,20721],{"class":69,"line":843},[67,20722,4020],{"class":73},[67,20724,20725,20727],{"class":69,"line":848},[67,20726,3818],{"class":84},[67,20728,9613],{"class":73},[67,20730,20731],{"class":69,"line":863},[67,20732,5815],{"class":73},[67,20734,20735],{"class":69,"line":876},[67,20736,20737],{"class":2058},"\u002F\u002F调用\n",[67,20739,20740,20742,20744],{"class":69,"line":889},[67,20741,7181],{"class":84},[67,20743,7405],{"class":110},[67,20745,3809],{"class":73},[67,20747,20748],{"class":69,"line":894},[67,20749,3400],{"class":73},[67,20751,20752],{"class":69,"line":911},[67,20753,20754],{"class":2058},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[67,20756,20757],{"class":69,"line":927},[67,20758,3419],{"class":73},[67,20760,20761,20763,20765],{"class":69,"line":932},[67,20762,7181],{"class":84},[67,20764,7474],{"class":110},[67,20766,3809],{"class":73},[67,20768,20769],{"class":69,"line":955},[67,20770,3400],{"class":73},[67,20772,20773],{"class":69,"line":971},[67,20774,20775],{"class":2058},"    \u002F\u002F1.括号法\n",[67,20777,20778],{"class":69,"line":1010},[67,20779,20780],{"class":2058},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[67,20782,20783],{"class":69,"line":1016},[67,20784,20785],{"class":2058},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[67,20787,20788],{"class":69,"line":1021},[67,20789,20790],{"class":2058},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[67,20792,20793],{"class":69,"line":1034},[67,20794,20795],{"class":2058},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[67,20797,20798],{"class":69,"line":1053},[67,20799,631],{"emptyLinePlaceholder":630},[67,20801,20802],{"class":69,"line":1070},[67,20803,20804],{"class":2058},"    \u002F\u002F注意事项\n",[67,20806,20807],{"class":69,"line":1083},[67,20808,20809],{"class":2058},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[67,20811,20812],{"class":69,"line":1088},[67,20813,20814],{"class":2058},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[67,20816,20817],{"class":69,"line":1093},[67,20818,20819],{"class":2058},"    \u002F\u002F Person p4();\n",[67,20821,20822],{"class":69,"line":1110},[67,20823,631],{"emptyLinePlaceholder":630},[67,20825,20826],{"class":69,"line":11603},[67,20827,20828],{"class":2058},"    \u002F\u002F2.显示法\n",[67,20830,20831],{"class":69,"line":11612},[67,20832,20833],{"class":73},"    Person p1;\n",[67,20835,20836,20839,20841,20844,20846,20848],{"class":69,"line":11617},[67,20837,20838],{"class":73},"    Person p2",[67,20840,85],{"class":84},[67,20842,20843],{"class":110},"Person",[67,20845,854],{"class":73},[67,20847,2437],{"class":77},[67,20849,4544],{"class":73},[67,20851,20852,20855,20857,20859],{"class":69,"line":11623},[67,20853,20854],{"class":73},"    Person p3",[67,20856,85],{"class":84},[67,20858,20843],{"class":110},[67,20860,20861],{"class":73},"(p2);\n",[67,20863,20864],{"class":69,"line":11644},[67,20865,20866],{"class":2058},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[67,20868,20869],{"class":69,"line":11650},[67,20870,631],{"emptyLinePlaceholder":630},[67,20872,20873],{"class":69,"line":11664},[67,20874,20875],{"class":2058},"    \u002F\u002F 注意事项2\n",[67,20877,20878],{"class":69,"line":11670},[67,20879,20880],{"class":2058},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[67,20882,20883],{"class":69,"line":11697},[67,20884,20885],{"class":2058},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[67,20887,20888],{"class":69,"line":11706},[67,20889,631],{"emptyLinePlaceholder":630},[67,20891,20892],{"class":69,"line":11712},[67,20893,20894],{"class":2058},"    \u002F\u002F3.隐士转换法\n",[67,20896,20897,20900,20902,20904,20906],{"class":69,"line":11720},[67,20898,20899],{"class":73},"    Person p4",[67,20901,85],{"class":84},[67,20903,2437],{"class":77},[67,20905,2055],{"class":73},[67,20907,20908],{"class":2058},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[67,20910,20911,20914,20916,20919],{"class":69,"line":11725},[67,20912,20913],{"class":73},"    Person p5",[67,20915,85],{"class":84},[67,20917,20918],{"class":73},"p4;",[67,20920,20921],{"class":2058}," \u002F\u002F 这里会调用拷贝构造函数\n",[67,20923,20924],{"class":69,"line":18401},[67,20925,3419],{"class":73},[67,20927,20928,20930,20932],{"class":69,"line":18407},[67,20929,2006],{"class":84},[67,20931,804],{"class":110},[67,20933,3809],{"class":73},[67,20935,20936],{"class":69,"line":18430},[67,20937,3400],{"class":73},[67,20939,20940,20942],{"class":69,"line":18436},[67,20941,7450],{"class":110},[67,20943,7453],{"class":73},[67,20945,20946,20948],{"class":69,"line":18459},[67,20947,7519],{"class":110},[67,20949,7453],{"class":73},[67,20951,20952,20954,20956],{"class":69,"line":18473},[67,20953,5910],{"class":84},[67,20955,5913],{"class":77},[67,20957,3148],{"class":73},[67,20959,20960],{"class":69,"line":18493},[67,20961,3419],{"class":73},[19,20963,20964,20967],{},[2144,20965,20966],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[391,20969,20971],{"id":20970},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20973,20974],{},"C++中拷贝构造函数调用时机通常有三种情况",[2994,20976,20977,20980,20983],{},[29,20978,20979],{},"使用一个已经创建完毕的对象来初始化一个新对象",[29,20981,20982],{},"值传递的方式给函数参数传值",[29,20984,20985],{},"以值方式返回局部对象",[58,20987,20989],{"className":1992,"code":20988,"language":1994,"meta":63,"style":63},"#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",[32,20990,20991,20997,21007,21011,21016,21020,21025,21030,21035,21041,21045,21049,21055,21059,21072,21076,21081,21093,21097,21105,21118,21122,21126,21142,21146,21155,21168,21172,21178,21182,21194,21198,21204,21208,21212,21220,21224,21237,21245,21263,21267,21272,21277,21292,21296,21309,21313,21321,21325,21329,21337,21341,21346,21355,21359,21363,21388,21398,21402,21410,21414,21425,21450,21454,21458,21462,21470,21474,21479,21484,21491,21496,21501,21506,21511,21515,21520,21524,21529,21533,21538,21543,21547,21551,21556,21561,21569],{"__ignoreMap":63},[67,20992,20993,20995],{"class":69,"line":70},[67,20994,3784],{"class":84},[67,20996,3787],{"class":114},[67,20998,20999,21001,21003,21005],{"class":69,"line":191},[67,21000,3792],{"class":84},[67,21002,3795],{"class":84},[67,21004,3798],{"class":110},[67,21006,3148],{"class":73},[67,21008,21009],{"class":69,"line":202},[67,21010,631],{"emptyLinePlaceholder":630},[67,21012,21013],{"class":69,"line":641},[67,21014,21015],{"class":2058},"\u002F\u002F拷贝构造函数调用时机\n",[67,21017,21018],{"class":69,"line":655},[67,21019,631],{"emptyLinePlaceholder":630},[67,21021,21022],{"class":69,"line":660},[67,21023,21024],{"class":2058},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[67,21026,21027],{"class":69,"line":665},[67,21028,21029],{"class":2058},"\u002F\u002F2.值传递的方式给函数参数传值\n",[67,21031,21032],{"class":69,"line":677},[67,21033,21034],{"class":2058},"\u002F\u002F3.以值方式返回局部对象\n",[67,21036,21037,21039],{"class":69,"line":683},[67,21038,16492],{"class":84},[67,21040,16968],{"class":110},[67,21042,21043],{"class":69,"line":689},[67,21044,3400],{"class":73},[67,21046,21047],{"class":69,"line":694},[67,21048,16514],{"class":84},[67,21050,21051,21053],{"class":69,"line":700},[67,21052,20316],{"class":110},[67,21054,3809],{"class":73},[67,21056,21057],{"class":69,"line":706},[67,21058,3863],{"class":73},[67,21060,21061,21063,21065,21068,21070],{"class":69,"line":712},[67,21062,11475],{"class":73},[67,21064,3031],{"class":84},[67,21066,21067],{"class":114}," \"Person的默认构造函数调用\"",[67,21069,3299],{"class":84},[67,21071,10646],{"class":73},[67,21073,21074],{"class":69,"line":717},[67,21075,4020],{"class":73},[67,21077,21078],{"class":69,"line":723},[67,21079,21080],{"class":2058},"    \u002F\u002F有参构造\n",[67,21082,21083,21085,21087,21089,21091],{"class":69,"line":729},[67,21084,20316],{"class":110},[67,21086,854],{"class":73},[67,21088,2006],{"class":84},[67,21090,17486],{"class":7033},[67,21092,829],{"class":73},[67,21094,21095],{"class":69,"line":735},[67,21096,3863],{"class":73},[67,21098,21099,21101,21103],{"class":69,"line":741},[67,21100,17540],{"class":73},[67,21102,85],{"class":84},[67,21104,9613],{"class":73},[67,21106,21107,21109,21111,21114,21116],{"class":69,"line":747},[67,21108,11475],{"class":73},[67,21110,3031],{"class":84},[67,21112,21113],{"class":114}," \"Person的有参构造函数调用\"",[67,21115,3299],{"class":84},[67,21117,10646],{"class":73},[67,21119,21120],{"class":69,"line":753},[67,21121,4020],{"class":73},[67,21123,21124],{"class":69,"line":758},[67,21125,20671],{"class":2058},[67,21127,21128,21130,21132,21134,21136,21138,21140],{"class":69,"line":764},[67,21129,20316],{"class":110},[67,21131,854],{"class":73},[67,21133,8608],{"class":84},[67,21135,17366],{"class":110},[67,21137,12384],{"class":84},[67,21139,19],{"class":7033},[67,21141,829],{"class":73},[67,21143,21144],{"class":69,"line":770},[67,21145,3863],{"class":73},[67,21147,21148,21150,21152],{"class":69,"line":776},[67,21149,17540],{"class":73},[67,21151,85],{"class":84},[67,21153,21154],{"class":73}," p.m_Age;\n",[67,21156,21157,21159,21161,21164,21166],{"class":69,"line":782},[67,21158,11475],{"class":73},[67,21160,3031],{"class":84},[67,21162,21163],{"class":114}," \"Person的拷贝构造函数调用\"",[67,21165,3299],{"class":84},[67,21167,10646],{"class":73},[67,21169,21170],{"class":69,"line":788},[67,21171,4020],{"class":73},[67,21173,21174,21176],{"class":69,"line":793},[67,21175,20349],{"class":110},[67,21177,3809],{"class":73},[67,21179,21180],{"class":69,"line":798},[67,21181,3863],{"class":73},[67,21183,21184,21186,21188,21190,21192],{"class":69,"line":816},[67,21185,11475],{"class":73},[67,21187,3031],{"class":84},[67,21189,20364],{"class":114},[67,21191,3299],{"class":84},[67,21193,10646],{"class":73},[67,21195,21196],{"class":69,"line":832},[67,21197,4020],{"class":73},[67,21199,21200,21202],{"class":69,"line":843},[67,21201,3818],{"class":84},[67,21203,17463],{"class":73},[67,21205,21206],{"class":69,"line":848},[67,21207,5815],{"class":73},[67,21209,21210],{"class":69,"line":863},[67,21211,21024],{"class":2058},[67,21213,21214,21216,21218],{"class":69,"line":876},[67,21215,7181],{"class":84},[67,21217,7405],{"class":110},[67,21219,3809],{"class":73},[67,21221,21222],{"class":69,"line":889},[67,21223,3400],{"class":73},[67,21225,21226,21229,21231,21233,21235],{"class":69,"line":894},[67,21227,21228],{"class":73},"    Person ",[67,21230,8946],{"class":110},[67,21232,854],{"class":73},[67,21234,2689],{"class":77},[67,21236,4544],{"class":73},[67,21238,21239,21241,21243],{"class":69,"line":911},[67,21240,21228],{"class":73},[67,21242,8849],{"class":110},[67,21244,19312],{"class":73},[67,21246,21247,21249,21251,21254,21256,21259,21261],{"class":69,"line":927},[67,21248,3405],{"class":73},[67,21250,3031],{"class":84},[67,21252,21253],{"class":114},"\"P2的年龄为：\"",[67,21255,3031],{"class":84},[67,21257,21258],{"class":73},"p2.m_Age",[67,21260,3031],{"class":84},[67,21262,3053],{"class":73},[67,21264,21265],{"class":69,"line":932},[67,21266,3419],{"class":73},[67,21268,21269],{"class":69,"line":955},[67,21270,21271],{"class":2058},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[67,21273,21274],{"class":69,"line":971},[67,21275,21276],{"class":2058},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[67,21278,21279,21281,21284,21286,21288,21290],{"class":69,"line":1010},[67,21280,7181],{"class":84},[67,21282,21283],{"class":110}," doWork",[67,21285,854],{"class":73},[67,21287,20843],{"class":110},[67,21289,8641],{"class":7033},[67,21291,829],{"class":73},[67,21293,21294],{"class":69,"line":1016},[67,21295,3400],{"class":73},[67,21297,21298,21300,21302,21305,21307],{"class":69,"line":1021},[67,21299,8345],{"class":73},[67,21301,3031],{"class":84},[67,21303,21304],{"class":114}," \"doWork函数调用\"",[67,21306,3299],{"class":84},[67,21308,10646],{"class":73},[67,21310,21311],{"class":69,"line":1034},[67,21312,3419],{"class":73},[67,21314,21315,21317,21319],{"class":69,"line":1053},[67,21316,7181],{"class":84},[67,21318,7474],{"class":110},[67,21320,3809],{"class":73},[67,21322,21323],{"class":69,"line":1070},[67,21324,3400],{"class":73},[67,21326,21327],{"class":69,"line":1083},[67,21328,17110],{"class":73},[67,21330,21331,21334],{"class":69,"line":1088},[67,21332,21333],{"class":110},"    doWork",[67,21335,21336],{"class":73},"(p);\n",[67,21338,21339],{"class":69,"line":1093},[67,21340,3419],{"class":73},[67,21342,21343],{"class":69,"line":1110},[67,21344,21345],{"class":2058},"\u002F\u002F 3.以值方式返回局部对象\n",[67,21347,21348,21350,21353],{"class":69,"line":11603},[67,21349,20843],{"class":110},[67,21351,21352],{"class":110}," doWork2",[67,21354,3809],{"class":73},[67,21356,21357],{"class":69,"line":11612},[67,21358,3400],{"class":73},[67,21360,21361],{"class":69,"line":11617},[67,21362,20833],{"class":73},[67,21364,21365,21367,21369,21371,21373,21375,21377,21379,21381,21383,21385],{"class":69,"line":11623},[67,21366,3405],{"class":73},[67,21368,3031],{"class":84},[67,21370,854],{"class":73},[67,21372,2006],{"class":84},[67,21374,986],{"class":84},[67,21376,2420],{"class":73},[67,21378,2344],{"class":84},[67,21380,8946],{"class":73},[67,21382,3031],{"class":84},[67,21384,3096],{"class":73},[67,21386,21387],{"class":2058},"\u002F\u002F打印p1的地址\n",[67,21389,21390,21392,21395],{"class":69,"line":11644},[67,21391,5910],{"class":84},[67,21393,21394],{"class":73}," p1;",[67,21396,21397],{"class":2058},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[67,21399,21400],{"class":69,"line":11650},[67,21401,3419],{"class":73},[67,21403,21404,21406,21408],{"class":69,"line":11664},[67,21405,7181],{"class":84},[67,21407,7546],{"class":110},[67,21409,3809],{"class":73},[67,21411,21412],{"class":69,"line":11670},[67,21413,3400],{"class":73},[67,21415,21416,21419,21421,21423],{"class":69,"line":11697},[67,21417,21418],{"class":73},"    Person p ",[67,21420,85],{"class":84},[67,21422,21352],{"class":110},[67,21424,7453],{"class":73},[67,21426,21427,21429,21431,21433,21435,21437,21439,21441,21443,21445,21447],{"class":69,"line":11706},[67,21428,3405],{"class":73},[67,21430,3031],{"class":84},[67,21432,854],{"class":73},[67,21434,2006],{"class":84},[67,21436,986],{"class":84},[67,21438,2420],{"class":73},[67,21440,2344],{"class":84},[67,21442,19],{"class":73},[67,21444,3031],{"class":84},[67,21446,3096],{"class":73},[67,21448,21449],{"class":2058},"\u002F\u002F打印p的地址\n",[67,21451,21452],{"class":69,"line":11712},[67,21453,3419],{"class":73},[67,21455,21456],{"class":69,"line":11720},[67,21457,631],{"emptyLinePlaceholder":630},[67,21459,21460],{"class":69,"line":11725},[67,21461,631],{"emptyLinePlaceholder":630},[67,21463,21464,21466,21468],{"class":69,"line":18401},[67,21465,2006],{"class":84},[67,21467,804],{"class":110},[67,21469,3809],{"class":73},[67,21471,21472],{"class":69,"line":18407},[67,21473,3400],{"class":73},[67,21475,21476],{"class":69,"line":18430},[67,21477,21478],{"class":2058},"    \u002F\u002F test01();\n",[67,21480,21481],{"class":69,"line":18436},[67,21482,21483],{"class":2058},"    \u002F\u002F test02();\n",[67,21485,21486,21489],{"class":69,"line":18459},[67,21487,21488],{"class":110},"    test03",[67,21490,7453],{"class":73},[67,21492,21493],{"class":69,"line":18473},[67,21494,21495],{"class":2058},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[67,21497,21498],{"class":69,"line":18493},[67,21499,21500],{"class":2058},"\u002F\u002F 输出结果如下：\n",[67,21502,21503],{"class":69,"line":18499},[67,21504,21505],{"class":2058},"\u002F\u002F Person的默认构造函数调用\n",[67,21507,21508],{"class":69,"line":18510},[67,21509,21510],{"class":2058},"\u002F\u002F 0x7fffffffceec\n",[67,21512,21513],{"class":69,"line":18533},[67,21514,21510],{"class":2058},[67,21516,21517],{"class":69,"line":18555},[67,21518,21519],{"class":2058},"\u002F\u002F Person的析构函数调用\n",[67,21521,21522],{"class":69,"line":18560},[67,21523,631],{"emptyLinePlaceholder":630},[67,21525,21526],{"class":69,"line":18566},[67,21527,21528],{"class":2058},"\u002F\u002F 之前的输出结果如下：\n",[67,21530,21531],{"class":69,"line":18580},[67,21532,21505],{"class":2058},[67,21534,21535],{"class":69,"line":18593},[67,21536,21537],{"class":2058},"\u002F\u002F 地址\n",[67,21539,21540],{"class":69,"line":18598},[67,21541,21542],{"class":2058},"\u002F\u002F Person的拷贝构造函数调用\n",[67,21544,21545],{"class":69,"line":18612},[67,21546,21519],{"class":2058},[67,21548,21549],{"class":69,"line":18617},[67,21550,21537],{"class":2058},[67,21552,21553],{"class":69,"line":18623},[67,21554,21555],{"class":2058},"\u002F\u002F (这两次输出的地址也是不同的) \n",[67,21557,21558],{"class":69,"line":18628},[67,21559,21560],{"class":2058},"\u002F\u002F Person的析构函数调用     \n",[67,21562,21563,21565,21567],{"class":69,"line":18642},[67,21564,5910],{"class":84},[67,21566,5913],{"class":77},[67,21568,3148],{"class":73},[67,21570,21571],{"class":69,"line":18647},[67,21572,3419],{"class":73},[19,21574,21575],{},"简化版理解",[58,21577,21579],{"className":1992,"code":21578,"language":1994,"meta":63,"style":63},"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",[32,21580,21581,21589,21593,21599,21612,21623,21627,21639,21652,21660,21664,21680,21693,21702,21706,21711,21717,21730,21734,21738,21745,21749,21753,21758,21766,21770,21786,21799,21812,21816,21821,21829,21833,21837,21842,21847,21863,21871,21878,21884,21888,21892,21897,21905,21909,21913,21936,21943,21947,21951,21959,21963,21973,21995,21999,22003,22007,22015,22019,22024,22029,22035,22039,22049,22053,22061],{"__ignoreMap":63},[67,21582,21583,21585,21587],{"class":69,"line":70},[67,21584,16492],{"class":84},[67,21586,17366],{"class":110},[67,21588,17369],{"class":73},[67,21590,21591],{"class":69,"line":191},[67,21592,16514],{"class":84},[67,21594,21595,21597],{"class":69,"line":202},[67,21596,20316],{"class":110},[67,21598,12653],{"class":73},[67,21600,21601,21603,21605,21608,21610],{"class":69,"line":641},[67,21602,11475],{"class":73},[67,21604,3031],{"class":84},[67,21606,21607],{"class":114}," \"无参构造函数!\"",[67,21609,3299],{"class":84},[67,21611,10646],{"class":73},[67,21613,21614,21617,21619,21621],{"class":69,"line":655},[67,21615,21616],{"class":73},"        mAge ",[67,21618,85],{"class":84},[67,21620,5913],{"class":77},[67,21622,3148],{"class":73},[67,21624,21625],{"class":69,"line":660},[67,21626,4020],{"class":73},[67,21628,21629,21631,21633,21635,21637],{"class":69,"line":665},[67,21630,20316],{"class":110},[67,21632,854],{"class":73},[67,21634,2006],{"class":84},[67,21636,17486],{"class":7033},[67,21638,14241],{"class":73},[67,21640,21641,21643,21645,21648,21650],{"class":69,"line":677},[67,21642,11475],{"class":73},[67,21644,3031],{"class":84},[67,21646,21647],{"class":114}," \"有参构造函数!\"",[67,21649,3299],{"class":84},[67,21651,10646],{"class":73},[67,21653,21654,21656,21658],{"class":69,"line":683},[67,21655,21616],{"class":73},[67,21657,85],{"class":84},[67,21659,9613],{"class":73},[67,21661,21662],{"class":69,"line":689},[67,21663,4020],{"class":73},[67,21665,21666,21668,21670,21672,21674,21676,21678],{"class":69,"line":694},[67,21667,20316],{"class":110},[67,21669,854],{"class":73},[67,21671,8608],{"class":84},[67,21673,17366],{"class":110},[67,21675,2344],{"class":84},[67,21677,8641],{"class":7033},[67,21679,14241],{"class":73},[67,21681,21682,21684,21686,21689,21691],{"class":69,"line":700},[67,21683,11475],{"class":73},[67,21685,3031],{"class":84},[67,21687,21688],{"class":114}," \"拷贝构造函数!\"",[67,21690,3299],{"class":84},[67,21692,10646],{"class":73},[67,21694,21695,21697,21699],{"class":69,"line":706},[67,21696,21616],{"class":73},[67,21698,85],{"class":84},[67,21700,21701],{"class":73}," p.mAge;\n",[67,21703,21704],{"class":69,"line":712},[67,21705,4020],{"class":73},[67,21707,21708],{"class":69,"line":717},[67,21709,21710],{"class":2058},"    \u002F\u002F析构函数在释放内存之前调用\n",[67,21712,21713,21715],{"class":69,"line":723},[67,21714,20349],{"class":110},[67,21716,12653],{"class":73},[67,21718,21719,21721,21723,21726,21728],{"class":69,"line":729},[67,21720,11475],{"class":73},[67,21722,3031],{"class":84},[67,21724,21725],{"class":114}," \"析构函数!\"",[67,21727,3299],{"class":84},[67,21729,10646],{"class":73},[67,21731,21732],{"class":69,"line":735},[67,21733,4020],{"class":73},[67,21735,21736],{"class":69,"line":741},[67,21737,16514],{"class":84},[67,21739,21740,21742],{"class":69,"line":747},[67,21741,3818],{"class":84},[67,21743,21744],{"class":73}," mAge;\n",[67,21746,21747],{"class":69,"line":753},[67,21748,5815],{"class":73},[67,21750,21751],{"class":69,"line":758},[67,21752,631],{"emptyLinePlaceholder":630},[67,21754,21755],{"class":69,"line":764},[67,21756,21757],{"class":2058},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[67,21759,21760,21762,21764],{"class":69,"line":770},[67,21761,7181],{"class":84},[67,21763,7405],{"class":110},[67,21765,12653],{"class":73},[67,21767,21768],{"class":69,"line":776},[67,21769,631],{"emptyLinePlaceholder":630},[67,21771,21772,21774,21777,21779,21781,21783],{"class":69,"line":782},[67,21773,21228],{"class":73},[67,21775,21776],{"class":110},"man",[67,21778,854],{"class":73},[67,21780,2302],{"class":77},[67,21782,7783],{"class":73},[67,21784,21785],{"class":2058}," \u002F\u002Fp对象已经创建完毕\n",[67,21787,21788,21790,21793,21796],{"class":69,"line":788},[67,21789,21228],{"class":73},[67,21791,21792],{"class":110},"newman",[67,21794,21795],{"class":73},"(man);",[67,21797,21798],{"class":2058}," \u002F\u002F调用拷贝构造函数\n",[67,21800,21801,21804,21806,21809],{"class":69,"line":793},[67,21802,21803],{"class":73},"    Person newman2 ",[67,21805,85],{"class":84},[67,21807,21808],{"class":73}," man;",[67,21810,21811],{"class":2058}," \u002F\u002F拷贝构造\n",[67,21813,21814],{"class":69,"line":798},[67,21815,631],{"emptyLinePlaceholder":630},[67,21817,21818],{"class":69,"line":816},[67,21819,21820],{"class":2058},"    \u002F\u002FPerson newman3;\n",[67,21822,21823,21826],{"class":69,"line":832},[67,21824,21825],{"class":2058},"    \u002F\u002Fnewman3 = man;",[67,21827,21828],{"class":2058}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[67,21830,21831],{"class":69,"line":843},[67,21832,3419],{"class":73},[67,21834,21835],{"class":69,"line":848},[67,21836,631],{"emptyLinePlaceholder":630},[67,21838,21839],{"class":69,"line":863},[67,21840,21841],{"class":2058},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[67,21843,21844],{"class":69,"line":876},[67,21845,21846],{"class":2058},"\u002F\u002F相当于Person p1 = p;\n",[67,21848,21849,21851,21853,21855,21857,21860],{"class":69,"line":889},[67,21850,7181],{"class":84},[67,21852,21283],{"class":110},[67,21854,854],{"class":73},[67,21856,20843],{"class":110},[67,21858,21859],{"class":7033}," p1",[67,21861,21862],{"class":73},") {}\n",[67,21864,21865,21867,21869],{"class":69,"line":894},[67,21866,7181],{"class":84},[67,21868,7474],{"class":110},[67,21870,12653],{"class":73},[67,21872,21873,21875],{"class":69,"line":911},[67,21874,20401],{"class":73},[67,21876,21877],{"class":2058}," \u002F\u002F无参构造函数\n",[67,21879,21880,21882],{"class":69,"line":927},[67,21881,21333],{"class":110},[67,21883,21336],{"class":73},[67,21885,21886],{"class":69,"line":932},[67,21887,3419],{"class":73},[67,21889,21890],{"class":69,"line":955},[67,21891,631],{"emptyLinePlaceholder":630},[67,21893,21894],{"class":69,"line":971},[67,21895,21896],{"class":2058},"\u002F\u002F3. 以值方式返回局部对象\n",[67,21898,21899,21901,21903],{"class":69,"line":1010},[67,21900,20843],{"class":110},[67,21902,21352],{"class":110},[67,21904,3809],{"class":73},[67,21906,21907],{"class":69,"line":1016},[67,21908,3400],{"class":73},[67,21910,21911],{"class":69,"line":1021},[67,21912,20833],{"class":73},[67,21914,21915,21917,21919,21921,21923,21925,21927,21929,21932,21934],{"class":69,"line":1034},[67,21916,8345],{"class":73},[67,21918,3031],{"class":84},[67,21920,3505],{"class":73},[67,21922,2006],{"class":84},[67,21924,986],{"class":84},[67,21926,2420],{"class":73},[67,21928,2344],{"class":84},[67,21930,21931],{"class":73},"p1 ",[67,21933,3031],{"class":84},[67,21935,10646],{"class":73},[67,21937,21938,21940],{"class":69,"line":1053},[67,21939,5910],{"class":84},[67,21941,21942],{"class":73}," p1;\n",[67,21944,21945],{"class":69,"line":1070},[67,21946,3419],{"class":73},[67,21948,21949],{"class":69,"line":1083},[67,21950,631],{"emptyLinePlaceholder":630},[67,21952,21953,21955,21957],{"class":69,"line":1088},[67,21954,7181],{"class":84},[67,21956,7546],{"class":110},[67,21958,3809],{"class":73},[67,21960,21961],{"class":69,"line":1093},[67,21962,3400],{"class":73},[67,21964,21965,21967,21969,21971],{"class":69,"line":1110},[67,21966,21418],{"class":73},[67,21968,85],{"class":84},[67,21970,21352],{"class":110},[67,21972,7453],{"class":73},[67,21974,21975,21977,21979,21981,21983,21985,21987,21989,21991,21993],{"class":69,"line":11603},[67,21976,8345],{"class":73},[67,21978,3031],{"class":84},[67,21980,3505],{"class":73},[67,21982,2006],{"class":84},[67,21984,986],{"class":84},[67,21986,2420],{"class":73},[67,21988,2344],{"class":84},[67,21990,13248],{"class":73},[67,21992,3031],{"class":84},[67,21994,10646],{"class":73},[67,21996,21997],{"class":69,"line":11612},[67,21998,3419],{"class":73},[67,22000,22001],{"class":69,"line":11617},[67,22002,631],{"emptyLinePlaceholder":630},[67,22004,22005],{"class":69,"line":11623},[67,22006,631],{"emptyLinePlaceholder":630},[67,22008,22009,22011,22013],{"class":69,"line":11644},[67,22010,2006],{"class":84},[67,22012,804],{"class":110},[67,22014,12653],{"class":73},[67,22016,22017],{"class":69,"line":11650},[67,22018,631],{"emptyLinePlaceholder":630},[67,22020,22021],{"class":69,"line":11664},[67,22022,22023],{"class":2058},"    \u002F\u002Ftest01();\n",[67,22025,22026],{"class":69,"line":11670},[67,22027,22028],{"class":2058},"    \u002F\u002Ftest02();\n",[67,22030,22031,22033],{"class":69,"line":11697},[67,22032,21488],{"class":110},[67,22034,7453],{"class":73},[67,22036,22037],{"class":69,"line":11706},[67,22038,631],{"emptyLinePlaceholder":630},[67,22040,22041,22043,22045,22047],{"class":69,"line":11712},[67,22042,4136],{"class":110},[67,22044,854],{"class":73},[67,22046,4141],{"class":114},[67,22048,4544],{"class":73},[67,22050,22051],{"class":69,"line":11720},[67,22052,631],{"emptyLinePlaceholder":630},[67,22054,22055,22057,22059],{"class":69,"line":11725},[67,22056,5910],{"class":84},[67,22058,5913],{"class":77},[67,22060,3148],{"class":73},[67,22062,22063],{"class":69,"line":18401},[67,22064,3419],{"class":73},[391,22066,22068],{"id":22067},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22070,22071],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22073,22074],{},"1．默认构造函数(无参，函数体为空)",[19,22076,22077],{},"2．默认析构函数(无参，函数体为空)",[19,22079,22080],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22082,22083],{},"构造函数调用规则如下：",[2994,22085,22086,22089],{},[29,22087,22088],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[29,22090,22091],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[58,22093,22095],{"className":1992,"code":22094,"language":1994,"meta":63,"style":63},"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",[32,22096,22097,22105,22109,22114,22120,22132,22136,22141,22153,22162,22174,22178,22182,22198,22207,22219,22223,22227,22233,22245,22249,22253,22259,22263,22267,22275,22279,22291,22296,22304,22308,22326,22330,22334,22342,22346,22351,22359,22374,22387,22391,22396,22403,22419,22432,22436,22440,22448,22452,22458,22462,22472,22476,22484],{"__ignoreMap":63},[67,22098,22099,22101,22103],{"class":69,"line":70},[67,22100,16492],{"class":84},[67,22102,17366],{"class":110},[67,22104,17369],{"class":73},[67,22106,22107],{"class":69,"line":191},[67,22108,16514],{"class":84},[67,22110,22111],{"class":69,"line":202},[67,22112,22113],{"class":2058},"    \u002F\u002F无参（默认）构造函数\n",[67,22115,22116,22118],{"class":69,"line":641},[67,22117,20316],{"class":110},[67,22119,12653],{"class":73},[67,22121,22122,22124,22126,22128,22130],{"class":69,"line":655},[67,22123,11475],{"class":73},[67,22125,3031],{"class":84},[67,22127,21607],{"class":114},[67,22129,3299],{"class":84},[67,22131,10646],{"class":73},[67,22133,22134],{"class":69,"line":660},[67,22135,4020],{"class":73},[67,22137,22138],{"class":69,"line":665},[67,22139,22140],{"class":2058},"    \u002F\u002F有参构造函数\n",[67,22142,22143,22145,22147,22149,22151],{"class":69,"line":677},[67,22144,20316],{"class":110},[67,22146,854],{"class":73},[67,22148,2006],{"class":84},[67,22150,3253],{"class":7033},[67,22152,14241],{"class":73},[67,22154,22155,22158,22160],{"class":69,"line":683},[67,22156,22157],{"class":73},"        age ",[67,22159,85],{"class":84},[67,22161,3287],{"class":73},[67,22163,22164,22166,22168,22170,22172],{"class":69,"line":689},[67,22165,11475],{"class":73},[67,22167,3031],{"class":84},[67,22169,21647],{"class":114},[67,22171,3299],{"class":84},[67,22173,10646],{"class":73},[67,22175,22176],{"class":69,"line":694},[67,22177,4020],{"class":73},[67,22179,22180],{"class":69,"line":700},[67,22181,20671],{"class":2058},[67,22183,22184,22186,22188,22190,22192,22194,22196],{"class":69,"line":706},[67,22185,20316],{"class":110},[67,22187,854],{"class":73},[67,22189,8608],{"class":84},[67,22191,17366],{"class":110},[67,22193,2344],{"class":84},[67,22195,8641],{"class":7033},[67,22197,14241],{"class":73},[67,22199,22200,22202,22204],{"class":69,"line":712},[67,22201,22157],{"class":73},[67,22203,85],{"class":84},[67,22205,22206],{"class":73}," p.age;\n",[67,22208,22209,22211,22213,22215,22217],{"class":69,"line":717},[67,22210,11475],{"class":73},[67,22212,3031],{"class":84},[67,22214,21688],{"class":114},[67,22216,3299],{"class":84},[67,22218,10646],{"class":73},[67,22220,22221],{"class":69,"line":723},[67,22222,4020],{"class":73},[67,22224,22225],{"class":69,"line":729},[67,22226,20344],{"class":2058},[67,22228,22229,22231],{"class":69,"line":735},[67,22230,20349],{"class":110},[67,22232,12653],{"class":73},[67,22234,22235,22237,22239,22241,22243],{"class":69,"line":741},[67,22236,11475],{"class":73},[67,22238,3031],{"class":84},[67,22240,21725],{"class":114},[67,22242,3299],{"class":84},[67,22244,10646],{"class":73},[67,22246,22247],{"class":69,"line":747},[67,22248,4020],{"class":73},[67,22250,22251],{"class":69,"line":753},[67,22252,16514],{"class":84},[67,22254,22255,22257],{"class":69,"line":758},[67,22256,3818],{"class":84},[67,22258,9613],{"class":73},[67,22260,22261],{"class":69,"line":764},[67,22262,5815],{"class":73},[67,22264,22265],{"class":69,"line":770},[67,22266,631],{"emptyLinePlaceholder":630},[67,22268,22269,22271,22273],{"class":69,"line":776},[67,22270,7181],{"class":84},[67,22272,7405],{"class":110},[67,22274,3809],{"class":73},[67,22276,22277],{"class":69,"line":782},[67,22278,3400],{"class":73},[67,22280,22281,22283,22285,22287,22289],{"class":69,"line":788},[67,22282,21228],{"class":73},[67,22284,8946],{"class":110},[67,22286,854],{"class":73},[67,22288,2639],{"class":77},[67,22290,4544],{"class":73},[67,22292,22293],{"class":69,"line":793},[67,22294,22295],{"class":2058},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[67,22297,22298,22300,22302],{"class":69,"line":798},[67,22299,21228],{"class":73},[67,22301,8849],{"class":110},[67,22303,19312],{"class":73},[67,22305,22306],{"class":69,"line":816},[67,22307,631],{"emptyLinePlaceholder":630},[67,22309,22310,22312,22314,22317,22319,22322,22324],{"class":69,"line":832},[67,22311,8345],{"class":73},[67,22313,3031],{"class":84},[67,22315,22316],{"class":114}," \"p2的年龄为： \"",[67,22318,3299],{"class":84},[67,22320,22321],{"class":73}," p2.age ",[67,22323,3031],{"class":84},[67,22325,10646],{"class":73},[67,22327,22328],{"class":69,"line":843},[67,22329,3419],{"class":73},[67,22331,22332],{"class":69,"line":848},[67,22333,631],{"emptyLinePlaceholder":630},[67,22335,22336,22338,22340],{"class":69,"line":863},[67,22337,7181],{"class":84},[67,22339,7474],{"class":110},[67,22341,3809],{"class":73},[67,22343,22344],{"class":69,"line":876},[67,22345,3400],{"class":73},[67,22347,22348],{"class":69,"line":889},[67,22349,22350],{"class":2058},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[67,22352,22353,22356],{"class":69,"line":894},[67,22354,22355],{"class":73},"    Person p1;",[67,22357,22358],{"class":2058}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[67,22360,22361,22363,22365,22367,22369,22371],{"class":69,"line":911},[67,22362,21228],{"class":73},[67,22364,8849],{"class":110},[67,22366,854],{"class":73},[67,22368,2437],{"class":77},[67,22370,7783],{"class":73},[67,22372,22373],{"class":2058}," \u002F\u002F用户提供的有参\n",[67,22375,22376,22378,22381,22384],{"class":69,"line":927},[67,22377,21228],{"class":73},[67,22379,22380],{"class":110},"p3",[67,22382,22383],{"class":73},"(p2);",[67,22385,22386],{"class":2058}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[67,22388,22389],{"class":69,"line":932},[67,22390,631],{"emptyLinePlaceholder":630},[67,22392,22393],{"class":69,"line":955},[67,22394,22395],{"class":2058},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[67,22397,22398,22401],{"class":69,"line":971},[67,22399,22400],{"class":73},"    Person p4;",[67,22402,22358],{"class":2058},[67,22404,22405,22407,22410,22412,22414,22416],{"class":69,"line":1010},[67,22406,21228],{"class":73},[67,22408,22409],{"class":110},"p5",[67,22411,854],{"class":73},[67,22413,2437],{"class":77},[67,22415,7783],{"class":73},[67,22417,22418],{"class":2058}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[67,22420,22421,22423,22426,22429],{"class":69,"line":1016},[67,22422,21228],{"class":73},[67,22424,22425],{"class":110},"p6",[67,22427,22428],{"class":73},"(p5);",[67,22430,22431],{"class":2058}," \u002F\u002F用户自己提供拷贝构造\n",[67,22433,22434],{"class":69,"line":1021},[67,22435,3419],{"class":73},[67,22437,22438],{"class":69,"line":1034},[67,22439,631],{"emptyLinePlaceholder":630},[67,22441,22442,22444,22446],{"class":69,"line":1053},[67,22443,2006],{"class":84},[67,22445,804],{"class":110},[67,22447,12653],{"class":73},[67,22449,22450],{"class":69,"line":1070},[67,22451,631],{"emptyLinePlaceholder":630},[67,22453,22454,22456],{"class":69,"line":1083},[67,22455,7450],{"class":110},[67,22457,7453],{"class":73},[67,22459,22460],{"class":69,"line":1088},[67,22461,631],{"emptyLinePlaceholder":630},[67,22463,22464,22466,22468,22470],{"class":69,"line":1093},[67,22465,4136],{"class":110},[67,22467,854],{"class":73},[67,22469,4141],{"class":114},[67,22471,4544],{"class":73},[67,22473,22474],{"class":69,"line":1110},[67,22475,631],{"emptyLinePlaceholder":630},[67,22477,22478,22480,22482],{"class":69,"line":11603},[67,22479,5910],{"class":84},[67,22481,5913],{"class":77},[67,22483,3148],{"class":73},[67,22485,22486],{"class":69,"line":11612},[67,22487,3419],{"class":73},[391,22489,22491],{"id":22490},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22493,22494],{},"浅拷贝：简单的赋值拷贝操作",[19,22496,22497],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[58,22499,22501],{"className":1992,"code":22500,"language":1994,"meta":63,"style":63},"#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",[32,22502,22503,22509,22519,22525,22529,22533,22538,22544,22548,22561,22565,22569,22576,22580,22590,22605,22618,22622,22627,22632,22648,22652,22665,22670,22675,22680,22689,22694,22709,22713,22717,22721,22727,22731,22736,22750,22754,22765,22779,22783,22792,22796,22802,22814,22818,22826,22830,22847,22878,22886,22914,22918,22922,22930,22934,22940],{"__ignoreMap":63},[67,22504,22505,22507],{"class":69,"line":70},[67,22506,3784],{"class":84},[67,22508,3787],{"class":114},[67,22510,22511,22513,22515,22517],{"class":69,"line":191},[67,22512,3792],{"class":84},[67,22514,3795],{"class":84},[67,22516,3798],{"class":110},[67,22518,3148],{"class":73},[67,22520,22521,22523],{"class":69,"line":202},[67,22522,16492],{"class":84},[67,22524,16968],{"class":110},[67,22526,22527],{"class":69,"line":641},[67,22528,3400],{"class":73},[67,22530,22531],{"class":69,"line":655},[67,22532,16514],{"class":84},[67,22534,22535],{"class":69,"line":660},[67,22536,22537],{"class":2058},"    \u002F\u002F默认构造函数\n",[67,22539,22540,22542],{"class":69,"line":665},[67,22541,20316],{"class":110},[67,22543,3809],{"class":73},[67,22545,22546],{"class":69,"line":677},[67,22547,3863],{"class":73},[67,22549,22550,22552,22554,22557,22559],{"class":69,"line":683},[67,22551,5273],{"class":73},[67,22553,3031],{"class":84},[67,22555,22556],{"class":114},"\"默认构造函数\"",[67,22558,3031],{"class":84},[67,22560,3053],{"class":73},[67,22562,22563],{"class":69,"line":689},[67,22564,4020],{"class":73},[67,22566,22567],{"class":69,"line":694},[67,22568,22140],{"class":2058},[67,22570,22571,22573],{"class":69,"line":700},[67,22572,20349],{"class":110},[67,22574,22575],{"class":73},"(int age,int height)\n",[67,22577,22578],{"class":69,"line":706},[67,22579,3863],{"class":73},[67,22581,22582,22585,22587],{"class":69,"line":712},[67,22583,22584],{"class":73},"        m_Age",[67,22586,85],{"class":84},[67,22588,22589],{"class":73},"age;\n",[67,22591,22592,22595,22597,22599,22602],{"class":69,"line":717},[67,22593,22594],{"class":73},"        m_Height",[67,22596,13517],{"class":84},[67,22598,4215],{"class":84},[67,22600,22601],{"class":73},"(height);",[67,22603,22604],{"class":2058},"\u002F\u002F放到堆区\n",[67,22606,22607,22609,22611,22614,22616],{"class":69,"line":723},[67,22608,5273],{"class":73},[67,22610,3031],{"class":84},[67,22612,22613],{"class":114},"\"有参构造函数\"",[67,22615,3031],{"class":84},[67,22617,3053],{"class":73},[67,22619,22620],{"class":69,"line":729},[67,22621,4020],{"class":73},[67,22623,22624],{"class":69,"line":735},[67,22625,22626],{"class":2058},"    \u002F\u002F深拷贝解决上述问题\n",[67,22628,22629],{"class":69,"line":741},[67,22630,22631],{"class":2058},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[67,22633,22634,22636,22638,22640,22642,22644,22646],{"class":69,"line":747},[67,22635,20316],{"class":110},[67,22637,854],{"class":73},[67,22639,8608],{"class":84},[67,22641,17366],{"class":110},[67,22643,12384],{"class":84},[67,22645,19],{"class":7033},[67,22647,829],{"class":73},[67,22649,22650],{"class":69,"line":753},[67,22651,3863],{"class":73},[67,22653,22654,22656,22658,22661,22663],{"class":69,"line":758},[67,22655,5273],{"class":73},[67,22657,3031],{"class":84},[67,22659,22660],{"class":114},"\"拷贝构造函数\"",[67,22662,3031],{"class":84},[67,22664,3053],{"class":73},[67,22666,22667],{"class":69,"line":764},[67,22668,22669],{"class":2058},"        \u002F\u002F编译器默认的写如下注释部分\n",[67,22671,22672],{"class":69,"line":770},[67,22673,22674],{"class":2058},"        \u002F\u002Fm_Age=p.m_Age;\n",[67,22676,22677],{"class":69,"line":776},[67,22678,22679],{"class":2058},"        \u002F\u002Fm_Height=p.m_Height;\n",[67,22681,22682,22684,22686],{"class":69,"line":782},[67,22683,22584],{"class":73},[67,22685,85],{"class":84},[67,22687,22688],{"class":73},"p.m_Age;\n",[67,22690,22691],{"class":69,"line":788},[67,22692,22693],{"class":2058},"        \u002F\u002F深拷贝操作\n",[67,22695,22696,22698,22700,22702,22704,22706],{"class":69,"line":793},[67,22697,22594],{"class":73},[67,22699,13517],{"class":84},[67,22701,4215],{"class":84},[67,22703,854],{"class":73},[67,22705,965],{"class":84},[67,22707,22708],{"class":73},"p.m_Height);\n",[67,22710,22711],{"class":69,"line":798},[67,22712,4020],{"class":73},[67,22714,22715],{"class":69,"line":816},[67,22716,631],{"emptyLinePlaceholder":630},[67,22718,22719],{"class":69,"line":832},[67,22720,20344],{"class":2058},[67,22722,22723,22725],{"class":69,"line":843},[67,22724,20349],{"class":110},[67,22726,3809],{"class":73},[67,22728,22729],{"class":69,"line":848},[67,22730,3863],{"class":73},[67,22732,22733],{"class":69,"line":863},[67,22734,22735],{"class":2058},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[67,22737,22738,22740,22743,22745,22748],{"class":69,"line":876},[67,22739,4329],{"class":84},[67,22741,22742],{"class":73},"(m_Height ",[67,22744,903],{"class":84},[67,22746,22747],{"class":77}," NULL",[67,22749,829],{"class":73},[67,22751,22752],{"class":69,"line":889},[67,22753,4342],{"class":73},[67,22755,22756,22759,22762],{"class":69,"line":894},[67,22757,22758],{"class":84},"            delete",[67,22760,22761],{"class":73}," m_Height;",[67,22763,22764],{"class":2058}," \u002F\u002F释放堆区内存\n",[67,22766,22767,22770,22772,22774,22776],{"class":69,"line":911},[67,22768,22769],{"class":73},"            m_Height",[67,22771,85],{"class":84},[67,22773,4225],{"class":77},[67,22775,2055],{"class":73},[67,22777,22778],{"class":2058}," \u002F\u002F防止野指针\n",[67,22780,22781],{"class":69,"line":927},[67,22782,4361],{"class":73},[67,22784,22785,22787,22789],{"class":69,"line":932},[67,22786,5273],{"class":73},[67,22788,3031],{"class":84},[67,22790,22791],{"class":114},"\"Person的析构函数调用\"\n",[67,22793,22794],{"class":69,"line":955},[67,22795,4020],{"class":73},[67,22797,22798,22800],{"class":69,"line":971},[67,22799,3818],{"class":84},[67,22801,17463],{"class":73},[67,22803,22804,22806,22808,22811],{"class":69,"line":1010},[67,22805,3818],{"class":84},[67,22807,986],{"class":84},[67,22809,22810],{"class":73},"m_Height;",[67,22812,22813],{"class":2058}," \u002F\u002F定义一个指针，指向身高\n",[67,22815,22816],{"class":69,"line":1016},[67,22817,5815],{"class":73},[67,22819,22820,22822,22824],{"class":69,"line":1021},[67,22821,7181],{"class":84},[67,22823,7405],{"class":110},[67,22825,3809],{"class":73},[67,22827,22828],{"class":69,"line":1034},[67,22829,3400],{"class":73},[67,22831,22832,22834,22836,22838,22840,22842,22845],{"class":69,"line":1053},[67,22833,21228],{"class":73},[67,22835,8946],{"class":110},[67,22837,854],{"class":73},[67,22839,2639],{"class":77},[67,22841,2369],{"class":73},[67,22843,22844],{"class":77},"160",[67,22846,4544],{"class":73},[67,22848,22849,22851,22853,22856,22858,22861,22863,22866,22868,22871,22873,22875],{"class":69,"line":1070},[67,22850,3405],{"class":73},[67,22852,3031],{"class":84},[67,22854,22855],{"class":114},"\"p1的年龄为:\"",[67,22857,3031],{"class":84},[67,22859,22860],{"class":73},"p1.m_Age",[67,22862,3031],{"class":84},[67,22864,22865],{"class":114},"\"身高为：\"",[67,22867,8236],{"class":84},[67,22869,22870],{"class":73},"p1.m_Height",[67,22872,3031],{"class":84},[67,22874,3096],{"class":73},[67,22876,22877],{"class":2058},"  \u002F\u002F18\n",[67,22879,22880,22882,22884],{"class":69,"line":1083},[67,22881,21228],{"class":73},[67,22883,8849],{"class":110},[67,22885,19312],{"class":73},[67,22887,22888,22890,22892,22895,22897,22899,22901,22903,22905,22908,22910,22912],{"class":69,"line":1088},[67,22889,3405],{"class":73},[67,22891,3031],{"class":84},[67,22893,22894],{"class":114},"\"p2的年龄为：\"",[67,22896,3031],{"class":84},[67,22898,21258],{"class":73},[67,22900,3031],{"class":84},[67,22902,22865],{"class":114},[67,22904,8236],{"class":84},[67,22906,22907],{"class":73},"p2.m_Height",[67,22909,3031],{"class":84},[67,22911,3096],{"class":73},[67,22913,22877],{"class":2058},[67,22915,22916],{"class":69,"line":1093},[67,22917,15009],{"class":73},[67,22919,22920],{"class":69,"line":1110},[67,22921,3419],{"class":73},[67,22923,22924,22926,22928],{"class":69,"line":11603},[67,22925,2006],{"class":84},[67,22927,804],{"class":110},[67,22929,3809],{"class":73},[67,22931,22932],{"class":69,"line":11612},[67,22933,3400],{"class":73},[67,22935,22936,22938],{"class":69,"line":11617},[67,22937,7450],{"class":110},[67,22939,7453],{"class":73},[67,22941,22942],{"class":69,"line":11623},[67,22943,3419],{"class":73},[19,22945,22946],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22948,22949],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22951,22952],{},[3317,22953],{"alt":63,"src":22954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22956,22957],{},"浅拷贝问题要使用深拷贝来解决",[19,22959,22960],{},[3317,22961],{"alt":63,"src":22962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22964,22965],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[391,22967,22969],{"id":22968},"_826初始化列表","8.2.6初始化列表",[19,22971,22972],{},"作用：初始化属性",[19,22974,7000],{},[58,22976,22979],{"className":22977,"code":22978,"language":603},[601],"构造函数():属性1(值1),属性2(值2).....{}\n",[32,22980,22978],{"__ignoreMap":63},[19,22982,22983],{},"例子",[58,22985,22987],{"className":1992,"code":22986,"language":1994,"meta":63,"style":63},"#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",[32,22988,22989,22995,23005,23011,23015,23020,23024,23029,23034,23039,23044,23049,23054,23058,23063,23068,23111,23120,23138,23156,23174,23178,23182,23189,23196,23203,23207,23211,23219,23223,23227,23247,23256,23260,23264,23274,23278,23286],{"__ignoreMap":63},[67,22990,22991,22993],{"class":69,"line":70},[67,22992,3784],{"class":84},[67,22994,3787],{"class":114},[67,22996,22997,22999,23001,23003],{"class":69,"line":191},[67,22998,3792],{"class":84},[67,23000,3795],{"class":84},[67,23002,3798],{"class":110},[67,23004,3148],{"class":73},[67,23006,23007,23009],{"class":69,"line":202},[67,23008,16492],{"class":84},[67,23010,16968],{"class":110},[67,23012,23013],{"class":69,"line":641},[67,23014,3400],{"class":73},[67,23016,23017],{"class":69,"line":655},[67,23018,23019],{"class":84},"    public:\n",[67,23021,23022],{"class":69,"line":660},[67,23023,631],{"emptyLinePlaceholder":630},[67,23025,23026],{"class":69,"line":665},[67,23027,23028],{"class":2058},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[67,23030,23031],{"class":69,"line":677},[67,23032,23033],{"class":2058},"    \u002F\u002FPerson(int a, int b, int c) {\n",[67,23035,23036],{"class":69,"line":683},[67,23037,23038],{"class":2058},"    \u002F\u002F  m_A = a;\n",[67,23040,23041],{"class":69,"line":689},[67,23042,23043],{"class":2058},"    \u002F\u002F  m_B = b;\n",[67,23045,23046],{"class":69,"line":694},[67,23047,23048],{"class":2058},"    \u002F\u002F  m_C = c;\n",[67,23050,23051],{"class":69,"line":700},[67,23052,23053],{"class":2058},"    \u002F\u002F}\n",[67,23055,23056],{"class":69,"line":706},[67,23057,631],{"emptyLinePlaceholder":630},[67,23059,23060],{"class":69,"line":712},[67,23061,23062],{"class":2058},"    \u002F\u002F初始化列表方式初始化\n",[67,23064,23065],{"class":69,"line":717},[67,23066,23067],{"class":2058},"    \u002F\u002F使用有参构造函数\n",[67,23069,23070,23072,23074,23076,23078,23080,23082,23084,23086,23088,23090,23093,23096,23099,23102,23105,23108],{"class":69,"line":723},[67,23071,20316],{"class":110},[67,23073,854],{"class":73},[67,23075,2006],{"class":84},[67,23077,3253],{"class":7033},[67,23079,1868],{"class":73},[67,23081,2006],{"class":84},[67,23083,4658],{"class":7033},[67,23085,1868],{"class":73},[67,23087,2006],{"class":84},[67,23089,4674],{"class":7033},[67,23091,23092],{"class":73},") :",[67,23094,23095],{"class":110},"m_A",[67,23097,23098],{"class":73},"(a), ",[67,23100,23101],{"class":110},"m_B",[67,23103,23104],{"class":73},"(b), ",[67,23106,23107],{"class":110},"m_C",[67,23109,23110],{"class":73},"(c) {}\n",[67,23112,23113,23115,23118],{"class":69,"line":729},[67,23114,16707],{"class":84},[67,23116,23117],{"class":110}," PrintPerson",[67,23119,12653],{"class":73},[67,23121,23122,23124,23126,23129,23131,23134,23136],{"class":69,"line":735},[67,23123,11475],{"class":73},[67,23125,3031],{"class":84},[67,23127,23128],{"class":114}," \"mA:\"",[67,23130,3299],{"class":84},[67,23132,23133],{"class":73}," m_A ",[67,23135,3031],{"class":84},[67,23137,10646],{"class":73},[67,23139,23140,23142,23144,23147,23149,23152,23154],{"class":69,"line":741},[67,23141,11475],{"class":73},[67,23143,3031],{"class":84},[67,23145,23146],{"class":114}," \"mB:\"",[67,23148,3299],{"class":84},[67,23150,23151],{"class":73}," m_B ",[67,23153,3031],{"class":84},[67,23155,10646],{"class":73},[67,23157,23158,23160,23162,23165,23167,23170,23172],{"class":69,"line":747},[67,23159,11475],{"class":73},[67,23161,3031],{"class":84},[67,23163,23164],{"class":114}," \"mC:\"",[67,23166,3299],{"class":84},[67,23168,23169],{"class":73}," m_C ",[67,23171,3031],{"class":84},[67,23173,10646],{"class":73},[67,23175,23176],{"class":69,"line":753},[67,23177,4020],{"class":73},[67,23179,23180],{"class":69,"line":758},[67,23181,17019],{"class":84},[67,23183,23184,23186],{"class":69,"line":764},[67,23185,3818],{"class":84},[67,23187,23188],{"class":73}," m_A;\n",[67,23190,23191,23193],{"class":69,"line":770},[67,23192,3818],{"class":84},[67,23194,23195],{"class":73}," m_B;\n",[67,23197,23198,23200],{"class":69,"line":776},[67,23199,3818],{"class":84},[67,23201,23202],{"class":73}," m_C;\n",[67,23204,23205],{"class":69,"line":782},[67,23206,5815],{"class":73},[67,23208,23209],{"class":69,"line":788},[67,23210,631],{"emptyLinePlaceholder":630},[67,23212,23213,23215,23217],{"class":69,"line":793},[67,23214,2006],{"class":84},[67,23216,804],{"class":110},[67,23218,7795],{"class":73},[67,23220,23221],{"class":69,"line":798},[67,23222,3400],{"class":73},[67,23224,23225],{"class":69,"line":816},[67,23226,631],{"emptyLinePlaceholder":630},[67,23228,23229,23231,23233,23235,23237,23239,23241,23243,23245],{"class":69,"line":832},[67,23230,21228],{"class":73},[67,23232,19],{"class":110},[67,23234,854],{"class":73},[67,23236,2209],{"class":77},[67,23238,1868],{"class":73},[67,23240,2077],{"class":77},[67,23242,1868],{"class":73},[67,23244,2071],{"class":77},[67,23246,4544],{"class":73},[67,23248,23249,23251,23254],{"class":69,"line":843},[67,23250,17663],{"class":73},[67,23252,23253],{"class":110},"PrintPerson",[67,23255,7453],{"class":73},[67,23257,23258],{"class":69,"line":848},[67,23259,631],{"emptyLinePlaceholder":630},[67,23261,23262],{"class":69,"line":863},[67,23263,631],{"emptyLinePlaceholder":630},[67,23265,23266,23268,23270,23272],{"class":69,"line":876},[67,23267,4136],{"class":110},[67,23269,854],{"class":73},[67,23271,4141],{"class":114},[67,23273,4544],{"class":73},[67,23275,23276],{"class":69,"line":889},[67,23277,631],{"emptyLinePlaceholder":630},[67,23279,23280,23282,23284],{"class":69,"line":894},[67,23281,5910],{"class":84},[67,23283,5913],{"class":77},[67,23285,3148],{"class":73},[67,23287,23288],{"class":69,"line":911},[67,23289,3419],{"class":73},[19,23291,23292,23293,23296,23297],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2144,23294,23295],{},"参数名就是定义的对象属性","，",[2144,23298,23299],{},"属性后面的值为有参构造函数的形参",[58,23301,23303],{"className":1992,"code":23302,"language":1994,"meta":63,"style":63},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[32,23304,23305],{"__ignoreMap":63},[67,23306,23307,23309,23311,23313,23316,23318,23321,23323,23326,23328,23331,23333,23336,23338],{"class":69,"line":70},[67,23308,20843],{"class":110},[67,23310,854],{"class":73},[67,23312,2006],{"class":84},[67,23314,23315],{"class":73}," a.",[67,23317,2006],{"class":84},[67,23319,23320],{"class":73}," b,",[67,23322,2006],{"class":84},[67,23324,23325],{"class":73}," b):",[67,23327,23095],{"class":110},[67,23329,23330],{"class":73},"(a),",[67,23332,23101],{"class":110},[67,23334,23335],{"class":73},"(c),",[67,23337,23107],{"class":110},[67,23339,23340],{"class":73},"(b) {}\n",[391,23342,23344],{"id":23343},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23346,23347],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23349,16431],{},[58,23351,23353],{"className":1992,"code":23352,"language":1994,"meta":63,"style":63},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[32,23354,23355,23360,23365,23369,23374,23378],{"__ignoreMap":63},[67,23356,23357],{"class":69,"line":70},[67,23358,23359],{"class":73},"A{};\n",[67,23361,23362],{"class":69,"line":191},[67,23363,23364],{"class":73},"B\n",[67,23366,23367],{"class":69,"line":202},[67,23368,3400],{"class":73},[67,23370,23371],{"class":69,"line":641},[67,23372,23373],{"class":73},"    A a;\n",[67,23375,23376],{"class":69,"line":655},[67,23377,3419],{"class":73},[67,23379,23380],{"class":69,"line":660},[67,23381,23382],{"class":2058},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23384,23385],{},"案例",[58,23387,23389],{"className":1992,"code":23388,"language":1994,"meta":63,"style":63},"\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",[32,23390,23391,23396,23403,23407,23412,23417,23431,23435,23445,23456,23460,23467,23471,23484,23488,23493,23498,23502,23508,23512,23516,23520,23551,23555,23566,23570,23576,23580,23593,23597,23601,23605,23610,23615,23619,23627,23631,23648,23667,23671,23679,23683,23689],{"__ignoreMap":63},[67,23392,23393],{"class":69,"line":70},[67,23394,23395],{"class":2058},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[67,23397,23398,23400],{"class":69,"line":191},[67,23399,16492],{"class":84},[67,23401,23402],{"class":110}," Phone\n",[67,23404,23405],{"class":69,"line":202},[67,23406,3400],{"class":73},[67,23408,23409],{"class":69,"line":641},[67,23410,23411],{"class":73},"public：\n",[67,23413,23414],{"class":69,"line":655},[67,23415,23416],{"class":2058},"    \u002F\u002F 赋值(构造函数)\n",[67,23418,23419,23422,23424,23426,23429],{"class":69,"line":660},[67,23420,23421],{"class":110},"    Phone",[67,23423,854],{"class":73},[67,23425,16715],{"class":110},[67,23427,23428],{"class":7033}," pName",[67,23430,829],{"class":73},[67,23432,23433],{"class":69,"line":665},[67,23434,3863],{"class":73},[67,23436,23437,23440,23442],{"class":69,"line":677},[67,23438,23439],{"class":73},"        m_pName",[67,23441,85],{"class":84},[67,23443,23444],{"class":73},"pName;\n",[67,23446,23447,23449,23451,23454],{"class":69,"line":683},[67,23448,5273],{"class":73},[67,23450,3031],{"class":84},[67,23452,23453],{"class":114},"\"Phone的构造函数调用\"",[67,23455,3148],{"class":73},[67,23457,23458],{"class":69,"line":689},[67,23459,4020],{"class":73},[67,23461,23462,23465],{"class":69,"line":694},[67,23463,23464],{"class":110},"    ~Phone",[67,23466,3809],{"class":73},[67,23468,23469],{"class":69,"line":700},[67,23470,3863],{"class":73},[67,23472,23473,23475,23477,23480,23482],{"class":69,"line":706},[67,23474,5273],{"class":73},[67,23476,3031],{"class":84},[67,23478,23479],{"class":114},"\"Phone析构函数调用\"",[67,23481,3031],{"class":84},[67,23483,3053],{"class":73},[67,23485,23486],{"class":69,"line":712},[67,23487,4020],{"class":73},[67,23489,23490],{"class":69,"line":717},[67,23491,23492],{"class":2058},"    \u002F\u002F\n",[67,23494,23495],{"class":69,"line":723},[67,23496,23497],{"class":73},"    string m_PName;\n",[67,23499,23500],{"class":69,"line":729},[67,23501,5815],{"class":73},[67,23503,23504,23506],{"class":69,"line":735},[67,23505,16492],{"class":84},[67,23507,16968],{"class":110},[67,23509,23510],{"class":69,"line":741},[67,23511,3400],{"class":73},[67,23513,23514],{"class":69,"line":747},[67,23515,16514],{"class":84},[67,23517,23518],{"class":69,"line":753},[67,23519,18791],{"class":2058},[67,23521,23522,23524,23526,23528,23530,23532,23534,23537,23540,23542,23545,23548],{"class":69,"line":758},[67,23523,20316],{"class":110},[67,23525,854],{"class":73},[67,23527,16715],{"class":110},[67,23529,266],{"class":7033},[67,23531,2369],{"class":73},[67,23533,16715],{"class":110},[67,23535,23536],{"class":7033}," pname",[67,23538,23539],{"class":73},"):",[67,23541,16807],{"class":110},[67,23543,23544],{"class":73},"(name),m_phone.",[67,23546,23547],{"class":110},"m_PName",[67,23549,23550],{"class":73},"(pname) \n",[67,23552,23553],{"class":69,"line":764},[67,23554,3863],{"class":73},[67,23556,23557,23559,23561,23564],{"class":69,"line":770},[67,23558,5273],{"class":73},[67,23560,3031],{"class":84},[67,23562,23563],{"class":114},"\"Person的构造函数调用\"",[67,23565,3148],{"class":73},[67,23567,23568],{"class":69,"line":776},[67,23569,4020],{"class":73},[67,23571,23572,23574],{"class":69,"line":782},[67,23573,20349],{"class":110},[67,23575,3809],{"class":73},[67,23577,23578],{"class":69,"line":788},[67,23579,3863],{"class":73},[67,23581,23582,23584,23586,23589,23591],{"class":69,"line":793},[67,23583,5273],{"class":73},[67,23585,3031],{"class":84},[67,23587,23588],{"class":114},"\"Person析构函数调用\"",[67,23590,3031],{"class":84},[67,23592,3053],{"class":73},[67,23594,23595],{"class":69,"line":798},[67,23596,4020],{"class":73},[67,23598,23599],{"class":69,"line":816},[67,23600,9596],{"class":2058},[67,23602,23603],{"class":69,"line":832},[67,23604,16690],{"class":73},[67,23606,23607],{"class":69,"line":843},[67,23608,23609],{"class":2058},"    \u002F\u002F手机\n",[67,23611,23612],{"class":69,"line":848},[67,23613,23614],{"class":73},"    Phone m_Phone;\n",[67,23616,23617],{"class":69,"line":863},[67,23618,5815],{"class":73},[67,23620,23621,23623,23625],{"class":69,"line":876},[67,23622,7181],{"class":84},[67,23624,7405],{"class":110},[67,23626,3809],{"class":73},[67,23628,23629],{"class":69,"line":889},[67,23630,3400],{"class":73},[67,23632,23633,23635,23637,23639,23641,23643,23646],{"class":69,"line":894},[67,23634,21228],{"class":73},[67,23636,19],{"class":110},[67,23638,854],{"class":73},[67,23640,9732],{"class":114},[67,23642,2369],{"class":73},[67,23644,23645],{"class":114},"\"安卓\"",[67,23647,4544],{"class":73},[67,23649,23650,23652,23654,23657,23659,23662,23664],{"class":69,"line":911},[67,23651,3405],{"class":73},[67,23653,3031],{"class":84},[67,23655,23656],{"class":73},"p.Name",[67,23658,3031],{"class":84},[67,23660,23661],{"class":114},"\"拿着：\"",[67,23663,3031],{"class":84},[67,23665,23666],{"class":73},"p.m_phone.m_PName;\n",[67,23668,23669],{"class":69,"line":927},[67,23670,3419],{"class":73},[67,23672,23673,23675,23677],{"class":69,"line":932},[67,23674,2006],{"class":84},[67,23676,804],{"class":110},[67,23678,3809],{"class":73},[67,23680,23681],{"class":69,"line":955},[67,23682,3400],{"class":73},[67,23684,23685,23687],{"class":69,"line":971},[67,23686,7450],{"class":110},[67,23688,7453],{"class":73},[67,23690,23691],{"class":69,"line":1010},[67,23692,3419],{"class":73},[19,23694,10831],{},[58,23696,23698],{"className":1992,"code":23697,"language":1994,"meta":63,"style":63},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[32,23699,23700,23705],{"__ignoreMap":63},[67,23701,23702],{"class":69,"line":70},[67,23703,23704],{"class":2058},"    \u002F\u002F不需要写这个：\n",[67,23706,23707],{"class":69,"line":191},[67,23708,23709],{"class":2058},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23711,23712],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[58,23714,23716],{"className":1992,"code":23715,"language":1994,"meta":63,"style":63},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[32,23717,23718],{"__ignoreMap":63},[67,23719,23720,23722,23725,23727,23730,23733],{"class":69,"line":70},[67,23721,20843],{"class":110},[67,23723,23724],{"class":73},"(string name.string pname):",[67,23726,16807],{"class":110},[67,23728,23729],{"class":73},"(name),",[67,23731,23732],{"class":110},"m_phone",[67,23734,23735],{"class":73},"(pname) {}\n",[19,23737,23738,23739,85,23742],{},"采用的是隐式转换法，实际为如下：\n",[32,23740,23741],{},"m_phone(pname)",[32,23743,23744],{},"Phone m_phone=pname",[19,23746,23747,23750],{},[2144,23748,23749],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23752,23753],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[391,23755,23757],{"id":23756},"_828静态对象","8.2.8静态对象",[19,23759,23760],{},"静态对象在成员对象前static，称为静态对象",[19,23762,23763],{},"静态对象分为两类：",[26,23765,23766],{},[29,23767,23768],{},"静态成员变量",[2994,23770,23771,23774,23777],{},[29,23772,23773],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[29,23775,23776],{},"②在编译阶段分配内存",[29,23778,23779],{},"③类内声明，类外初始化",[26,23781,23782],{"start":191},[29,23783,23784],{},"静态成员函数",[2994,23786,23787,23790],{},[29,23788,23789],{},"①所有对象共享同一个函数",[29,23791,23792],{},"②静态成员函数只能访问静态成员变量",[23794,23795,23797],"h4",{"id":23796},"_8281静态成员变量","8.2.8.1静态成员变量",[58,23799,23801],{"className":1992,"code":23800,"language":1994,"meta":63,"style":63},"#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",[32,23802,23803,23809,23819,23825,23829,23833,23838,23843,23848,23856,23860,23864,23868,23876,23880,23884,23889,23902,23906,23914,23918,23924],{"__ignoreMap":63},[67,23804,23805,23807],{"class":69,"line":70},[67,23806,3784],{"class":84},[67,23808,3787],{"class":114},[67,23810,23811,23813,23815,23817],{"class":69,"line":191},[67,23812,3792],{"class":84},[67,23814,3795],{"class":84},[67,23816,3798],{"class":110},[67,23818,3148],{"class":73},[67,23820,23821,23823],{"class":69,"line":202},[67,23822,16492],{"class":84},[67,23824,16968],{"class":110},[67,23826,23827],{"class":69,"line":641},[67,23828,3400],{"class":73},[67,23830,23831],{"class":69,"line":655},[67,23832,16514],{"class":84},[67,23834,23835],{"class":69,"line":660},[67,23836,23837],{"class":2058},"    \u002F\u002F非静态成员变量\n",[67,23839,23840],{"class":69,"line":665},[67,23841,23842],{"class":2058},"    \u002F\u002F int m_A;\n",[67,23844,23845],{"class":69,"line":677},[67,23846,23847],{"class":2058},"    \u002F\u002F定义静态成员变量\n",[67,23849,23850,23852,23854],{"class":69,"line":683},[67,23851,12820],{"class":84},[67,23853,4215],{"class":84},[67,23855,23188],{"class":73},[67,23857,23858],{"class":69,"line":689},[67,23859,631],{"emptyLinePlaceholder":630},[67,23861,23862],{"class":69,"line":694},[67,23863,631],{"emptyLinePlaceholder":630},[67,23865,23866],{"class":69,"line":700},[67,23867,5815],{"class":73},[67,23869,23870,23872,23874],{"class":69,"line":706},[67,23871,7181],{"class":84},[67,23873,7405],{"class":110},[67,23875,3809],{"class":73},[67,23877,23878],{"class":69,"line":712},[67,23879,3400],{"class":73},[67,23881,23882],{"class":69,"line":717},[67,23883,17110],{"class":73},[67,23885,23886],{"class":69,"line":723},[67,23887,23888],{"class":2058},"    \u002F\u002F输出类成员变量这块内存\n",[67,23890,23891,23893,23895,23898,23900],{"class":69,"line":729},[67,23892,3405],{"class":73},[67,23894,3031],{"class":84},[67,23896,23897],{"class":73},"p.m_A",[67,23899,3031],{"class":84},[67,23901,3053],{"class":73},[67,23903,23904],{"class":69,"line":735},[67,23905,3419],{"class":73},[67,23907,23908,23910,23912],{"class":69,"line":741},[67,23909,2006],{"class":84},[67,23911,804],{"class":110},[67,23913,3809],{"class":73},[67,23915,23916],{"class":69,"line":747},[67,23917,3400],{"class":73},[67,23919,23920,23922],{"class":69,"line":753},[67,23921,7450],{"class":110},[67,23923,3809],{"class":73},[67,23925,23926],{"class":69,"line":758},[67,23927,3419],{"class":73},[19,23929,23930],{},"此时输出是报错的：无法解析外部命令",[19,23932,23933],{},"解决这一问题：必须用到类内声明，类外初始化操作",[58,23935,23937],{"className":1992,"code":23936,"language":1994,"meta":63,"style":63},"#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",[32,23938,23939,23945,23955,23961,23965,23969,23974,23982,23986,23991,24006,24014,24018,24022,24027,24032,24044,24049,24060,24065,24070,24083,24087,24095,24099,24105],{"__ignoreMap":63},[67,23940,23941,23943],{"class":69,"line":70},[67,23942,3784],{"class":84},[67,23944,3787],{"class":114},[67,23946,23947,23949,23951,23953],{"class":69,"line":191},[67,23948,3792],{"class":84},[67,23950,3795],{"class":84},[67,23952,3798],{"class":110},[67,23954,3148],{"class":73},[67,23956,23957,23959],{"class":69,"line":202},[67,23958,16492],{"class":84},[67,23960,16968],{"class":110},[67,23962,23963],{"class":69,"line":641},[67,23964,3400],{"class":73},[67,23966,23967],{"class":69,"line":655},[67,23968,16514],{"class":84},[67,23970,23971],{"class":69,"line":660},[67,23972,23973],{"class":2058},"    \u002F\u002F类内声明\n",[67,23975,23976,23978,23980],{"class":69,"line":665},[67,23977,12820],{"class":84},[67,23979,4215],{"class":84},[67,23981,23188],{"class":73},[67,23983,23984],{"class":69,"line":677},[67,23985,5815],{"class":73},[67,23987,23988],{"class":69,"line":683},[67,23989,23990],{"class":2058},"\u002F\u002F类外初始化\n",[67,23992,23993,23995,23997,24000,24002,24004],{"class":69,"line":689},[67,23994,2006],{"class":84},[67,23996,17366],{"class":110},[67,23998,23999],{"class":73},"::m_A",[67,24001,85],{"class":84},[67,24003,2437],{"class":77},[67,24005,3148],{"class":73},[67,24007,24008,24010,24012],{"class":69,"line":694},[67,24009,7181],{"class":84},[67,24011,7405],{"class":110},[67,24013,3809],{"class":73},[67,24015,24016],{"class":69,"line":700},[67,24017,3400],{"class":73},[67,24019,24020],{"class":69,"line":706},[67,24021,17110],{"class":73},[67,24023,24024],{"class":69,"line":712},[67,24025,24026],{"class":2058},"    \u002F\u002F访问变量的原内存空间\n",[67,24028,24029],{"class":69,"line":717},[67,24030,24031],{"class":2058},"    \u002F\u002F100\n",[67,24033,24034,24036,24038,24040,24042],{"class":69,"line":723},[67,24035,3405],{"class":73},[67,24037,3031],{"class":84},[67,24039,23897],{"class":73},[67,24041,3031],{"class":84},[67,24043,3053],{"class":73},[67,24045,24046],{"class":69,"line":729},[67,24047,24048],{"class":73},"    Person p2;\n",[67,24050,24051,24054,24056,24058],{"class":69,"line":735},[67,24052,24053],{"class":73},"    p2.m_A",[67,24055,85],{"class":84},[67,24057,3565],{"class":77},[67,24059,3148],{"class":73},[67,24061,24062],{"class":69,"line":741},[67,24063,24064],{"class":2058},"    \u002F\u002F继续访问这片空间\n",[67,24066,24067],{"class":69,"line":747},[67,24068,24069],{"class":2058},"    \u002F\u002F200\n",[67,24071,24072,24074,24076,24079,24081],{"class":69,"line":753},[67,24073,3405],{"class":73},[67,24075,3031],{"class":84},[67,24077,24078],{"class":73},"p2.m_A",[67,24080,3031],{"class":84},[67,24082,3053],{"class":73},[67,24084,24085],{"class":69,"line":758},[67,24086,3419],{"class":73},[67,24088,24089,24091,24093],{"class":69,"line":764},[67,24090,2006],{"class":84},[67,24092,804],{"class":110},[67,24094,3809],{"class":73},[67,24096,24097],{"class":69,"line":770},[67,24098,3400],{"class":73},[67,24100,24101,24103],{"class":69,"line":776},[67,24102,7450],{"class":110},[67,24104,7453],{"class":73},[67,24106,24107],{"class":69,"line":782},[67,24108,3419],{"class":73},[19,24110,24111],{},[2144,24112,24113],{},"静态变量的访问",[58,24115,24117],{"className":1992,"code":24116,"language":1994,"meta":63,"style":63},"#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",[32,24118,24119,24125,24135,24141,24145,24149,24153,24161,24165,24170,24178,24182,24186,24200,24215,24223,24227,24232,24237,24242,24247,24259,24264,24269,24283,24300,24304,24312,24316,24322],{"__ignoreMap":63},[67,24120,24121,24123],{"class":69,"line":70},[67,24122,3784],{"class":84},[67,24124,3787],{"class":114},[67,24126,24127,24129,24131,24133],{"class":69,"line":191},[67,24128,3792],{"class":84},[67,24130,3795],{"class":84},[67,24132,3798],{"class":110},[67,24134,3148],{"class":73},[67,24136,24137,24139],{"class":69,"line":202},[67,24138,16492],{"class":84},[67,24140,16968],{"class":110},[67,24142,24143],{"class":69,"line":641},[67,24144,3400],{"class":73},[67,24146,24147],{"class":69,"line":655},[67,24148,16514],{"class":84},[67,24150,24151],{"class":69,"line":660},[67,24152,23973],{"class":2058},[67,24154,24155,24157,24159],{"class":69,"line":665},[67,24156,12820],{"class":84},[67,24158,4215],{"class":84},[67,24160,23188],{"class":73},[67,24162,24163],{"class":69,"line":677},[67,24164,17019],{"class":84},[67,24166,24167],{"class":69,"line":683},[67,24168,24169],{"class":2058},"    \u002F\u002F静态成员变量也是有访问权限的\n",[67,24171,24172,24174,24176],{"class":69,"line":689},[67,24173,12820],{"class":84},[67,24175,4215],{"class":84},[67,24177,23195],{"class":73},[67,24179,24180],{"class":69,"line":694},[67,24181,5815],{"class":73},[67,24183,24184],{"class":69,"line":700},[67,24185,23990],{"class":2058},[67,24187,24188,24190,24192,24194,24196,24198],{"class":69,"line":706},[67,24189,2006],{"class":84},[67,24191,17366],{"class":110},[67,24193,23999],{"class":73},[67,24195,85],{"class":84},[67,24197,2437],{"class":77},[67,24199,3148],{"class":73},[67,24201,24202,24204,24206,24209,24211,24213],{"class":69,"line":712},[67,24203,2006],{"class":84},[67,24205,17366],{"class":110},[67,24207,24208],{"class":73},"::m_B",[67,24210,85],{"class":84},[67,24212,2689],{"class":77},[67,24214,3148],{"class":73},[67,24216,24217,24219,24221],{"class":69,"line":717},[67,24218,7181],{"class":84},[67,24220,7474],{"class":110},[67,24222,3809],{"class":73},[67,24224,24225],{"class":69,"line":723},[67,24226,3400],{"class":73},[67,24228,24229],{"class":69,"line":729},[67,24230,24231],{"class":2058},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[67,24233,24234],{"class":69,"line":735},[67,24235,24236],{"class":2058},"    \u002F\u002F静态成员变量有两种访问方式：\n",[67,24238,24239],{"class":69,"line":741},[67,24240,24241],{"class":2058},"    \u002F\u002F1.通过对象进行访问\n",[67,24243,24244],{"class":69,"line":747},[67,24245,24246],{"class":73},"    Person p;  \n",[67,24248,24249,24251,24253,24255,24257],{"class":69,"line":753},[67,24250,3405],{"class":73},[67,24252,3031],{"class":84},[67,24254,23897],{"class":73},[67,24256,3031],{"class":84},[67,24258,3053],{"class":73},[67,24260,24261],{"class":69,"line":758},[67,24262,24263],{"class":2058},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[67,24265,24266],{"class":69,"line":764},[67,24267,24268],{"class":2058},"    \u002F\u002F2.通过类名进行访问\n",[67,24270,24271,24273,24275,24277,24279,24281],{"class":69,"line":770},[67,24272,3405],{"class":73},[67,24274,3031],{"class":84},[67,24276,20843],{"class":110},[67,24278,23999],{"class":73},[67,24280,3031],{"class":84},[67,24282,3053],{"class":73},[67,24284,24285,24287,24289,24291,24293,24295,24297],{"class":69,"line":776},[67,24286,3405],{"class":73},[67,24288,3031],{"class":84},[67,24290,20843],{"class":110},[67,24292,24208],{"class":73},[67,24294,3031],{"class":84},[67,24296,3096],{"class":73},[67,24298,24299],{"class":2058}," \u002F\u002F没有访问权限，报错\n",[67,24301,24302],{"class":69,"line":782},[67,24303,3419],{"class":73},[67,24305,24306,24308,24310],{"class":69,"line":788},[67,24307,2006],{"class":84},[67,24309,804],{"class":110},[67,24311,3809],{"class":73},[67,24313,24314],{"class":69,"line":793},[67,24315,3400],{"class":73},[67,24317,24318,24320],{"class":69,"line":798},[67,24319,7519],{"class":110},[67,24321,7453],{"class":73},[67,24323,24324],{"class":69,"line":816},[67,24325,3419],{"class":73},[23794,24327,24329],{"id":24328},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24331,24332],{},"1.静态成员函数定义与访问",[58,24334,24336],{"className":1992,"code":24335,"language":1994,"meta":63,"style":63},"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",[32,24337,24338,24344,24348,24352,24357,24368,24372,24386,24390,24394,24402,24406,24411,24416,24420,24428,24433,24443],{"__ignoreMap":63},[67,24339,24340,24342],{"class":69,"line":70},[67,24341,16492],{"class":84},[67,24343,16968],{"class":110},[67,24345,24346],{"class":69,"line":191},[67,24347,3400],{"class":73},[67,24349,24350],{"class":69,"line":202},[67,24351,16514],{"class":84},[67,24353,24354],{"class":69,"line":641},[67,24355,24356],{"class":2058},"    \u002F\u002F在公共权限下定义静态成员函数\n",[67,24358,24359,24361,24364,24366],{"class":69,"line":655},[67,24360,12820],{"class":84},[67,24362,24363],{"class":84}," void",[67,24365,13185],{"class":110},[67,24367,3809],{"class":73},[67,24369,24370],{"class":69,"line":660},[67,24371,3863],{"class":73},[67,24373,24374,24377,24379,24382,24384],{"class":69,"line":665},[67,24375,24376],{"class":73},"        coout",[67,24378,3031],{"class":84},[67,24380,24381],{"class":114},"\"静态成员函数的调用\"",[67,24383,3031],{"class":84},[67,24385,3053],{"class":73},[67,24387,24388],{"class":69,"line":677},[67,24389,4020],{"class":73},[67,24391,24392],{"class":69,"line":683},[67,24393,5815],{"class":73},[67,24395,24396,24398,24400],{"class":69,"line":689},[67,24397,7181],{"class":84},[67,24399,7405],{"class":110},[67,24401,3809],{"class":73},[67,24403,24404],{"class":69,"line":694},[67,24405,3400],{"class":73},[67,24407,24408],{"class":69,"line":700},[67,24409,24410],{"class":2058},"    \u002F\u002F静态成员函数的调用方式:\n",[67,24412,24413],{"class":69,"line":706},[67,24414,24415],{"class":2058},"    \u002F\u002F1.通过对象访问\n",[67,24417,24418],{"class":69,"line":712},[67,24419,17110],{"class":73},[67,24421,24422,24424,24426],{"class":69,"line":717},[67,24423,17663],{"class":73},[67,24425,13351],{"class":110},[67,24427,7453],{"class":73},[67,24429,24430],{"class":69,"line":723},[67,24431,24432],{"class":2058},"    \u002F\u002F2.通过类名访问\n",[67,24434,24435,24437,24439,24441],{"class":69,"line":729},[67,24436,20316],{"class":110},[67,24438,19529],{"class":73},[67,24440,13351],{"class":110},[67,24442,7453],{"class":73},[67,24444,24445],{"class":69,"line":735},[67,24446,3419],{"class":73},[26,24448,24449],{"start":191},[29,24450,24451],{},"静态成员函数只能访问静态成员变量",[58,24453,24455],{"className":1992,"code":24454,"language":1994,"meta":63,"style":63},"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",[32,24456,24457,24463,24467,24471,24475,24485,24489,24503,24508,24520,24524,24535,24545,24549,24553,24557,24567,24571,24584,24588,24592,24596,24600,24614,24622,24626,24630,24634,24638,24646,24650,24660,24665,24669,24677,24681,24687],{"__ignoreMap":63},[67,24458,24459,24461],{"class":69,"line":70},[67,24460,16492],{"class":84},[67,24462,16968],{"class":110},[67,24464,24465],{"class":69,"line":191},[67,24466,3400],{"class":73},[67,24468,24469],{"class":69,"line":202},[67,24470,16514],{"class":84},[67,24472,24473],{"class":69,"line":641},[67,24474,24356],{"class":2058},[67,24476,24477,24479,24481,24483],{"class":69,"line":655},[67,24478,12820],{"class":84},[67,24480,24363],{"class":84},[67,24482,13185],{"class":110},[67,24484,3809],{"class":73},[67,24486,24487],{"class":69,"line":660},[67,24488,3863],{"class":73},[67,24490,24491,24494,24496,24498,24500],{"class":69,"line":665},[67,24492,24493],{"class":73},"        m_A",[67,24495,85],{"class":84},[67,24497,2302],{"class":77},[67,24499,2055],{"class":73},[67,24501,24502],{"class":2058}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[67,24504,24505],{"class":69,"line":677},[67,24506,24507],{"class":2058},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[67,24509,24510,24512,24514,24516,24518],{"class":69,"line":683},[67,24511,24376],{"class":73},[67,24513,3031],{"class":84},[67,24515,24381],{"class":114},[67,24517,3031],{"class":84},[67,24519,3053],{"class":73},[67,24521,24522],{"class":69,"line":689},[67,24523,4020],{"class":73},[67,24525,24526,24528,24530,24532],{"class":69,"line":694},[67,24527,12820],{"class":84},[67,24529,4215],{"class":84},[67,24531,17245],{"class":73},[67,24533,24534],{"class":2058}," \u002F\u002F静态成员变量\n",[67,24536,24537,24539,24542],{"class":69,"line":700},[67,24538,3818],{"class":84},[67,24540,24541],{"class":73}," m_B;",[67,24543,24544],{"class":2058}," \u002F\u002F非静态成员变量\n",[67,24546,24547],{"class":69,"line":706},[67,24548,631],{"emptyLinePlaceholder":630},[67,24550,24551],{"class":69,"line":712},[67,24552,17019],{"class":84},[67,24554,24555],{"class":69,"line":717},[67,24556,24169],{"class":2058},[67,24558,24559,24561,24563,24565],{"class":69,"line":723},[67,24560,12820],{"class":84},[67,24562,24363],{"class":84},[67,24564,15416],{"class":110},[67,24566,3809],{"class":73},[67,24568,24569],{"class":69,"line":729},[67,24570,3863],{"class":73},[67,24572,24573,24575,24577,24580,24582],{"class":69,"line":735},[67,24574,5273],{"class":73},[67,24576,3031],{"class":84},[67,24578,24579],{"class":114},"\"这是私有权限下的静态函数调用\"",[67,24581,3031],{"class":84},[67,24583,3053],{"class":73},[67,24585,24586],{"class":69,"line":741},[67,24587,4020],{"class":73},[67,24589,24590],{"class":69,"line":747},[67,24591,631],{"emptyLinePlaceholder":630},[67,24593,24594],{"class":69,"line":753},[67,24595,631],{"emptyLinePlaceholder":630},[67,24597,24598],{"class":69,"line":758},[67,24599,5815],{"class":73},[67,24601,24602,24604,24606,24608,24610,24612],{"class":69,"line":764},[67,24603,2006],{"class":84},[67,24605,17366],{"class":110},[67,24607,23999],{"class":73},[67,24609,85],{"class":84},[67,24611,78],{"class":77},[67,24613,3148],{"class":73},[67,24615,24616,24618,24620],{"class":69,"line":770},[67,24617,7181],{"class":84},[67,24619,7405],{"class":110},[67,24621,3809],{"class":73},[67,24623,24624],{"class":69,"line":776},[67,24625,3400],{"class":73},[67,24627,24628],{"class":69,"line":782},[67,24629,24410],{"class":2058},[67,24631,24632],{"class":69,"line":788},[67,24633,24415],{"class":2058},[67,24635,24636],{"class":69,"line":793},[67,24637,17110],{"class":73},[67,24639,24640,24642,24644],{"class":69,"line":798},[67,24641,17663],{"class":73},[67,24643,13351],{"class":110},[67,24645,7453],{"class":73},[67,24647,24648],{"class":69,"line":816},[67,24649,24432],{"class":2058},[67,24651,24652,24654,24656,24658],{"class":69,"line":832},[67,24653,20316],{"class":110},[67,24655,19529],{"class":73},[67,24657,13351],{"class":110},[67,24659,7453],{"class":73},[67,24661,24662],{"class":69,"line":843},[67,24663,24664],{"class":2058},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[67,24666,24667],{"class":69,"line":848},[67,24668,3419],{"class":73},[67,24670,24671,24673,24675],{"class":69,"line":863},[67,24672,2006],{"class":84},[67,24674,804],{"class":110},[67,24676,3809],{"class":73},[67,24678,24679],{"class":69,"line":876},[67,24680,3400],{"class":73},[67,24682,24683,24685],{"class":69,"line":889},[67,24684,7450],{"class":110},[67,24686,7453],{"class":73},[67,24688,24689],{"class":69,"line":894},[67,24690,3419],{"class":73},[391,24692,24694],{"id":24693},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23794,24696,24698],{"id":24697},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24700,24701],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24703,24704],{},"只有非静态成员变量才属于类的对象上",[24706,24707,24709],"h5",{"id":24708},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[58,24711,24713],{"className":1992,"code":24712,"language":1994,"meta":63,"style":63},"#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",[32,24714,24715,24722,24732,24738,24742,24746,24750,24758,24762,24766,24789,24793,24801,24805,24811],{"__ignoreMap":63},[67,24716,24717,24719],{"class":69,"line":70},[67,24718,3784],{"class":84},[67,24720,24721],{"class":114},"\u003Ciostraem>\n",[67,24723,24724,24726,24728,24730],{"class":69,"line":191},[67,24725,3792],{"class":84},[67,24727,3795],{"class":84},[67,24729,3798],{"class":110},[67,24731,3148],{"class":73},[67,24733,24734,24736],{"class":69,"line":202},[67,24735,16492],{"class":84},[67,24737,16968],{"class":110},[67,24739,24740],{"class":69,"line":641},[67,24741,3400],{"class":73},[67,24743,24744],{"class":69,"line":655},[67,24745,631],{"emptyLinePlaceholder":630},[67,24747,24748],{"class":69,"line":660},[67,24749,5815],{"class":73},[67,24751,24752,24754,24756],{"class":69,"line":665},[67,24753,7181],{"class":84},[67,24755,7405],{"class":110},[67,24757,3809],{"class":73},[67,24759,24760],{"class":69,"line":677},[67,24761,3400],{"class":73},[67,24763,24764],{"class":69,"line":683},[67,24765,17110],{"class":73},[67,24767,24768,24770,24772,24775,24777,24780,24782,24784,24786],{"class":69,"line":689},[67,24769,3405],{"class":73},[67,24771,3031],{"class":84},[67,24773,24774],{"class":114},"\"size of p=\"",[67,24776,3031],{"class":84},[67,24778,24779],{"class":110},"sizeoif",[67,24781,8355],{"class":73},[67,24783,3031],{"class":84},[67,24785,3096],{"class":73},[67,24787,24788],{"class":2058}," \u002F\u002F查看这个空类的占用的内存空间\n",[67,24790,24791],{"class":69,"line":694},[67,24792,3419],{"class":73},[67,24794,24795,24797,24799],{"class":69,"line":700},[67,24796,2006],{"class":84},[67,24798,804],{"class":110},[67,24800,3809],{"class":73},[67,24802,24803],{"class":69,"line":706},[67,24804,3400],{"class":73},[67,24806,24807,24809],{"class":69,"line":712},[67,24808,7450],{"class":110},[67,24810,7453],{"class":73},[67,24812,24813],{"class":69,"line":717},[67,24814,3419],{"class":73},[19,24816,24817],{},"输出结果为：size of p=1",[19,24819,24820],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24822,24823],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24706,24825,24827],{"id":24826},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[58,24829,24831],{"className":1992,"code":24830,"language":1994,"meta":63,"style":63},"#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",[32,24832,24833,24839,24849,24857,24861,24870,24874,24882,24886,24890,24909,24913,24917,24925,24929,24935],{"__ignoreMap":63},[67,24834,24835,24837],{"class":69,"line":70},[67,24836,3784],{"class":84},[67,24838,3787],{"class":114},[67,24840,24841,24843,24845,24847],{"class":69,"line":191},[67,24842,3792],{"class":84},[67,24844,3795],{"class":84},[67,24846,3798],{"class":110},[67,24848,3148],{"class":73},[67,24850,24851,24853,24855],{"class":69,"line":202},[67,24852,16492],{"class":84},[67,24854,17366],{"class":110},[67,24856,4499],{"class":73},[67,24858,24859],{"class":69,"line":641},[67,24860,3400],{"class":73},[67,24862,24863,24865,24867],{"class":69,"line":655},[67,24864,3818],{"class":84},[67,24866,17245],{"class":73},[67,24868,24869],{"class":2058},"\u002F\u002F非静态成员变量\n",[67,24871,24872],{"class":69,"line":660},[67,24873,5815],{"class":73},[67,24875,24876,24878,24880],{"class":69,"line":665},[67,24877,7181],{"class":84},[67,24879,7405],{"class":110},[67,24881,3809],{"class":73},[67,24883,24884],{"class":69,"line":677},[67,24885,3400],{"class":73},[67,24887,24888],{"class":69,"line":683},[67,24889,17110],{"class":73},[67,24891,24892,24894,24896,24898,24900,24902,24904,24906],{"class":69,"line":689},[67,24893,3405],{"class":73},[67,24895,3031],{"class":84},[67,24897,24774],{"class":114},[67,24899,3227],{"class":84},[67,24901,8355],{"class":73},[67,24903,3031],{"class":84},[67,24905,3096],{"class":73},[67,24907,24908],{"class":2058}," \u002F\u002F查看不是空对象时占用多少内存\n",[67,24910,24911],{"class":69,"line":694},[67,24912,631],{"emptyLinePlaceholder":630},[67,24914,24915],{"class":69,"line":700},[67,24916,3419],{"class":73},[67,24918,24919,24921,24923],{"class":69,"line":706},[67,24920,2006],{"class":84},[67,24922,804],{"class":110},[67,24924,3809],{"class":73},[67,24926,24927],{"class":69,"line":712},[67,24928,3400],{"class":73},[67,24930,24931,24933],{"class":69,"line":717},[67,24932,7450],{"class":110},[67,24934,7453],{"class":73},[67,24936,24937],{"class":69,"line":723},[67,24938,3419],{"class":73},[19,24940,24941],{},"输出结果：size of p=4",[19,24943,24944],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[26,24946,24947],{},[29,24948,24949],{},"如果加上非静态成员变量，Person类修改如下",[58,24951,24953],{"className":1992,"code":24952,"language":1994,"meta":63,"style":63},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[32,24954,24955,24961,24965,24971,24979,24983,24988],{"__ignoreMap":63},[67,24956,24957,24959],{"class":69,"line":70},[67,24958,16492],{"class":84},[67,24960,16968],{"class":110},[67,24962,24963],{"class":69,"line":191},[67,24964,3400],{"class":73},[67,24966,24967,24969],{"class":69,"line":202},[67,24968,3818],{"class":84},[67,24970,23188],{"class":73},[67,24972,24973,24975,24977],{"class":69,"line":641},[67,24974,12820],{"class":84},[67,24976,4215],{"class":84},[67,24978,23195],{"class":73},[67,24980,24981],{"class":69,"line":655},[67,24982,5815],{"class":73},[67,24984,24985],{"class":69,"line":660},[67,24986,24987],{"class":2058},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[67,24989,24990,24992,24994,24996,24998,25000],{"class":69,"line":665},[67,24991,2006],{"class":84},[67,24993,17366],{"class":110},[67,24995,24208],{"class":73},[67,24997,85],{"class":84},[67,24999,78],{"class":77},[67,25001,3148],{"class":73},[19,25003,25004],{},"输出结果：4",[19,25006,25007],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[26,25009,25010],{"start":191},[29,25011,25012],{},"加上非静态成员函数",[58,25014,25016],{"className":1992,"code":25015,"language":1994,"meta":63,"style":63},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[32,25017,25018,25025,25029,25035,25043,25047,25051,25055],{"__ignoreMap":63},[67,25019,25020,25022],{"class":69,"line":70},[67,25021,16492],{"class":84},[67,25023,25024],{"class":110},"  Person\n",[67,25026,25027],{"class":69,"line":191},[67,25028,3400],{"class":73},[67,25030,25031,25033],{"class":69,"line":202},[67,25032,3818],{"class":84},[67,25034,23188],{"class":73},[67,25036,25037,25039,25041],{"class":69,"line":641},[67,25038,16707],{"class":84},[67,25040,13185],{"class":110},[67,25042,3809],{"class":73},[67,25044,25045],{"class":69,"line":655},[67,25046,3863],{"class":73},[67,25048,25049],{"class":69,"line":660},[67,25050,631],{"emptyLinePlaceholder":630},[67,25052,25053],{"class":69,"line":665},[67,25054,4020],{"class":73},[67,25056,25057],{"class":69,"line":677},[67,25058,5815],{"class":73},[19,25060,25061],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[26,25063,25064],{"start":202},[29,25065,25066],{},"加上静态成员函数",[58,25068,25070],{"className":1992,"code":25069,"language":1994,"meta":63,"style":63},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[32,25071,25072,25078,25082,25088,25096,25100,25104,25108,25119,25123,25127,25131],{"__ignoreMap":63},[67,25073,25074,25076],{"class":69,"line":70},[67,25075,16492],{"class":84},[67,25077,25024],{"class":110},[67,25079,25080],{"class":69,"line":191},[67,25081,3400],{"class":73},[67,25083,25084,25086],{"class":69,"line":202},[67,25085,3818],{"class":84},[67,25087,23188],{"class":73},[67,25089,25090,25092,25094],{"class":69,"line":641},[67,25091,16707],{"class":84},[67,25093,13185],{"class":110},[67,25095,3809],{"class":73},[67,25097,25098],{"class":69,"line":655},[67,25099,3863],{"class":73},[67,25101,25102],{"class":69,"line":660},[67,25103,631],{"emptyLinePlaceholder":630},[67,25105,25106],{"class":69,"line":665},[67,25107,4020],{"class":73},[67,25109,25110,25112,25114,25117],{"class":69,"line":677},[67,25111,12820],{"class":84},[67,25113,24363],{"class":84},[67,25115,25116],{"class":110}," func1",[67,25118,3809],{"class":73},[67,25120,25121],{"class":69,"line":683},[67,25122,3863],{"class":73},[67,25124,25125],{"class":69,"line":689},[67,25126,631],{"emptyLinePlaceholder":630},[67,25128,25129],{"class":69,"line":694},[67,25130,4020],{"class":73},[67,25132,25133],{"class":69,"line":700},[67,25134,5815],{"class":73},[19,25136,25004],{},[19,25138,25139],{},"解释：静态成员函数也不属于类上",[1903,25141,9490],{},{"title":63,"searchDepth":191,"depth":191,"links":25143},[25144,25150],{"id":16443,"depth":191,"text":16444,"children":25145},[25146,25147,25148,25149],{"id":16447,"depth":202,"text":16448},{"id":17171,"depth":202,"text":17172},{"id":17343,"depth":202,"text":17344},{"id":17802,"depth":202,"text":17803},{"id":20174,"depth":191,"text":20175,"children":25151},[25152,25153,25154,25155,25156,25157,25158,25159,25160],{"id":20186,"depth":202,"text":20187},{"id":20479,"depth":202,"text":20480},{"id":20970,"depth":202,"text":20971},{"id":22067,"depth":202,"text":22068},{"id":22490,"depth":202,"text":22491},{"id":22968,"depth":202,"text":22969},{"id":23343,"depth":202,"text":23344},{"id":23756,"depth":202,"text":23757},{"id":24693,"depth":202,"text":24694},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16408,"description":25161},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25168,"title":1994,"body":25169,"description":25173,"extension":1930,"meta":25174,"navigation":630,"path":25176,"seo":25177,"stem":25178,"__hash__":25179},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25170,"toc":25171},[],{"title":63,"searchDepth":191,"depth":191,"links":25172},[],null,{"category":25175},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1994,"description":25173},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25181,"title":25182,"body":25183,"description":63,"extension":1930,"meta":25769,"navigation":630,"path":25770,"seo":25771,"stem":25772,"__hash__":25773},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25184,"toc":25751},[25185,25188,25192,25195,25198,25201,25219,25224,25227,25230,25233,25236,25241,25244,25249,25252,25255,25259,25262,25265,25271,25274,25292,25296,25300,25303,25308,25311,25315,25318,25331,25334,25338,25341,25344,25347,25372,25375,25384,25395,25410,25442,25446,25453,25461,25465,25468,25471,25476,25480,25483,25486,25491,25494,25498,25501,25504,25509,25512,25516,25521,25525,25591,25595,25598,25601,25604,25607,25610,25616,25633,25636,25650,25659,25663,25666,25669,25674,25677,25682,25687,25690,25693,25698,25703,25706,25711,25716,25719,25724,25729,25732,25735,25740,25743,25748],[10,25186,25182],{"id":25187},"_1强化学习基本认识",[14,25189,25191],{"id":25190},"_11什么是强化学习","1.1.什么是强化学习",[19,25193,25194],{},"强化学习有两部分组成：智能体和环境；",[19,25196,25197],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25199,25200],{},"强化学习与监督学习的区别:",[26,25202,25203,25206,25209,25212],{},[29,25204,25205],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[29,25207,25208],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[29,25210,25211],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[29,25213,25214,25215,25218],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2144,25216,25217],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25220,25221],{},[3317,25222],{"alt":63,"src":25223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25225,25226],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25228,25229],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25231,25232],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25234,25235],{},"获取奖励",[19,25237,25238],{},[3317,25239],{"alt":63,"src":25240},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25242,25243],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25245,25246],{},[3317,25247],{"alt":63,"src":25248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25250,25251],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25253,25254],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25256,25258],{"id":25257},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25260,25261],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25263,25264],{},"具身智能中的应用",[19,25266,25267,25270],{},[2144,25268,25269],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25272,25273],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25275,25276,25277,25280,25281,25284,25285,25288,25289],{},"机器人是",[2144,25278,25279],{},"躯体","，深度学习是",[2144,25282,25283],{},"神经元****网络","，VLA是",[2144,25286,25287],{},"通用的行为逻辑","，而强化学习是",[2144,25290,25291],{},"教练",[14,25293,25295],{"id":25294},"_13序列决策","1.3.序列决策",[391,25297,25299],{"id":25298},"_131智能体与环境","1.3.1.智能体与环境",[19,25301,25302],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25304,25305],{},[3317,25306],{"alt":63,"src":25307},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25309,25310],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[391,25312,25314],{"id":25313},"_132奖励","1.3.2.奖励",[19,25316,25317],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25319,25320,25321,25330],{},"取某个策略的表现如何。强化学习的目的就是",[2144,25322,25323,25324,25329],{},"最大化",[2144,25325,25326],{},[2144,25327,25328],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25332,25333],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[391,25335,25337],{"id":25336},"_133序列决策","1.3.3.序列决策",[19,25339,25340],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25342,25343],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25345,25346],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25348,25349,25353,25354,25356,25357,25359,25360,25362,25363,15593,25366,15593,25369],{},[25350,25351,25352],"em",{},"Ht"," = ",[25350,25355,2585],{},"1*, a",[25350,25358,2209],{},", r",[25350,25361,2209],{},", . . . ,* ",[25350,25364,25365],{},"ot",[25350,25367,25368],{},", at ,",[25350,25370,25371],{},"rt",[19,25373,25374],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25376,25377,25353,25380,3505,25382,2420],{},[25350,25378,25379],{},"st",[25350,25381,2052],{},[25350,25383,25352],{},[19,25385,25386,25387,25390,25391,25394],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2144,25388,25389],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2144,25392,25393],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25396,25397,25398,25401,25402,25405,25406,25409],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2144,25399,25400],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2144,25403,25404],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25350,25407,25408],{},"S, A, T, R, Ω, O, γ",")。",[19,25411,25412,25413,25415,25416,25418,25419,854,25421,25424,25425,25427,25428,854,25431,25434,25435,25437,25438,25441],{},"其中 ",[25350,25414,2678],{}," 表示状态空间，为隐变量，",[25350,25417,2224],{}," 为动作空间，",[25350,25420,2703],{},[25350,25422,25423],{},"s ′ |s, a",") 为状态转移概率，",[25350,25426,2653],{}," 为奖励函数，",[25350,25429,25430],{},"Ω",[25350,25432,25433],{},"o|s, a",") 为观测概率，",[25350,25436,2579],{}," 为观测空间，",[25350,25439,25440],{},"γ"," 为折扣因子。",[14,25443,25445],{"id":25444},"_14动作空间","1.4.动作空间",[19,25447,25448,25449,25452],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2144,25450,25451],{},"动作空间"," ，动作空间分为:",[26,25454,25455,25458],{},[29,25456,25457],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[29,25459,25460],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25462,25464],{"id":25463},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25466,25467],{},"由策略、价值函数、模型三部分组成",[19,25469,25470],{},"这三者组成马尔可夫决策过程",[19,25472,25473],{},[3317,25474],{"alt":63,"src":25475},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[391,25477,25479],{"id":25478},"_151策略","1.5.1.策略",[19,25481,25482],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25484,25485],{},"策略可分为两种：",[19,25487,25488],{},[3317,25489],{"alt":63,"src":25490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25492,25493],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[391,25495,25497],{"id":25496},"_152价值函数","1.5.2.价值函数",[19,25499,25500],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25502,25503],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25505,25506],{},[3317,25507],{"alt":63,"src":25508},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25510,25511],{},"进入某个状态采取的最优动作可以通过Q函数得到",[391,25513,25515],{"id":25514},"_153模型","1.5.3.模型",[19,25517,25518],{},[3317,25519],{"alt":63,"src":25520},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25522,25524],{"id":25523},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[399,25526,25527,25537],{},[402,25528,25529],{},[405,25530,25531,25534],{},[408,25532,25533],{"align":410},"类型",[408,25535,25536],{"align":410},"特点",[419,25538,25539,25549,25559,25569,25581],{},[405,25540,25541,25546],{},[424,25542,25543],{"align":410},[2144,25544,25545],{},"基于价值的智能体",[424,25547,25548],{"align":410},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[405,25550,25551,25556],{},[424,25552,25553],{"align":410},[2144,25554,25555],{},"基于策略的智能体",[424,25557,25558],{"align":410},"直接学习策略，没有学习价值函数",[405,25560,25561,25566],{},[424,25562,25563],{"align":410},[2144,25564,25565],{},"演员-评论员智能体",[424,25567,25568],{"align":410},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[405,25570,25571,25576],{},[424,25572,25573],{"align":410},[2144,25574,25575],{},"有模型强化学习智能体",[424,25577,25578],{"align":410},[3317,25579],{"alt":63,"src":25580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[405,25582,25583,25588],{},[424,25584,25585],{"align":410},[2144,25586,25587],{},"免模型强化学习智能体",[424,25589,25590],{"align":410},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25592,25594],{"id":25593},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25596,25597],{},"学习和规划是序列决策的两个基本问题",[19,25599,25600],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25602,25603],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25605,25606],{},"强化学习用到的库：Gym",[19,25608,25609],{},"Gym可以检验强化学习算法的优劣",[19,25611,25612,25615],{},[2144,25613,25614],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[58,25617,25619],{"className":101,"code":25618,"language":103,"meta":63,"style":63},"pip install gym==0.25.2\n",[32,25620,25621],{"__ignoreMap":63},[67,25622,25623,25625,25627,25630],{"class":69,"line":70},[67,25624,149],{"class":110},[67,25626,118],{"class":114},[67,25628,25629],{"class":114}," gym==",[67,25631,25632],{"class":77},"0.25.2\n",[19,25634,25635],{},"显示图形界面需要",[58,25637,25639],{"className":101,"code":25638,"language":103,"meta":63,"style":63},"pip install pygame\n",[32,25640,25641],{"__ignoreMap":63},[67,25642,25643,25645,25647],{"class":69,"line":70},[67,25644,149],{"class":110},[67,25646,118],{"class":114},[67,25648,25649],{"class":114}," pygame\n",[19,25651,25652,25653],{},"有关Gym库的相关文档介绍：",[2230,25654,25658],{"href":25655,"rel":25656},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25657],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25660,25662],{"id":25661},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25664,25665],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25667,25668],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25670,25671],{},[3317,25672],{"alt":63,"src":25673},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25675,25676],{},"折扣率需要自己来设定",[19,25678,25679],{},[3317,25680],{"alt":63,"src":25681},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[26,25683,25684],{},[29,25685,25686],{},"状态转移函数：",[19,25688,25689],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25691,25692],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25694,25695],{},[3317,25696],{"alt":63,"src":25697},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[26,25699,25700],{"start":191},[29,25701,25702],{},"动作价值函数：",[19,25704,25705],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25707,25708],{},[3317,25709],{"alt":63,"src":25710},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[26,25712,25713],{"start":202},[29,25714,25715],{},"最优动作价值函数：",[19,25717,25718],{},"这个函数是对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,25720,25721],{},[3317,25722],{"alt":63,"src":25723},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[26,25725,25726],{"start":641},[29,25727,25728],{},"状态价值函数:",[19,25730,25731],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25733,25734],{},"它衡量的是“一个具体动作”的长期价值",[19,25736,25737],{},[3317,25738],{"alt":63,"src":25739},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25741,25742],{},"几个价值函数之间的比较：",[19,25744,25745],{},[3317,25746],{"alt":63,"src":25747},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1903,25749,25750],{},"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":63,"searchDepth":191,"depth":191,"links":25752},[25753,25754,25755,25760,25761,25766,25767,25768],{"id":25190,"depth":191,"text":25191},{"id":25257,"depth":191,"text":25258},{"id":25294,"depth":191,"text":25295,"children":25756},[25757,25758,25759],{"id":25298,"depth":202,"text":25299},{"id":25313,"depth":202,"text":25314},{"id":25336,"depth":202,"text":25337},{"id":25444,"depth":191,"text":25445},{"id":25463,"depth":191,"text":25464,"children":25762},[25763,25764,25765],{"id":25478,"depth":202,"text":25479},{"id":25496,"depth":202,"text":25497},{"id":25514,"depth":202,"text":25515},{"id":25523,"depth":191,"text":25524},{"id":25593,"depth":191,"text":25594},{"id":25661,"depth":191,"text":25662},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25182,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25775,"title":25776,"body":25777,"description":25784,"extension":1930,"meta":25795,"navigation":630,"path":25796,"seo":25797,"stem":25798,"__hash__":25799},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25778,"toc":25793},[25779,25782,25785,25790],[10,25780,25776],{"id":25781},"_2马尔可夫决策过程",[19,25783,25784],{},"这是强化学习的基本框架",[19,25786,25787],{},[3317,25788],{"alt":63,"src":25789},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25791,25792],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":63,"searchDepth":191,"depth":191,"links":25794},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25776,"description":25784},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25801,"title":25802,"body":25803,"description":63,"extension":1930,"meta":25919,"navigation":630,"path":25920,"seo":25921,"stem":25922,"__hash__":25923},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25804,"toc":25914},[25805,25808,25812,25815,25820,25825,25828,25833,25836,25841,25844,25848,25853,25856,25861,25866,25871,25874,25878,25883,25886,25891,25896,25901,25906,25909],[10,25806,25802],{"id":25807},"_3动作价值函数",[14,25809,25811],{"id":25810},"_31dqn","3.1.DQN",[19,25813,25814],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25816,25817],{},[3317,25818],{"alt":63,"src":25819},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25821,25822],{},[3317,25823],{"alt":63,"src":25824},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25826,25827],{},"DQN算法的描述：",[19,25829,25830],{},[3317,25831],{"alt":63,"src":25832},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25834,25835],{},"这里的Dense指的是全连接层",[19,25837,25838],{},[3317,25839],{"alt":63,"src":25840},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25842,25843],{},"当前观测的状态为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,25845,25847],{"id":25846},"_32dqn的举例","3.2.DQN的举例",[19,25849,25850],{},[3317,25851],{"alt":63,"src":25852},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25854,25855],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25857,25858],{},[3317,25859],{"alt":63,"src":25860},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25862,25863],{},[3317,25864],{"alt":63,"src":25865},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25867,25868],{},[3317,25869],{"alt":63,"src":25870},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25872,25873],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25875,25877],{"id":25876},"_33td算法","3.3.TD算法",[19,25879,25880],{},[3317,25881],{"alt":63,"src":25882},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25884,25885],{},"强化学习TD算法公式的粗略解释：",[19,25887,25888],{},[3317,25889],{"alt":63,"src":25890},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25892,25893],{},[3317,25894],{"alt":63,"src":25895},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25897,25898],{},[3317,25899],{"alt":63,"src":25900},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25902,25903],{},[3317,25904],{"alt":63,"src":25905},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25907,25908],{},"TD算法总结：",[19,25910,25911],{},[3317,25912],{"alt":63,"src":25913},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":63,"searchDepth":191,"depth":191,"links":25915},[25916,25917,25918],{"id":25810,"depth":191,"text":25811},{"id":25846,"depth":191,"text":25847},{"id":25876,"depth":191,"text":25877},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25802,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25925,"title":25926,"body":25927,"description":63,"extension":1930,"meta":26160,"navigation":630,"path":26161,"seo":26162,"stem":26163,"__hash__":26164},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25928,"toc":26156},[25929,25932,25936,25939,25942,25947,25952,25955,25960,25965,25968,25973,25976,25981,25984,25989,25992,25997,26000,26005,26010,26013,26018,26021,26024,26029,26032,26037,26042,26046,26049,26052,26057,26062,26065,26070,26075,26078,26083,26086,26089,26094,26097,26102,26105,26110,26115,26118,26123,26128,26131,26136,26139,26144,26147],[10,25930,25926],{"id":25931},"_4策略学习",[14,25933,25935],{"id":25934},"_41概念描述","4.1.概念描述",[19,25937,25938],{},"用神经网络（策略网络）近似策略函数",[19,25940,25941],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25943,25944],{},[3317,25945],{"alt":63,"src":25946},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25948,25949],{},[3317,25950],{"alt":63,"src":25951},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25953,25954],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25956,25957],{},[3317,25958],{"alt":63,"src":25959},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25961,25962],{},[3317,25963],{"alt":63,"src":25964},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25966,25967],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25969,25970],{},[3317,25971],{"alt":63,"src":25972},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25974,25975],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25977,25978],{},[3317,25979],{"alt":63,"src":25980},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25982,25983],{},"改进theta要用到策略梯度算法",[19,25985,25986],{},[3317,25987],{"alt":63,"src":25988},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25990,25991],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25993,25994],{},[3317,25995],{"alt":63,"src":25996},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25998,25999],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26001,26002],{},[3317,26003],{"alt":63,"src":26004},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26006,26007],{},[3317,26008],{"alt":63,"src":26009},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26011,26012],{},"梯度公式总结：",[19,26014,26015],{},[3317,26016],{"alt":63,"src":26017},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26019,26020],{},"两个公式的分别应用场景：",[19,26022,26023],{},"对于离散的动作：",[19,26025,26026],{},[3317,26027],{"alt":63,"src":26028},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26030,26031],{},"对于连续的动作：",[19,26033,26034],{},[3317,26035],{"alt":63,"src":26036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26038,26039],{},[3317,26040],{"alt":63,"src":26041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26043,26045],{"id":26044},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26047,26048],{},"使用蒙特卡洛来近似计算策略梯度",[19,26050,26051],{},"蒙特卡洛法的解释如下：",[19,26053,26054],{},[3317,26055],{"alt":63,"src":26056},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26058,26059],{},[3317,26060],{"alt":63,"src":26061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26063,26064],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[26,26066,26067],{},[29,26068,26069],{},"方法一：reinforce算法",[19,26071,26072],{},[3317,26073],{"alt":63,"src":26074},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26076,26077],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[26,26079,26080],{"start":191},[29,26081,26082],{},"方法二：actor-critic算法",[19,26084,26085],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26087,26088],{},"两个网络的构建：",[19,26090,26091],{},[3317,26092],{"alt":63,"src":26093},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26095,26096],{},"actor网路：",[19,26098,26099],{},[3317,26100],{"alt":63,"src":26101},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26103,26104],{},"critic网络",[19,26106,26107],{},[3317,26108],{"alt":63,"src":26109},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[26,26111,26112],{"start":202},[29,26113,26114],{},"网络的训练",[19,26116,26117],{},"网络描述",[19,26119,26120],{},[3317,26121],{"alt":63,"src":26122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26124,26125],{},[3317,26126],{"alt":63,"src":26127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26129,26130],{},"TD算法更新梯度：",[19,26132,26133],{},[3317,26134],{"alt":63,"src":26135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26137,26138],{},"策略网络更新梯度：",[19,26140,26141],{},[3317,26142],{"alt":63,"src":26143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26145,26146],{},"训练整个流程的具体描述：",[19,26148,26149,26152,26153],{},[3317,26150],{"alt":63,"src":26151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3317,26154],{"alt":63,"src":26155},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":63,"searchDepth":191,"depth":191,"links":26157},[26158,26159],{"id":25934,"depth":191,"text":25935},{"id":26044,"depth":191,"text":26045},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25926,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26166,"title":26167,"body":26168,"description":26175,"extension":1930,"meta":26225,"navigation":630,"path":26226,"seo":26227,"stem":26228,"__hash__":26229},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26169,"toc":26221},[26170,26173,26176,26180,26183,26188,26192,26195,26200,26203,26208,26213,26216],[10,26171,26167],{"id":26172},"_5alphago算法",[19,26174,26175],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26177,26179],{"id":26178},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26181,26182],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26184,26185],{},[3317,26186],{"alt":63,"src":26187},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26189,26191],{"id":26190},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26193,26194],{},"采用强化学习的方式训练策略网络",[19,26196,26197],{},[3317,26198],{"alt":63,"src":26199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26201,26202],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26204,26205],{},[3317,26206],{"alt":63,"src":26207},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26209,26210],{},[3317,26211],{"alt":63,"src":26212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26214,26215],{},"强化学习训练策略网络的总结：",[19,26217,26218],{},[3317,26219],{"alt":63,"src":26220},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":63,"searchDepth":191,"depth":191,"links":26222},[26223,26224],{"id":26178,"depth":191,"text":26179},{"id":26190,"depth":191,"text":26191},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26167,"description":26175},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26231,"title":26232,"body":26233,"description":26240,"extension":1930,"meta":26243,"navigation":630,"path":26244,"seo":26245,"stem":26246,"__hash__":26247},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26234,"toc":26241},[26235,26238],[10,26236,26232],{"id":26237},"_6价值网络",[19,26239,26240],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":63,"searchDepth":191,"depth":191,"links":26242},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26232,"description":26240},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26249,"title":26250,"body":26251,"description":26255,"extension":1930,"meta":26256,"navigation":630,"path":26257,"seo":26258,"stem":26259,"__hash__":26260},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26252,"toc":26253},[],{"title":63,"searchDepth":191,"depth":191,"links":26254},[],"记录自己的强化学习笔记。",{"category":25175},"\u002Fwiki\u002F2025-12-04",{"title":26250,"description":26255},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26262,"title":26263,"body":26264,"description":25173,"extension":1930,"meta":26303,"navigation":630,"path":26304,"seo":26305,"stem":26306,"__hash__":26307},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26265,"toc":26301},[26266,26269,26272,26278,26281,26287,26290,26295,26298],[10,26267,26263],{"id":26268},"_1-项目概览与官方资源",[19,26270,26271],{},"官方文档：",[19,26273,26274],{},[2230,26275,26276],{"href":26276,"rel":26277},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25657],[19,26279,26280],{},"官方代码仓库：",[19,26282,26283],{},[2230,26284,26285],{"href":26285,"rel":26286},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25657],[19,26288,26289],{},"复现大体流程：",[19,26291,26292],{},[3317,26293],{"alt":63,"src":26294},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26296,26297],{},"本教程的目标是打通这条链路：",[19,26299,26300],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":63,"searchDepth":191,"depth":191,"links":26302},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26263,"description":25173},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26309,"title":26310,"body":26311,"description":25173,"extension":1930,"meta":26426,"navigation":630,"path":26427,"seo":26428,"stem":26429,"__hash__":26430},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26312,"toc":26421},[26313,26316,26320,26323,26330,26334,26337,26346,26356,26360,26389,26392,26418],[10,26314,26310],{"id":26315},"_2-环境准备与设备连接",[14,26317,26319],{"id":26318},"_21-系统与环境","2.1 系统与环境",[19,26321,26322],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26324,26325,26326,26329],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[32,26327,26328],{},"lerobot"," 依赖。",[14,26331,26333],{"id":26332},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26335,26336],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[58,26338,26340],{"className":101,"code":26339,"language":103,"meta":63,"style":63},"lerobot-find-out\n",[32,26341,26342],{"__ignoreMap":63},[67,26343,26344],{"class":69,"line":70},[67,26345,26339],{"class":110},[19,26347,26348,26349,2204,26352,26355],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[32,26350,26351],{},"\u002Fdev\u002FttyACM0",[32,26353,26354],{},"\u002Fdev\u002FttyACM1","）。",[14,26357,26359],{"id":26358},"_23-串口授权","2.3 串口授权",[58,26361,26363],{"className":101,"code":26362,"language":103,"meta":63,"style":63},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[32,26364,26365,26378],{"__ignoreMap":63},[67,26366,26367,26369,26372,26375],{"class":69,"line":70},[67,26368,111],{"class":110},[67,26370,26371],{"class":114}," chmod",[67,26373,26374],{"class":77}," 666",[67,26376,26377],{"class":114}," \u002Fdev\u002FttyACM0\n",[67,26379,26380,26382,26384,26386],{"class":69,"line":191},[67,26381,111],{"class":110},[67,26383,26371],{"class":114},[67,26385,26374],{"class":77},[67,26387,26388],{"class":114}," \u002Fdev\u002FttyACM1\n",[19,26390,26391],{},"说明：",[2994,26393,26394,26399,26405,26415],{},[29,26395,26396,26398],{},[32,26397,111],{},"：以 root 权限执行命令。",[29,26400,26401,26404],{},[32,26402,26403],{},"chmod","：修改设备节点权限。",[29,26406,26407,26410,26411,26414],{},[32,26408,26409],{},"666","：",[32,26412,26413],{},"rw-rw-rw-","，所有用户可读写。",[29,26416,26417],{},"串口号必须替换为你机器上的真实端口。",[1903,26419,26420],{},"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":63,"searchDepth":191,"depth":191,"links":26422},[26423,26424,26425],{"id":26318,"depth":191,"text":26319},{"id":26332,"depth":191,"text":26333},{"id":26358,"depth":191,"text":26359},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26310,"description":25173},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26432,"title":26433,"body":26434,"description":25173,"extension":1930,"meta":26595,"navigation":630,"path":26596,"seo":26597,"stem":26598,"__hash__":26599},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26435,"toc":26591},[26436,26440,26444,26450,26453,26510,26513,26517,26520,26588],[10,26437,26439],{"id":26438},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26441,26443],{"id":26442},"_31-配置电机-id","3.1 配置电机 ID",[19,26445,26446,26447,26449],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[32,26448,2209],{},"，需要改成机械臂链路里不冲突的编号。",[19,26451,26452],{},"方式一：用 LeRobot 命令逐步写入。",[58,26454,26456],{"className":101,"code":26455,"language":103,"meta":63,"style":63},"# 主臂舵机配置 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",[32,26457,26458,26463,26471,26478,26483,26487,26492,26498,26505],{"__ignoreMap":63},[67,26459,26460],{"class":69,"line":70},[67,26461,26462],{"class":2058},"# 主臂舵机配置 ID\n",[67,26464,26465,26468],{"class":69,"line":191},[67,26466,26467],{"class":110},"lerobot-setup-motors",[67,26469,26470],{"class":77}," \\\n",[67,26472,26473,26476],{"class":69,"line":202},[67,26474,26475],{"class":77},"  --teleop.type=so101_leader",[67,26477,26470],{"class":77},[67,26479,26480],{"class":69,"line":641},[67,26481,26482],{"class":77},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[67,26484,26485],{"class":69,"line":655},[67,26486,631],{"emptyLinePlaceholder":630},[67,26488,26489],{"class":69,"line":660},[67,26490,26491],{"class":2058},"# 从臂舵机配置 ID\n",[67,26493,26494,26496],{"class":69,"line":665},[67,26495,26467],{"class":110},[67,26497,26470],{"class":77},[67,26499,26500,26503],{"class":69,"line":677},[67,26501,26502],{"class":77},"  --robot.type=so101_follower",[67,26504,26470],{"class":77},[67,26506,26507],{"class":69,"line":683},[67,26508,26509],{"class":77},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26511,26512],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26514,26516],{"id":26515},"_32-机械臂校准","3.2 机械臂校准",[19,26518,26519],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[58,26521,26523],{"className":101,"code":26522,"language":103,"meta":63,"style":63},"# 主臂校准\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",[32,26524,26525,26530,26537,26543,26550,26555,26559,26564,26570,26576,26583],{"__ignoreMap":63},[67,26526,26527],{"class":69,"line":70},[67,26528,26529],{"class":2058},"# 主臂校准\n",[67,26531,26532,26535],{"class":69,"line":191},[67,26533,26534],{"class":110},"lerobot-calibrate",[67,26536,26470],{"class":77},[67,26538,26539,26541],{"class":69,"line":202},[67,26540,26475],{"class":77},[67,26542,26470],{"class":77},[67,26544,26545,26548],{"class":69,"line":641},[67,26546,26547],{"class":77},"  --teleop.port=\u002Fdev\u002FttyACM0",[67,26549,26470],{"class":77},[67,26551,26552],{"class":69,"line":655},[67,26553,26554],{"class":77},"  --teleop.id=my_awesome_leader_arm\n",[67,26556,26557],{"class":69,"line":660},[67,26558,631],{"emptyLinePlaceholder":630},[67,26560,26561],{"class":69,"line":665},[67,26562,26563],{"class":2058},"# 从臂校准\n",[67,26565,26566,26568],{"class":69,"line":677},[67,26567,26534],{"class":110},[67,26569,26470],{"class":77},[67,26571,26572,26574],{"class":69,"line":683},[67,26573,26502],{"class":77},[67,26575,26470],{"class":77},[67,26577,26578,26581],{"class":69,"line":689},[67,26579,26580],{"class":77},"  --robot.port=\u002Fdev\u002FttyACM1",[67,26582,26470],{"class":77},[67,26584,26585],{"class":69,"line":694},[67,26586,26587],{"class":77},"  --robot.id=my_awesome_follower_arm\n",[1903,26589,26590],{},"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":63,"searchDepth":191,"depth":191,"links":26592},[26593,26594],{"id":26442,"depth":191,"text":26443},{"id":26515,"depth":191,"text":26516},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26433,"description":25173},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26601,"title":26602,"body":26603,"description":25173,"extension":1930,"meta":26794,"navigation":630,"path":26795,"seo":26796,"stem":26797,"__hash__":26798},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26604,"toc":26790},[26605,26608,26612,26659,26663,26676,26739,26742,26787],[10,26606,26602],{"id":26607},"_4-遥操与相机接入",[14,26609,26611],{"id":26610},"_41-不带相机遥操","4.1 不带相机遥操",[58,26613,26615],{"className":101,"code":26614,"language":103,"meta":63,"style":63},"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",[32,26616,26617,26624,26630,26636,26643,26649,26655],{"__ignoreMap":63},[67,26618,26619,26622],{"class":69,"line":70},[67,26620,26621],{"class":110},"lerobot-teleoperate",[67,26623,26470],{"class":77},[67,26625,26626,26628],{"class":69,"line":191},[67,26627,26502],{"class":77},[67,26629,26470],{"class":77},[67,26631,26632,26634],{"class":69,"line":202},[67,26633,26580],{"class":77},[67,26635,26470],{"class":77},[67,26637,26638,26641],{"class":69,"line":641},[67,26639,26640],{"class":77},"  --robot.id=my_awesome_follower_arm",[67,26642,26470],{"class":77},[67,26644,26645,26647],{"class":69,"line":655},[67,26646,26475],{"class":77},[67,26648,26470],{"class":77},[67,26650,26651,26653],{"class":69,"line":660},[67,26652,26547],{"class":77},[67,26654,26470],{"class":77},[67,26656,26657],{"class":69,"line":665},[67,26658,26554],{"class":77},[14,26660,26662],{"id":26661},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[58,26664,26666],{"className":101,"code":26665,"language":103,"meta":63,"style":63},"lerobot-find-cameras opencv\n",[32,26667,26668],{"__ignoreMap":63},[67,26669,26670,26673],{"class":69,"line":70},[67,26671,26672],{"class":110},"lerobot-find-cameras",[67,26674,26675],{"class":114}," opencv\n",[58,26677,26679],{"className":101,"code":26678,"language":103,"meta":63,"style":63},"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",[32,26680,26681,26687,26693,26699,26705,26715,26721,26727,26734],{"__ignoreMap":63},[67,26682,26683,26685],{"class":69,"line":70},[67,26684,26621],{"class":110},[67,26686,26470],{"class":77},[67,26688,26689,26691],{"class":69,"line":191},[67,26690,26502],{"class":77},[67,26692,26470],{"class":77},[67,26694,26695,26697],{"class":69,"line":202},[67,26696,26580],{"class":77},[67,26698,26470],{"class":77},[67,26700,26701,26703],{"class":69,"line":641},[67,26702,26640],{"class":77},[67,26704,26470],{"class":77},[67,26706,26707,26710,26713],{"class":69,"line":655},[67,26708,26709],{"class":77},"  --robot.cameras=",[67,26711,26712],{"class":114},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[67,26714,26470],{"class":77},[67,26716,26717,26719],{"class":69,"line":660},[67,26718,26475],{"class":77},[67,26720,26470],{"class":77},[67,26722,26723,26725],{"class":69,"line":665},[67,26724,26547],{"class":77},[67,26726,26470],{"class":77},[67,26728,26729,26732],{"class":69,"line":677},[67,26730,26731],{"class":77},"  --teleop.id=my_awesome_leader_arm",[67,26733,26470],{"class":77},[67,26735,26736],{"class":69,"line":683},[67,26737,26738],{"class":77},"  --display_data=true\n",[19,26740,26741],{},"相机参数说明：",[2994,26743,26744,26750,26756,26765,26775,26781],{},[29,26745,26746,26749],{},[32,26747,26748],{},"front","：相机名称。",[29,26751,26752,26755],{},[32,26753,26754],{},"type: opencv","：相机驱动类型。",[29,26757,26758,26761,26762,26355],{},[32,26759,26760],{},"index_or_path","：设备编号或设备路径（如 ",[32,26763,26764],{},"\u002Fdev\u002Fvideo4",[29,26766,26767,26770,26771,26774],{},[32,26768,26769],{},"width"," \u002F ",[32,26772,26773],{},"height","：图像分辨率。",[29,26776,26777,26780],{},[32,26778,26779],{},"fps","：采样帧率。",[29,26782,26783,26786],{},[32,26784,26785],{},"--display_data=true","：启用实时可视化。",[1903,26788,26789],{},"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":63,"searchDepth":191,"depth":191,"links":26791},[26792,26793],{"id":26610,"depth":191,"text":26611},{"id":26661,"depth":191,"text":26662},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26602,"description":25173},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26800,"title":26801,"body":26802,"description":25173,"extension":1930,"meta":26972,"navigation":630,"path":26973,"seo":26974,"stem":26975,"__hash__":26976},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26803,"toc":26967},[26804,26808,26812,26817,26822,26825,26867,26873,26877,26924,26929,26933,26936,26944,26949,26954,26959,26964],[10,26805,26807],{"id":26806},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26809,26811],{"id":26810},"_51-生成访问令牌","5.1 生成访问令牌",[19,26813,26814],{},[3317,26815],{"alt":63,"src":26816},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26818,26819],{},[3317,26820],{"alt":63,"src":26821},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26823,26824],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[58,26826,26828],{"className":101,"code":26827,"language":103,"meta":63,"style":63},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[32,26829,26830,26843],{"__ignoreMap":63},[67,26831,26832,26835,26838,26840],{"class":69,"line":70},[67,26833,26834],{"class":84},"export",[67,26836,26837],{"class":73}," HF_TOKEN",[67,26839,85],{"class":84},[67,26841,26842],{"class":114},"\"your_huggingface_token\"\n",[67,26844,26845,26848,26851,26854,26857,26859,26862,26864],{"class":69,"line":191},[67,26846,26847],{"class":110},"hf",[67,26849,26850],{"class":114}," auth",[67,26852,26853],{"class":114}," login",[67,26855,26856],{"class":77}," --token",[67,26858,11529],{"class":114},[67,26860,26861],{"class":73},"$HF_TOKEN",[67,26863,2243],{"class":114},[67,26865,26866],{"class":77}," --add-to-git-credential\n",[19,26868,26869,26872],{},[32,26870,26871],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26874,26876],{"id":26875},"_52-验证登录","5.2 验证登录",[58,26878,26880],{"className":101,"code":26879,"language":103,"meta":63,"style":63},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[32,26881,26882,26911],{"__ignoreMap":63},[67,26883,26884,26887,26889,26892,26894,26896,26899,26902,26905,26907,26909],{"class":69,"line":70},[67,26885,26886],{"class":73},"HF_USER",[67,26888,85],{"class":84},[67,26890,26891],{"class":73},"$(",[67,26893,26847],{"class":110},[67,26895,26850],{"class":114},[67,26897,26898],{"class":114}," whoami",[67,26900,26901],{"class":84}," |",[67,26903,26904],{"class":110}," head",[67,26906,176],{"class":77},[67,26908,906],{"class":77},[67,26910,829],{"class":73},[67,26912,26913,26916,26918,26921],{"class":69,"line":191},[67,26914,26915],{"class":77},"echo",[67,26917,11529],{"class":114},[67,26919,26920],{"class":73},"$HF_USER",[67,26922,26923],{"class":114},"\"\n",[19,26925,26926],{},[3317,26927],{"alt":63,"src":26928},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26930,26932],{"id":26931},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26934,26935],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[2994,26937,26938,26941],{},[29,26939,26940],{},"Dataset Repo（用于上传演示数据）",[29,26942,26943],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26945,26946],{},[3317,26947],{"alt":63,"src":26948},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26950,26951],{},[3317,26952],{"alt":63,"src":26953},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26955,26956],{},[3317,26957],{"alt":63,"src":26958},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26960,26961],{},[3317,26962],{"alt":63,"src":26963},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1903,26965,26966],{},"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":63,"searchDepth":191,"depth":191,"links":26968},[26969,26970,26971],{"id":26810,"depth":191,"text":26811},{"id":26875,"depth":191,"text":26876},{"id":26931,"depth":191,"text":26932},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26801,"description":25173},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26978,"title":26979,"body":26980,"description":25173,"extension":1930,"meta":27177,"navigation":630,"path":27178,"seo":27179,"stem":27180,"__hash__":27181},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26981,"toc":27172},[26982,26986,26990,27086,27094,27099,27103,27119,27122,27126,27169],[10,26983,26985],{"id":26984},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26987,26989],{"id":26988},"_61-录制示教数据","6.1 录制示教数据",[58,26991,26993],{"className":101,"code":26992,"language":103,"meta":63,"style":63},"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",[32,26994,26995,27002,27008,27014,27020,27029,27035,27041,27047,27054,27064,27071,27081],{"__ignoreMap":63},[67,26996,26997,27000],{"class":69,"line":70},[67,26998,26999],{"class":110},"lerobot-record",[67,27001,26470],{"class":77},[67,27003,27004,27006],{"class":69,"line":191},[67,27005,26502],{"class":77},[67,27007,26470],{"class":77},[67,27009,27010,27012],{"class":69,"line":202},[67,27011,26580],{"class":77},[67,27013,26470],{"class":77},[67,27015,27016,27018],{"class":69,"line":641},[67,27017,26640],{"class":77},[67,27019,26470],{"class":77},[67,27021,27022,27024,27027],{"class":69,"line":655},[67,27023,26709],{"class":77},[67,27025,27026],{"class":114},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[67,27028,26470],{"class":77},[67,27030,27031,27033],{"class":69,"line":660},[67,27032,26475],{"class":77},[67,27034,26470],{"class":77},[67,27036,27037,27039],{"class":69,"line":665},[67,27038,26547],{"class":77},[67,27040,26470],{"class":77},[67,27042,27043,27045],{"class":69,"line":677},[67,27044,26731],{"class":77},[67,27046,26470],{"class":77},[67,27048,27049,27052],{"class":69,"line":683},[67,27050,27051],{"class":77},"  --display_data=true",[67,27053,26470],{"class":77},[67,27055,27056,27059,27062],{"class":69,"line":689},[67,27057,27058],{"class":77},"  --dataset.repo_id=",[67,27060,27061],{"class":114},"\"Embodied-AI-6\u002Fso101_test\"",[67,27063,26470],{"class":77},[67,27065,27066,27069],{"class":69,"line":694},[67,27067,27068],{"class":77},"  --dataset.num_episodes=10",[67,27070,26470],{"class":77},[67,27072,27073,27076,27079],{"class":69,"line":700},[67,27074,27075],{"class":77},"  --dataset.single_task=",[67,27077,27078],{"class":114},"\"Grab the green cube\"",[67,27080,26470],{"class":77},[67,27082,27083],{"class":69,"line":706},[67,27084,27085],{"class":77},"  --resume=true\n",[2994,27087,27088],{},[29,27089,27090,27093],{},[32,27091,27092],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27095,27096],{},[3317,27097],{"alt":63,"src":27098},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27100,27102],{"id":27101},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[58,27104,27106],{"className":101,"code":27105,"language":103,"meta":63,"style":63},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[32,27107,27108],{"__ignoreMap":63},[67,27109,27110,27113,27116],{"class":69,"line":70},[67,27111,27112],{"class":110},"rm",[67,27114,27115],{"class":77}," -rf",[67,27117,27118],{"class":114}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27120,27121],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27123,27125],{"id":27124},"_63-回放指定-episode","6.3 回放指定 episode",[58,27127,27129],{"className":101,"code":27128,"language":103,"meta":63,"style":63},"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",[32,27130,27131,27138,27144,27150,27156,27164],{"__ignoreMap":63},[67,27132,27133,27136],{"class":69,"line":70},[67,27134,27135],{"class":110},"lerobot-replay",[67,27137,26470],{"class":77},[67,27139,27140,27142],{"class":69,"line":191},[67,27141,26502],{"class":77},[67,27143,26470],{"class":77},[67,27145,27146,27148],{"class":69,"line":202},[67,27147,26580],{"class":77},[67,27149,26470],{"class":77},[67,27151,27152,27154],{"class":69,"line":641},[67,27153,26640],{"class":77},[67,27155,26470],{"class":77},[67,27157,27158,27160,27162],{"class":69,"line":655},[67,27159,27058],{"class":77},[67,27161,27061],{"class":114},[67,27163,26470],{"class":77},[67,27165,27166],{"class":69,"line":660},[67,27167,27168],{"class":77},"  --dataset.episode=0\n",[1903,27170,27171],{},"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":63,"searchDepth":191,"depth":191,"links":27173},[27174,27175,27176],{"id":26988,"depth":191,"text":26989},{"id":27101,"depth":191,"text":27102},{"id":27124,"depth":191,"text":27125},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26979,"description":25173},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27183,"title":27184,"body":27185,"description":25173,"extension":1930,"meta":27313,"navigation":630,"path":27314,"seo":27315,"stem":27316,"__hash__":27317},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27186,"toc":27311},[27187,27191,27254,27257,27304,27309],[10,27188,27190],{"id":27189},"_7-act-模型训练","7. ACT 模型训练",[58,27192,27194],{"className":101,"code":27193,"language":103,"meta":63,"style":63},"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",[32,27195,27196,27203,27211,27218,27225,27232,27239,27246],{"__ignoreMap":63},[67,27197,27198,27201],{"class":69,"line":70},[67,27199,27200],{"class":110},"lerobot-train",[67,27202,26470],{"class":77},[67,27204,27205,27207,27209],{"class":69,"line":191},[67,27206,27058],{"class":77},[67,27208,27061],{"class":114},[67,27210,26470],{"class":77},[67,27212,27213,27216],{"class":69,"line":202},[67,27214,27215],{"class":77},"  --policy.type=act",[67,27217,26470],{"class":77},[67,27219,27220,27223],{"class":69,"line":641},[67,27221,27222],{"class":77},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[67,27224,26470],{"class":77},[67,27226,27227,27230],{"class":69,"line":655},[67,27228,27229],{"class":77},"  --job_name=act_so101_test",[67,27231,26470],{"class":77},[67,27233,27234,27237],{"class":69,"line":660},[67,27235,27236],{"class":77},"  --policy.device=cuda",[67,27238,26470],{"class":77},[67,27240,27241,27244],{"class":69,"line":665},[67,27242,27243],{"class":77},"  --wandb.enable=false",[67,27245,26470],{"class":77},[67,27247,27248,27251],{"class":69,"line":677},[67,27249,27250],{"class":77},"  --policy.repo_id=",[67,27252,27253],{"class":114},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27255,27256],{},"参数说明：",[2994,27258,27259,27265,27271,27277,27283,27292,27298],{},[29,27260,27261,27264],{},[32,27262,27263],{},"--dataset.repo_id","：训练数据集仓库。",[29,27266,27267,27270],{},[32,27268,27269],{},"--policy.type=act","：策略模型类型为 ACT。",[29,27272,27273,27276],{},[32,27274,27275],{},"--output_dir","：本地训练输出目录。",[29,27278,27279,27282],{},[32,27280,27281],{},"--job_name","：训练任务名称。",[29,27284,27285,27288,27289,26355],{},[32,27286,27287],{},"--policy.device","：训练设备（如 ",[32,27290,27291],{},"cuda",[29,27293,27294,27297],{},[32,27295,27296],{},"--wandb.enable","：是否启用 WandB 可视化。",[29,27299,27300,27303],{},[32,27301,27302],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27305,27306],{},[3317,27307],{"alt":63,"src":27308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1903,27310,27171],{},{"title":63,"searchDepth":191,"depth":191,"links":27312},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27184,"description":25173},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27319,"title":27320,"body":27321,"description":25173,"extension":1930,"meta":27408,"navigation":630,"path":27409,"seo":27410,"stem":27411,"__hash__":27412},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27322,"toc":27406},[27323,27326,27329,27396,27404],[10,27324,27320],{"id":27325},"_8-策略部署与自动采集",[19,27327,27328],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[58,27330,27332],{"className":101,"code":27331,"language":103,"meta":63,"style":63},"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",[32,27333,27334,27340,27346,27352,27360,27366,27373,27381,27389],{"__ignoreMap":63},[67,27335,27336,27338],{"class":69,"line":70},[67,27337,26999],{"class":110},[67,27339,26470],{"class":77},[67,27341,27342,27344],{"class":69,"line":191},[67,27343,26502],{"class":77},[67,27345,26470],{"class":77},[67,27347,27348,27350],{"class":69,"line":202},[67,27349,26580],{"class":77},[67,27351,26470],{"class":77},[67,27353,27354,27356,27358],{"class":69,"line":641},[67,27355,26709],{"class":77},[67,27357,27026],{"class":114},[67,27359,26470],{"class":77},[67,27361,27362,27364],{"class":69,"line":655},[67,27363,26640],{"class":77},[67,27365,26470],{"class":77},[67,27367,27368,27371],{"class":69,"line":660},[67,27369,27370],{"class":77},"  --display_data=false",[67,27372,26470],{"class":77},[67,27374,27375,27377,27379],{"class":69,"line":665},[67,27376,27058],{"class":77},[67,27378,27061],{"class":114},[67,27380,26470],{"class":77},[67,27382,27383,27385,27387],{"class":69,"line":677},[67,27384,27075],{"class":77},[67,27386,27078],{"class":114},[67,27388,26470],{"class":77},[67,27390,27391,27394],{"class":69,"line":683},[67,27392,27393],{"class":77},"  --policy.path=",[67,27395,27253],{"class":114},[2994,27397,27398],{},[29,27399,27400,27403],{},[32,27401,27402],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1903,27405,27171],{},{"title":63,"searchDepth":191,"depth":191,"links":27407},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27320,"description":25173},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27414,"title":27415,"body":27416,"description":25173,"extension":1930,"meta":27445,"navigation":630,"path":27446,"seo":27447,"stem":27448,"__hash__":27449},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27417,"toc":27443},[27418,27422,27425,27431,27434,27440],[10,27419,27421],{"id":27420},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27423,27424],{},"项目地址：",[19,27426,27427],{},[2230,27428,27429],{"href":27429,"rel":27430},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25657],[19,27432,27433],{},"参考教程：",[19,27435,27436],{},[2230,27437,27438],{"href":27438,"rel":27439},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25657],[19,27441,27442],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":63,"searchDepth":191,"depth":191,"links":27444},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27415,"description":25173},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27451,"title":27452,"body":27453,"description":27457,"extension":1930,"meta":27458,"navigation":630,"path":27459,"seo":27460,"stem":27461,"__hash__":27462},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27454,"toc":27455},[],{"title":63,"searchDepth":191,"depth":191,"links":27456},[],"act复现",{"category":25175},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27452,"description":27457},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27464,"title":27465,"body":27466,"description":63,"extension":1930,"meta":27767,"navigation":630,"path":27768,"seo":27769,"stem":27770,"__hash__":27771},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27467,"toc":27759},[27468,27471,27475,27485,27492,27499,27502,27509,27512,27515,27519,27531,27535,27580,27583,27586,27589,27592,27595,27599,27637,27643,27647,27701,27706,27709,27712,27717,27720,27725,27728,27731,27735,27738,27741,27745],[10,27469,27465],{"id":27470},"_1简介",[391,27472,27474],{"id":27473},"_11什么是-docker","1.1什么是 Docker？",[19,27476,27477,27478,27481,27482],{},"Docker 是一个开源的 ",[2144,27479,27480],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2144,27483,27484],{},"一次构建，到处运行。",[19,27486,27487,27488,27491],{},"“ ",[2144,27489,27490],{},"一次构建，到处运行"," ”也就是说：",[26,27493,27494],{},[29,27495,27496],{},[2144,27497,27498],{},"之前：",[19,27500,27501],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[26,27503,27504],{},[29,27505,27506],{},[2144,27507,27508],{},"使用docker后：",[19,27510,27511],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27513,27514],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[391,27516,27518],{"id":27517},"_12它是怎么工作的","1.2.它是怎么工作的？",[2994,27520,27521,27524],{},[29,27522,27523],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[29,27525,27526,27527,27530],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2144,27528,27529],{},"无论在哪运行都一样稳定"," 。",[391,27532,27534],{"id":27533},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[399,27536,27537,27546],{},[402,27538,27539],{},[405,27540,27541,27543],{},[408,27542,411],{"align":410},[408,27544,27545],{"align":410},"解释",[419,27547,27548,27556,27564,27572],{},[405,27549,27550,27553],{},[424,27551,27552],{"align":410},"镜像",[424,27554,27555],{"align":410},"Image，运行容器的模板，像是一个应用快照",[405,27557,27558,27561],{},[424,27559,27560],{"align":410},"容器",[424,27562,27563],{"align":410},"Container，运行中的镜像实例，有自己的文件系统、网络等",[405,27565,27566,27569],{},[424,27567,27568],{"align":410},"Dockerfile",[424,27570,27571],{"align":410},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[405,27573,27574,27577],{},[424,27575,27576],{"align":410},"仓库",[424,27578,27579],{"align":410},"Registry，存放镜像的地方，比如 Docker Hub",[19,27581,27582],{},"抽象化理解:",[19,27584,27585],{},"Docker镜像≈C++类",[19,27587,27588],{},"Docker容器≈C++类实例(即对象)",[19,27590,27591],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27593,27594],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[391,27596,27598],{"id":27597},"_14类比理解","1.4.类比理解",[399,27600,27601,27611],{},[402,27602,27603],{},[405,27604,27605,27608],{},[408,27606,27607],{"align":410},"传统部署",[408,27609,27610],{"align":410},"Docker部署",[419,27612,27613,27621,27629],{},[405,27614,27615,27618],{},[424,27616,27617],{"align":410},"手动安装依赖、调试版本不一致问题",[424,27619,27620],{"align":410},"一次打包环境和代码",[405,27622,27623,27626],{},[424,27624,27625],{"align":410},"程序“裸奔”跑在系统上",[424,27627,27628],{"align":410},"程序“穿着容器”隔离运行",[405,27630,27631,27634],{},[424,27632,27633],{"align":410},"容易“在我电脑上能跑”",[424,27635,27636],{"align":410},"保证“无论在哪都能跑”",[19,27638,27639,27640],{},"就像快递包裹： ",[2144,27641,27642],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[391,27644,27646],{"id":27645},"_15docker-的核心优势","1.5.Docker 的核心优势",[399,27648,27649,27659],{},[402,27650,27651],{},[405,27652,27653,27656],{},[408,27654,27655],{"align":410},"优势",[408,27657,27658],{"align":410},"说明",[419,27660,27661,27669,27677,27685,27693],{},[405,27662,27663,27666],{},[424,27664,27665],{"align":410},"轻量级",[424,27667,27668],{"align":410},"基于系统内核共享，启动速度快，占资源少",[405,27670,27671,27674],{},[424,27672,27673],{"align":410},"跨平台",[424,27675,27676],{"align":410},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[405,27678,27679,27682],{},[424,27680,27681],{"align":410},"易于迁移部署",[424,27683,27684],{"align":410},"应用和环境一起封装，不怕依赖不一致",[405,27686,27687,27690],{},[424,27688,27689],{"align":410},"易于版本控制",[424,27691,27692],{"align":410},"镜像版本可控，支持回滚",[405,27694,27695,27698],{},[424,27696,27697],{"align":410},"生态丰富",[424,27699,27700],{"align":410},"Docker Hub 上有成千上万的现成镜像可用",[26,27702,27703],{},[29,27704,27705],{},"在Linux上可以几乎实现无性能损失。",[19,27707,27708],{},"docker里的发行版和本机共用Linux内核。",[19,27710,27711],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[26,27713,27714],{},[29,27715,27716],{},"可以快速部署在绝大多数Linux发行版",[19,27718,27719],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[26,27721,27722],{},[29,27723,27724],{},"配置环境简单",[19,27726,27727],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27729,27730],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[26,27732,27733],{},[29,27734,27697],{},[19,27736,27737],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27739,27740],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[391,27742,27744],{"id":27743},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[2994,27746,27747,27750,27753,27756],{},[29,27748,27749],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[29,27751,27752],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[29,27754,27755],{},"微服务架构：每个服务一个容器，灵活组合",[29,27757,27758],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":63,"searchDepth":191,"depth":191,"links":27760},[27761,27762,27763,27764,27765,27766],{"id":27473,"depth":202,"text":27474},{"id":27517,"depth":202,"text":27518},{"id":27533,"depth":202,"text":27534},{"id":27597,"depth":202,"text":27598},{"id":27645,"depth":202,"text":27646},{"id":27743,"depth":202,"text":27744},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27465,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27773,"title":27774,"body":27775,"description":63,"extension":1930,"meta":28505,"navigation":630,"path":28506,"seo":28507,"stem":28508,"__hash__":28509},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27776,"toc":28500},[27777,27780,27784,27787,27790,27796,27802,27806,27815,27818,27874,27877,27928,27931,28014,28017,28054,28058,28069,28082,28089,28092,28171,28174,28223,28226,28249,28253,28260,28263,28279,28285,28288,28304,28310,28313,28329,28343,28349,28369,28375,28378,28390,28396,28399,28413,28419,28422,28442,28447,28450,28453,28457,28460,28463,28466,28473,28476,28479,28482,28487,28492,28497],[10,27778,27774],{"id":27779},"_2安装docker",[391,27781,27783],{"id":27782},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27785,27786],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27788,27789],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27791,27792],{},[2230,27793,27794],{"href":27794,"rel":27795},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25657],[19,27797,27798],{},[2230,27799,27800],{"href":27800,"rel":27801},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25657],[23794,27803,27805],{"id":27804},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27807,27808,27809,27814],{},"以下内容根据 ",[2230,27810,27813],{"href":27811,"rel":27812},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25657],"官方文档"," 修改而来。",[19,27816,27817],{},"如果你过去安装过 docker，先删掉：",[58,27819,27821],{"className":101,"code":27820,"language":103,"meta":63,"style":63},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[32,27822,27823],{"__ignoreMap":63},[67,27824,27825,27827,27830,27832,27835,27838,27841,27844,27847,27850,27853,27856,27859,27862,27865,27868,27871],{"class":69,"line":70},[67,27826,1512],{"class":84},[67,27828,27829],{"class":73}," pkg ",[67,27831,941],{"class":84},[67,27833,27834],{"class":114}," docker.io",[67,27836,27837],{"class":114}," docker-doc",[67,27839,27840],{"class":114}," docker-compose",[67,27842,27843],{"class":114}," docker-compose-v2",[67,27845,27846],{"class":114}," podman-docker",[67,27848,27849],{"class":114}," containerd",[67,27851,27852],{"class":114}," runc",[67,27854,27855],{"class":73},"; ",[67,27857,27858],{"class":84},"do",[67,27860,27861],{"class":110}," sudo",[67,27863,27864],{"class":114}," apt-get",[67,27866,27867],{"class":114}," remove",[67,27869,27870],{"class":73}," $pkg; ",[67,27872,27873],{"class":84},"done\n",[19,27875,27876],{},"首先安装依赖和GPG：",[58,27878,27882],{"className":27879,"code":27880,"language":27881,"meta":63,"style":63},"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",[32,27883,27884,27889,27894,27899,27904,27909,27914,27918,27923],{"__ignoreMap":63},[67,27885,27886],{"class":69,"line":70},[67,27887,27888],{},"# Add Docker's official GPG key:\n",[67,27890,27891],{"class":69,"line":191},[67,27892,27893],{},"sudo apt-get update\n",[67,27895,27896],{"class":69,"line":202},[67,27897,27898],{},"sudo apt-get install ca-certificates curl\n",[67,27900,27901],{"class":69,"line":641},[67,27902,27903],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[67,27905,27906],{"class":69,"line":655},[67,27907,27908],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[67,27910,27911],{"class":69,"line":660},[67,27912,27913],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[67,27915,27916],{"class":69,"line":665},[67,27917,631],{"emptyLinePlaceholder":630},[67,27919,27920],{"class":69,"line":677},[67,27921,27922],{},"# 如果上面这行报错就弄下面这行\n",[67,27924,27925],{"class":69,"line":683},[67,27926,27927],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27929,27930],{},"信任 Docker 的 GPG 公钥并添加仓库：",[58,27932,27934],{"className":101,"code":27933,"language":103,"meta":63,"style":63},"# 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",[32,27935,27936,27941,27947,27964,27997],{"__ignoreMap":63},[67,27937,27938],{"class":69,"line":70},[67,27939,27940],{"class":2058},"# Add the repository to Apt sources:\n",[67,27942,27943,27945],{"class":69,"line":191},[67,27944,26915],{"class":77},[67,27946,26470],{"class":77},[67,27948,27949,27952,27955,27958,27961],{"class":69,"line":202},[67,27950,27951],{"class":114},"  \"deb [arch=$(",[67,27953,27954],{"class":110},"dpkg",[67,27956,27957],{"class":77}," --print-architecture",[67,27959,27960],{"class":114},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[67,27962,27963],{"class":77},"\\\n",[67,27965,27966,27969,27971,27973,27976,27979,27981,27983,27986,27988,27990,27993,27995],{"class":69,"line":641},[67,27967,27968],{"class":114},"  \"",[67,27970,26891],{"class":73},[67,27972,2547],{"class":77},[67,27974,27975],{"class":114}," \u002Fetc\u002Fos-release",[67,27977,27978],{"class":73}," && ",[67,27980,26915],{"class":77},[67,27982,11529],{"class":114},[67,27984,27985],{"class":73},"$VERSION_CODENAME",[67,27987,2243],{"class":114},[67,27989,2420],{"class":73},[67,27991,27992],{"class":114},"\" stable\"",[67,27994,26901],{"class":84},[67,27996,26470],{"class":77},[67,27998,27999,28002,28005,28008,28011],{"class":69,"line":655},[67,28000,28001],{"class":110},"  sudo",[67,28003,28004],{"class":114}," tee",[67,28006,28007],{"class":114}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[67,28009,28010],{"class":84}," >",[67,28012,28013],{"class":114}," \u002Fdev\u002Fnull\n",[19,28015,28016],{},"最后安装",[58,28018,28020],{"className":101,"code":28019,"language":103,"meta":63,"style":63},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[32,28021,28022,28031],{"__ignoreMap":63},[67,28023,28024,28026,28028],{"class":69,"line":70},[67,28025,111],{"class":110},[67,28027,27864],{"class":114},[67,28029,28030],{"class":114}," update\n",[67,28032,28033,28035,28037,28039,28042,28045,28048,28051],{"class":69,"line":191},[67,28034,111],{"class":110},[67,28036,27864],{"class":114},[67,28038,118],{"class":114},[67,28040,28041],{"class":114}," docker-ce",[67,28043,28044],{"class":114}," docker-ce-cli",[67,28046,28047],{"class":114}," containerd.io",[67,28049,28050],{"class":114}," docker-buildx-plugin",[67,28052,28053],{"class":114}," docker-compose-plugin\n",[23794,28055,28057],{"id":28056},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28059,28060,28061,28064,28065,28068],{},"查看自己自己包管理工具版本（dnf是 ",[2144,28062,28063],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2144,28066,28067],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[58,28070,28072],{"className":101,"code":28071,"language":103,"meta":63,"style":63},"dnf --version\n",[32,28073,28074],{"__ignoreMap":63},[67,28075,28076,28079],{"class":69,"line":70},[67,28077,28078],{"class":110},"dnf",[67,28080,28081],{"class":77}," --version\n",[19,28083,27808,28084,28088],{},[2230,28085,27813],{"href":28086,"rel":28087},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25657]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28090,28091],{},"如果你之前安装过 docker，请先删掉",[58,28093,28095],{"className":101,"code":28094,"language":103,"meta":63,"style":63},"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",[32,28096,28097,28110,28117,28124,28131,28138,28145,28152,28159,28166],{"__ignoreMap":63},[67,28098,28099,28101,28103,28105,28108],{"class":69,"line":70},[67,28100,111],{"class":110},[67,28102,115],{"class":114},[67,28104,27867],{"class":114},[67,28106,28107],{"class":114}," docker",[67,28109,26470],{"class":77},[67,28111,28112,28115],{"class":69,"line":191},[67,28113,28114],{"class":114},"                  docker-client",[67,28116,26470],{"class":77},[67,28118,28119,28122],{"class":69,"line":202},[67,28120,28121],{"class":114},"                  docker-client-latest",[67,28123,26470],{"class":77},[67,28125,28126,28129],{"class":69,"line":641},[67,28127,28128],{"class":114},"                  docker-common",[67,28130,26470],{"class":77},[67,28132,28133,28136],{"class":69,"line":655},[67,28134,28135],{"class":114},"                  docker-latest",[67,28137,26470],{"class":77},[67,28139,28140,28143],{"class":69,"line":660},[67,28141,28142],{"class":114},"                  docker-latest-logrotate",[67,28144,26470],{"class":77},[67,28146,28147,28150],{"class":69,"line":665},[67,28148,28149],{"class":114},"                  docker-logrotate",[67,28151,26470],{"class":77},[67,28153,28154,28157],{"class":69,"line":677},[67,28155,28156],{"class":114},"                  docker-selinux",[67,28158,26470],{"class":77},[67,28160,28161,28164],{"class":69,"line":683},[67,28162,28163],{"class":114},"                  docker-engine-selinux",[67,28165,26470],{"class":77},[67,28167,28168],{"class":69,"line":689},[67,28169,28170],{"class":114},"                  docker-engine\n",[19,28172,28173],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[58,28175,28177],{"className":101,"code":28176,"language":103,"meta":63,"style":63},"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",[32,28178,28179,28192,28207],{"__ignoreMap":63},[67,28180,28181,28183,28185,28187,28189],{"class":69,"line":70},[67,28182,111],{"class":110},[67,28184,115],{"class":114},[67,28186,121],{"class":77},[67,28188,118],{"class":114},[67,28190,28191],{"class":114}," dnf-plugins-core\n",[67,28193,28194,28196,28198,28201,28204],{"class":69,"line":191},[67,28195,111],{"class":110},[67,28197,115],{"class":114},[67,28199,28200],{"class":114}," config-manager",[67,28202,28203],{"class":114}," addrepo",[67,28205,28206],{"class":77}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[67,28208,28209,28211,28214,28217,28220],{"class":69,"line":202},[67,28210,111],{"class":110},[67,28212,28213],{"class":114}," sed",[67,28215,28216],{"class":77}," -i",[67,28218,28219],{"class":114}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[67,28221,28222],{"class":114}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28224,28225],{},"最后安装：",[58,28227,28229],{"className":101,"code":28228,"language":103,"meta":63,"style":63},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[32,28230,28231],{"__ignoreMap":63},[67,28232,28233,28235,28237,28239,28241,28243,28245,28247],{"class":69,"line":70},[67,28234,111],{"class":110},[67,28236,115],{"class":114},[67,28238,118],{"class":114},[67,28240,28041],{"class":114},[67,28242,28044],{"class":114},[67,28244,28047],{"class":114},[67,28246,28050],{"class":114},[67,28248,28053],{"class":114},[391,28250,28252],{"id":28251},"_22配置环境","2.2.配置环境",[23794,28254,28256,28259],{"id":28255},"_221检查-docker-服务状态",[2144,28257,28258],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28261,28262],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[58,28264,28266],{"className":101,"code":28265,"language":103,"meta":63,"style":63},"systemctl status docker\n",[32,28267,28268],{"__ignoreMap":63},[67,28269,28270,28273,28276],{"class":69,"line":70},[67,28271,28272],{"class":110},"systemctl",[67,28274,28275],{"class":114}," status",[67,28277,28278],{"class":114}," docker\n",[23794,28280,28282,28259],{"id":28281},"_222启动-docker-服务",[2144,28283,28284],{},"2.2.2.启动 Docker 服务",[19,28286,28287],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[58,28289,28291],{"className":101,"code":28290,"language":103,"meta":63,"style":63},"sudo systemctl start docker\n",[32,28292,28293],{"__ignoreMap":63},[67,28294,28295,28297,28300,28302],{"class":69,"line":70},[67,28296,111],{"class":110},[67,28298,28299],{"class":114}," systemctl",[67,28301,6004],{"class":114},[67,28303,28278],{"class":114},[23794,28305,28307,28259],{"id":28306},"_223设置-docker-开机自启",[2144,28308,28309],{},"2.2.3.设置 Docker 开机自启",[19,28311,28312],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[58,28314,28316],{"className":101,"code":28315,"language":103,"meta":63,"style":63},"sudo systemctl enable docker\n",[32,28317,28318],{"__ignoreMap":63},[67,28319,28320,28322,28324,28327],{"class":69,"line":70},[67,28321,111],{"class":110},[67,28323,28299],{"class":114},[67,28325,28326],{"class":114}," enable",[67,28328,28278],{"class":114},[23794,28330,28332,15593,28335,15593,28340,28259],{"id":28331},"_224将用户添加到-docker-组",[2144,28333,28334],{},"2.2.4.将用户添加到",[2144,28336,28337],{},[32,28338,28339],{},"docker",[2144,28341,28342],{},"组",[19,28344,28345,28346,28348],{},"使用以下命令将当前用户添加到 ",[32,28347,28339],{}," 组：",[58,28350,28352],{"className":101,"code":28351,"language":103,"meta":63,"style":63},"sudo usermod -aG docker $USER\n",[32,28353,28354],{"__ignoreMap":63},[67,28355,28356,28358,28361,28364,28366],{"class":69,"line":70},[67,28357,111],{"class":110},[67,28359,28360],{"class":114}," usermod",[67,28362,28363],{"class":77}," -aG",[67,28365,28107],{"class":114},[67,28367,28368],{"class":73}," $USER\n",[23794,28370,28372,28259],{"id":28371},"_225退出并重新登录",[2144,28373,28374],{},"2.2.5.退出并重新登录",[19,28376,28377],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[58,28379,28381],{"className":101,"code":28380,"language":103,"meta":63,"style":63},"newgrp docker\n",[32,28382,28383],{"__ignoreMap":63},[67,28384,28385,28388],{"class":69,"line":70},[67,28386,28387],{"class":110},"newgrp",[67,28389,28278],{"class":114},[23794,28391,28393,28259],{"id":28392},"_226重新启动-docker-服务如果需要",[2144,28394,28395],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28397,28398],{},"确保 Docker 服务正在运行，可以使用以下命令：",[58,28400,28401],{"className":101,"code":28290,"language":103,"meta":63,"style":63},[32,28402,28403],{"__ignoreMap":63},[67,28404,28405,28407,28409,28411],{"class":69,"line":70},[67,28406,111],{"class":110},[67,28408,28299],{"class":114},[67,28410,6004],{"class":114},[67,28412,28278],{"class":114},[23794,28414,28416,28259],{"id":28415},"_227重启电脑后检查-docker-服务状态",[2144,28417,28418],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28420,28421],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[58,28423,28425],{"className":101,"code":28424,"language":103,"meta":63,"style":63},"sudo reboot\nsystemctl status docker\n",[32,28426,28427,28434],{"__ignoreMap":63},[67,28428,28429,28431],{"class":69,"line":70},[67,28430,111],{"class":110},[67,28432,28433],{"class":114}," reboot\n",[67,28435,28436,28438,28440],{"class":69,"line":191},[67,28437,28272],{"class":110},[67,28439,28275],{"class":114},[67,28441,28278],{"class":114},[19,28443,28444],{},[3317,28445],{"alt":63,"src":28446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28448,28449],{},"第三行显示enabled说明开机自启动成功",[19,28451,28452],{},"按q退出",[391,28454,28456],{"id":28455},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28458,28459],{},"优先使用linux来使用docker是比较好的",[19,28461,28462],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28464,28465],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28467,28468,28469],{},"官方下载安装:",[2230,28470,28471],{"href":28471,"rel":28472},"https:\u002F\u002Fwww.docker.com\u002F",[25657],[19,28474,28475],{},"Windows的Docker显卡直通与USB直通:",[19,28477,28478],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28480,28481],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28483,28484],{},[3317,28485],{"alt":63,"src":28486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28488,28489],{},[3317,28490],{"alt":63,"src":28491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28493,28494],{},[3317,28495],{"alt":63,"src":28496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1903,28498,28499],{},"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":63,"searchDepth":191,"depth":191,"links":28501},[28502,28503,28504],{"id":27782,"depth":202,"text":27783},{"id":28251,"depth":202,"text":28252},{"id":28455,"depth":202,"text":28456},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27774,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28511,"title":28512,"body":28513,"description":28520,"extension":1930,"meta":29213,"navigation":630,"path":29214,"seo":29215,"stem":29216,"__hash__":29217},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28514,"toc":29207},[28515,28518,28521,28525,28530,28535,28538,28566,28571,28580,28583,28588,28592,28599,28604,28610,28614,28617,28621,28626,28718,28723,28741,28746,28767,28772,28788,28792,28797,28826,28831,28877,28882,28926,28934,28951,28956,28972,28977,28991,28994,28997,29000,29003,29032,29035,29040,29044,29047,29050,29056,29059,29062,29065,29127,29134,29139,29142,29160,29164,29167,29184,29187,29190,29204],[10,28516,28512],{"id":28517},"_3docker直通",[19,28519,28520],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[391,28522,28524],{"id":28523},"_31usb直通","3.1.USB直通",[19,28526,28527],{},[3317,28528],{"alt":63,"src":28529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[26,28531,28532],{},[29,28533,28534],{},"方法一(不是很推荐新手)：",[19,28536,28537],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[58,28539,28541],{"className":101,"code":28540,"language":103,"meta":63,"style":63},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[32,28542,28543,28551,28556],{"__ignoreMap":63},[67,28544,28545,28548],{"class":69,"line":70},[67,28546,28547],{"class":110},"ls",[67,28549,28550],{"class":114}," \u002Fdev\n",[67,28552,28553],{"class":69,"line":191},[67,28554,28555],{"class":2058},"#例如\n",[67,28557,28558,28561,28563],{"class":69,"line":202},[67,28559,28560],{"class":73},"--device",[67,28562,85],{"class":84},[67,28564,28565],{"class":114},"\u002Fdev\u002Ftty_USB0\n",[26,28567,28568],{"start":191},[29,28569,28570],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[58,28572,28574],{"className":101,"code":28573,"language":103,"meta":63,"style":63},"--privileged\n",[32,28575,28576],{"__ignoreMap":63},[67,28577,28578],{"class":69,"line":70},[67,28579,28573],{"class":110},[19,28581,28582],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28584,28585],{},[3317,28586],{"alt":63,"src":28587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[391,28589,28591],{"id":28590},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28593,28594,28595,28598],{},"NVIDIA Container Toolkit使用户 ",[2144,28596,28597],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28600,28601],{},[3317,28602],{"alt":63,"src":28603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28605,28606],{},[2230,28607,28608],{"href":28608,"rel":28609},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25657],[23794,28611,28613],{"id":28612},"_321安装","3.2.1.安装",[19,28615,28616],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24706,28618,28620],{"id":28619},"_3211ubuntu","3.2.1.1.Ubuntu",[26,28622,28623],{},[29,28624,28625],{},"配置存储库 并更新",[58,28627,28629],{"className":101,"code":28628,"language":103,"meta":63,"style":63},"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",[32,28630,28631,28660,28680,28692,28704,28710],{"__ignoreMap":63},[67,28632,28633,28636,28639,28642,28644,28646,28649,28652,28655,28658],{"class":69,"line":70},[67,28634,28635],{"class":110},"curl",[67,28637,28638],{"class":77}," -fsSL",[67,28640,28641],{"class":114}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[67,28643,26901],{"class":84},[67,28645,27861],{"class":110},[67,28647,28648],{"class":114}," gpg",[67,28650,28651],{"class":77}," --dearmor",[67,28653,28654],{"class":77}," -o",[67,28656,28657],{"class":114}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[67,28659,26470],{"class":77},[67,28661,28662,28665,28667,28670,28673,28676,28678],{"class":69,"line":191},[67,28663,28664],{"class":73},"  && ",[67,28666,28635],{"class":110},[67,28668,28669],{"class":77}," -s",[67,28671,28672],{"class":77}," -L",[67,28674,28675],{"class":114}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[67,28677,26901],{"class":84},[67,28679,26470],{"class":77},[67,28681,28682,28685,28688,28690],{"class":69,"line":202},[67,28683,28684],{"class":110},"    sed",[67,28686,28687],{"class":114}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[67,28689,26901],{"class":84},[67,28691,26470],{"class":77},[67,28693,28694,28697,28699,28702],{"class":69,"line":641},[67,28695,28696],{"class":110},"    sudo",[67,28698,28004],{"class":114},[67,28700,28701],{"class":114}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[67,28703,26470],{"class":77},[67,28705,28706,28708],{"class":69,"line":655},[67,28707,28664],{"class":73},[67,28709,27963],{"class":77},[67,28711,28712,28714,28716],{"class":69,"line":660},[67,28713,28696],{"class":110},[67,28715,27864],{"class":114},[67,28717,28030],{"class":114},[26,28719,28720],{"start":191},[29,28721,28722],{},"安装nvidia-docker2",[58,28724,28726],{"className":101,"code":28725,"language":103,"meta":63,"style":63},"sudo apt-get install -y nvidia-docker2\n",[32,28727,28728],{"__ignoreMap":63},[67,28729,28730,28732,28734,28736,28738],{"class":69,"line":70},[67,28731,111],{"class":110},[67,28733,27864],{"class":114},[67,28735,118],{"class":114},[67,28737,121],{"class":77},[67,28739,28740],{"class":114}," nvidia-docker2\n",[26,28742,28743],{"start":202},[29,28744,28745],{},"使用nvidia-ctk命令配置container runtime",[58,28747,28749],{"className":101,"code":28748,"language":103,"meta":63,"style":63},"sudo nvidia-ctk runtime configure --runtime=docker\n",[32,28750,28751],{"__ignoreMap":63},[67,28752,28753,28755,28758,28761,28764],{"class":69,"line":70},[67,28754,111],{"class":110},[67,28756,28757],{"class":114}," nvidia-ctk",[67,28759,28760],{"class":114}," runtime",[67,28762,28763],{"class":114}," configure",[67,28765,28766],{"class":77}," --runtime=docker\n",[26,28768,28769],{"start":641},[29,28770,28771],{},"重启docker服务:",[58,28773,28775],{"className":101,"code":28774,"language":103,"meta":63,"style":63},"sudo systemctl restart docker\n",[32,28776,28777],{"__ignoreMap":63},[67,28778,28779,28781,28783,28786],{"class":69,"line":70},[67,28780,111],{"class":110},[67,28782,28299],{"class":114},[67,28784,28785],{"class":114}," restart",[67,28787,28278],{"class":114},[24706,28789,28791],{"id":28790},"_3212fedora","3.2.1.2.Fedora",[26,28793,28794],{},[29,28795,28796],{},"配置存储库",[58,28798,28800],{"className":101,"code":28799,"language":103,"meta":63,"style":63},"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",[32,28801,28802,28817],{"__ignoreMap":63},[67,28803,28804,28806,28808,28810,28813,28815],{"class":69,"line":70},[67,28805,28635],{"class":110},[67,28807,28669],{"class":77},[67,28809,28672],{"class":77},[67,28811,28812],{"class":114}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[67,28814,26901],{"class":84},[67,28816,26470],{"class":77},[67,28818,28819,28821,28823],{"class":69,"line":191},[67,28820,111],{"class":110},[67,28822,28004],{"class":114},[67,28824,28825],{"class":114}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[26,28827,28828],{"start":191},[29,28829,28830],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[58,28832,28834],{"className":101,"code":28833,"language":103,"meta":63,"style":63},"# 如果是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",[32,28835,28836,28841,28855,28859,28864],{"__ignoreMap":63},[67,28837,28838],{"class":69,"line":70},[67,28839,28840],{"class":2058},"# 如果是RHEL或者Rocky（DNF4）\n",[67,28842,28843,28845,28847,28849,28852],{"class":69,"line":191},[67,28844,111],{"class":110},[67,28846,115],{"class":114},[67,28848,28200],{"class":114},[67,28850,28851],{"class":77}," --add-repo",[67,28853,28854],{"class":114}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[67,28856,28857],{"class":69,"line":202},[67,28858,631],{"emptyLinePlaceholder":630},[67,28860,28861],{"class":69,"line":641},[67,28862,28863],{"class":2058},"# 如果是Feodra41+（DNF5）\n",[67,28865,28866,28868,28870,28872,28874],{"class":69,"line":655},[67,28867,111],{"class":110},[67,28869,115],{"class":114},[67,28871,28200],{"class":114},[67,28873,28203],{"class":114},[67,28875,28876],{"class":77}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[26,28878,28879],{"start":202},[29,28880,28881],{},"安装NVIDIA Container Toolki包",[58,28883,28885],{"className":101,"code":28884,"language":103,"meta":63,"style":63},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[32,28886,28887,28892,28905,28909,28914],{"__ignoreMap":63},[67,28888,28889],{"class":69,"line":70},[67,28890,28891],{"class":2058},"# 如果是RHEL或者Rocky\n",[67,28893,28894,28896,28898,28900,28902],{"class":69,"line":191},[67,28895,111],{"class":110},[67,28897,115],{"class":114},[67,28899,118],{"class":114},[67,28901,121],{"class":77},[67,28903,28904],{"class":114}," nvidia-container-toolkit\n",[67,28906,28907],{"class":69,"line":202},[67,28908,631],{"emptyLinePlaceholder":630},[67,28910,28911],{"class":69,"line":641},[67,28912,28913],{"class":2058},"# 如果是Fedora\n",[67,28915,28916,28918,28920,28922,28924],{"class":69,"line":655},[67,28917,111],{"class":110},[67,28919,115],{"class":114},[67,28921,118],{"class":114},[67,28923,121],{"class":77},[67,28925,28904],{"class":114},[26,28927,28928],{"start":641},[29,28929,28930,28931,28933],{},"安装nvidia-docker2 ： 在Fedora上使用",[32,28932,28078],{},"进行安装",[58,28935,28937],{"className":101,"code":28936,"language":103,"meta":63,"style":63},"sudo dnf install -y nvidia-docker2\n",[32,28938,28939],{"__ignoreMap":63},[67,28940,28941,28943,28945,28947,28949],{"class":69,"line":70},[67,28942,111],{"class":110},[67,28944,115],{"class":114},[67,28946,118],{"class":114},[67,28948,121],{"class":77},[67,28950,28740],{"class":114},[26,28952,28953],{"start":655},[29,28954,28955],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[58,28957,28958],{"className":101,"code":28748,"language":103,"meta":63,"style":63},[32,28959,28960],{"__ignoreMap":63},[67,28961,28962,28964,28966,28968,28970],{"class":69,"line":70},[67,28963,111],{"class":110},[67,28965,28757],{"class":114},[67,28967,28760],{"class":114},[67,28969,28763],{"class":114},[67,28971,28766],{"class":77},[26,28973,28974],{"start":660},[29,28975,28976],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[58,28978,28979],{"className":101,"code":28774,"language":103,"meta":63,"style":63},[32,28980,28981],{"__ignoreMap":63},[67,28982,28983,28985,28987,28989],{"class":69,"line":70},[67,28984,111],{"class":110},[67,28986,28299],{"class":114},[67,28988,28785],{"class":114},[67,28990,28278],{"class":114},[19,28992,28993],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28995,28996],{},"方法：",[19,28998,28999],{},"1️⃣nvidia-smi",[19,29001,29002],{},"2️⃣运行nvidia cuda 容器进行测试",[58,29004,29006],{"className":101,"code":29005,"language":103,"meta":63,"style":63},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[32,29007,29008],{"__ignoreMap":63},[67,29009,29010,29012,29014,29017,29020,29023,29026,29029],{"class":69,"line":70},[67,29011,111],{"class":110},[67,29013,28107],{"class":114},[67,29015,29016],{"class":114}," run",[67,29018,29019],{"class":77}," --rm",[67,29021,29022],{"class":77}," --gpus",[67,29024,29025],{"class":114}," all",[67,29027,29028],{"class":114}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[67,29030,29031],{"class":114}," nvidia-smi\n",[19,29033,29034],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29036,29037],{},[3317,29038],{"alt":63,"src":29039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[391,29041,29043],{"id":29042},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29045,29046],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29048,29049],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29051,29052],{},[2230,29053,29054],{"href":29054,"rel":29055},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25657],[19,29057,29058],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29060,29061],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29063,29064],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[399,29066,29067,29083],{},[402,29068,29069],{},[405,29070,29071,29074,29077,29080],{},[408,29072,29073],{"align":410},"镜像类型",[408,29075,29076],{"align":410},"适用场景",[408,29078,29079],{"align":410},"示例标签",[408,29081,29082],{"align":410},"大小",[419,29084,29085,29099,29113],{},[405,29086,29087,29090,29093,29096],{},[424,29088,29089],{"align":410},"base",[424,29091,29092],{"align":410},"仅需 CUDA 运行时库",[424,29094,29095],{"align":410},"12.4.0-base-ubuntu22.04",[424,29097,29098],{"align":410},"~240MB",[405,29100,29101,29104,29107,29110],{},[424,29102,29103],{"align":410},"runtime",[424,29105,29106],{"align":410},"部署编译后的应用（含数学库）",[424,29108,29109],{"align":410},"12.4.0-runtime-ubuntu22.04",[424,29111,29112],{"align":410},"~2GB",[405,29114,29115,29118,29121,29124],{},[424,29116,29117],{"align":410},"devel",[424,29119,29120],{"align":410},"开发环境（含编译工具）",[424,29122,29123],{"align":410},"12.4.0-devel-ubuntu22.04",[424,29125,29126],{"align":410},"~3GB",[19,29128,29129,29130,29133],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[32,29131,29132],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29135,29136],{},[3317,29137],{"alt":63,"src":29138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29140,29141],{},"在dockerfile里就可以开头这么写：",[58,29143,29145],{"className":101,"code":29144,"language":103,"meta":63,"style":63},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[32,29146,29147,29152],{"__ignoreMap":63},[67,29148,29149],{"class":69,"line":70},[67,29150,29151],{"class":2058},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[67,29153,29154,29157],{"class":69,"line":191},[67,29155,29156],{"class":110},"FROM",[67,29158,29159],{"class":114}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[391,29161,29163],{"id":29162},"_34配置以太网","3.4.配置以太网",[19,29165,29166],{},"指定网络模式",[58,29168,29170],{"className":101,"code":29169,"language":103,"meta":63,"style":63},"--net=host \\\n",[32,29171,29172],{"__ignoreMap":63},[67,29173,29174,29177,29179,29182],{"class":69,"line":70},[67,29175,29176],{"class":73},"--net",[67,29178,85],{"class":84},[67,29180,29181],{"class":114},"host",[67,29183,26470],{"class":110},[19,29185,29186],{},"启动参数里加上这行即可。具体在下方",[19,29188,29189],{},"--net选项：指定网络模式，该选项有以下参数可选：",[2994,29191,29192,29195,29198,29201],{},[29,29193,29194],{},"--net=bridge:默认选项，表示连接到默认的网桥",[29,29196,29197],{},"--net=host:容器使用宿主机的网络",[29,29199,29200],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[29,29202,29203],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1903,29205,29206],{},"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":63,"searchDepth":191,"depth":191,"links":29208},[29209,29210,29211,29212],{"id":28523,"depth":202,"text":28524},{"id":28590,"depth":202,"text":28591},{"id":29042,"depth":202,"text":29043},{"id":29162,"depth":202,"text":29163},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28512,"description":28520},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29219,"title":29220,"body":29221,"description":29228,"extension":1930,"meta":29234,"navigation":630,"path":29235,"seo":29236,"stem":29237,"__hash__":29238},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29222,"toc":29232},[29223,29226,29229],[10,29224,29220],{"id":29225},"_4dockerhub换源",[19,29227,29228],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29230,29231],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":63,"searchDepth":191,"depth":191,"links":29233},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29220,"description":29228},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29240,"title":29241,"body":29242,"description":63,"extension":1930,"meta":30253,"navigation":630,"path":30254,"seo":30255,"stem":30256,"__hash__":30257},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29243,"toc":30248},[29244,29247,29251,29257,29261,29264,29604,29607,29610,29613,29618,29623,29626,29629,29632,29635,29654,29657,29668,29674,29856,29866,29882,30145,30147,30171,30186,30195,30245],[10,29245,29241],{"id":29246},"_5docker命令学习",[391,29248,29250],{"id":29249},"_51参考文档","5.1.参考文档",[19,29252,29253],{},[2230,29254,29255],{"href":29255,"rel":29256},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25657],[391,29258,29260],{"id":29259},"_52常用命令","5.2.常用命令",[19,29262,29263],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[399,29265,29266,29279],{},[402,29267,29268],{},[405,29269,29270,29273,29276],{},[408,29271,29272],{"align":410},"命令",[408,29274,29275],{"align":410},"描述",[408,29277,29278],{"align":410},"示例",[419,29280,29281,29292,29303,29314,29325,29336,29347,29358,29368,29379,29390,29401,29411,29422,29433,29444,29454,29464,29474,29484,29495,29506,29517,29528,29539,29550,29560,29571,29582,29593],{},[405,29282,29283,29286,29289],{},[424,29284,29285],{"align":410},"docker run",[424,29287,29288],{"align":410},"创建并启动一个新的容器。",[424,29290,29291],{"align":410},"docker run -it ubuntu bash",[405,29293,29294,29297,29300],{},[424,29295,29296],{"align":410},"docker build",[424,29298,29299],{"align":410},"通过指定的 Dockerfile 创建一个新的镜像。",[424,29301,29302],{"align":410},"docker build -t myimage .",[405,29304,29305,29308,29311],{},[424,29306,29307],{"align":410},"docker pull",[424,29309,29310],{"align":410},"从 Docker 仓库拉取镜像。",[424,29312,29313],{"align":410},"docker pull ubuntu",[405,29315,29316,29319,29322],{},[424,29317,29318],{"align":410},"docker push",[424,29320,29321],{"align":410},"将本地镜像推送到 Docker 仓库。",[424,29323,29324],{"align":410},"docker push myimage",[405,29326,29327,29330,29333],{},[424,29328,29329],{"align":410},"docker stop",[424,29331,29332],{"align":410},"停止一个正在运行的容器。",[424,29334,29335],{"align":410},"docker stop container_id",[405,29337,29338,29341,29344],{},[424,29339,29340],{"align":410},"docker start",[424,29342,29343],{"align":410},"启动一个已经存在的容器。",[424,29345,29346],{"align":410},"docker start container_id",[405,29348,29349,29352,29355],{},[424,29350,29351],{"align":410},"docker restart",[424,29353,29354],{"align":410},"重新启动容器。",[424,29356,29357],{"align":410},"docker restart container_id",[405,29359,29360,29363,29366],{},[424,29361,29362],{"align":410},"docker ps",[424,29364,29365],{"align":410},"列出当前正在运行的容器。",[424,29367,29362],{"align":410},[405,29369,29370,29373,29376],{},[424,29371,29372],{"align":410},"docker rm",[424,29374,29375],{"align":410},"删除一个或多个停止的容器。",[424,29377,29378],{"align":410},"docker rm container_id",[405,29380,29381,29384,29387],{},[424,29382,29383],{"align":410},"docker exec",[424,29385,29386],{"align":410},"在一个正在运行的容器中执行命令。",[424,29388,29389],{"align":410},"docker exec -it container_id bash",[405,29391,29392,29395,29398],{},[424,29393,29394],{"align":410},"docker logs",[424,29396,29397],{"align":410},"查看容器的日志输出。",[424,29399,29400],{"align":410},"docker logs container_id",[405,29402,29403,29406,29409],{},[424,29404,29405],{"align":410},"docker images",[424,29407,29408],{"align":410},"列出本地所有镜像。",[424,29410,29405],{"align":410},[405,29412,29413,29416,29419],{},[424,29414,29415],{"align":410},"docker rmi",[424,29417,29418],{"align":410},"删除一个或多个镜像。",[424,29420,29421],{"align":410},"docker rmi myimage",[405,29423,29424,29427,29430],{},[424,29425,29426],{"align":410},"docker network",[424,29428,29429],{"align":410},"管理 Docker 网络。",[424,29431,29432],{"align":410},"docker network ls",[405,29434,29435,29438,29441],{},[424,29436,29437],{"align":410},"docker volume",[424,29439,29440],{"align":410},"管理 Docker 数据卷。",[424,29442,29443],{"align":410},"docker volume ls",[405,29445,29446,29449,29452],{},[424,29447,29448],{"align":410},"docker-compose up",[424,29450,29451],{"align":410},"启动 docker-compose.yml 中定义的所有服务。",[424,29453,29448],{"align":410},[405,29455,29456,29459,29462],{},[424,29457,29458],{"align":410},"docker-compose down",[424,29460,29461],{"align":410},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[424,29463,29458],{"align":410},[405,29465,29466,29469,29472],{},[424,29467,29468],{"align":410},"docker info",[424,29470,29471],{"align":410},"显示 Docker 系统的详细信息。",[424,29473,29468],{"align":410},[405,29475,29476,29479,29482],{},[424,29477,29478],{"align":410},"docker stats",[424,29480,29481],{"align":410},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[424,29483,29478],{"align":410},[405,29485,29486,29489,29492],{},[424,29487,29488],{"align":410},"docker inspect",[424,29490,29491],{"align":410},"查看容器或镜像的详细信息（JSON 格式）。",[424,29493,29494],{"align":410},"docker inspect container_id",[405,29496,29497,29500,29503],{},[424,29498,29499],{"align":410},"docker save",[424,29501,29502],{"align":410},"将一个镜像保存为 tar 文件。",[424,29504,29505],{"align":410},"docker save -o myimage.tar myimage",[405,29507,29508,29511,29514],{},[424,29509,29510],{"align":410},"docker load",[424,29512,29513],{"align":410},"从 tar 文件中加载镜像。",[424,29515,29516],{"align":410},"docker load -i myimage.tar",[405,29518,29519,29522,29525],{},[424,29520,29521],{"align":410},"docker tag",[424,29523,29524],{"align":410},"为镜像添加标签（tag）。",[424,29526,29527],{"align":410},"docker tag myimage myimage:v1",[405,29529,29530,29533,29536],{},[424,29531,29532],{"align":410},"docker buildx build",[424,29534,29535],{"align":410},"使用 Buildx 构建多架构镜像。",[424,29537,29538],{"align":410},"docker buildx build -t myimage .",[405,29540,29541,29544,29547],{},[424,29542,29543],{"align":410},"docker buildx create",[424,29545,29546],{"align":410},"创建一个新的 Buildx 构建实例。",[424,29548,29549],{"align":410},"docker buildx create –use",[405,29551,29552,29555,29558],{},[424,29553,29554],{"align":410},"docker buildx ls",[424,29556,29557],{"align":410},"列出所有可用的 Buildx 构建实例。",[424,29559,29554],{"align":410},[405,29561,29562,29565,29568],{},[424,29563,29564],{"align":410},"docker buildx use",[424,29566,29567],{"align":410},"设置当前的 Buildx 构建实例。",[424,29569,29570],{"align":410},"docker buildx use mybuilder",[405,29572,29573,29576,29579],{},[424,29574,29575],{"align":410},"docker buildx bake",[424,29577,29578],{"align":410},"使用 Bake 文件批量构建镜像。",[424,29580,29581],{"align":410},"docker buildx bake -f bake.hcl",[405,29583,29584,29587,29590],{},[424,29585,29586],{"align":410},"docker buildx build –push",[424,29588,29589],{"align":410},"构建镜像并推送到镜像仓库。",[424,29591,29592],{"align":410},"docker buildx build –push -t myimage .",[405,29594,29595,29598,29601],{},[424,29596,29597],{"align":410},"docker buildx build –platform",[424,29599,29600],{"align":410},"构建镜像并为多个平台生成支持。",[424,29602,29603],{"align":410},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29605,29606],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29608,29609],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29611,29612],{},"docker images 可以查看已经下载的镜像",[19,29614,29615],{},[3317,29616],{"alt":63,"src":29617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29619,29620],{},[2144,29621,29622],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29624,29625],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29627,29628],{},"docker container logs 查看容器日志",[19,29630,29631],{},"docker top 查看容器里的进程",[19,29633,29634],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[58,29636,29638],{"className":101,"code":29637,"language":103,"meta":63,"style":63},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[32,29639,29640],{"__ignoreMap":63},[67,29641,29642,29645,29648,29651],{"class":69,"line":70},[67,29643,29644],{"class":110},"如：docker",[67,29646,29647],{"class":114}," cp",[67,29649,29650],{"class":114}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[67,29652,29653],{"class":114}," \u002Fmydata\u002Fnginx\n",[19,29655,29656],{},"docker run时在启动容器的时候会有几个常用的选项：",[2994,29658,29659,29662,29665],{},[29,29660,29661],{},"-d选项：表示后台运行",[29,29663,29664],{},"-P选项：随机端口映射",[29,29666,29667],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[391,29669,29671],{"id":29670},"_53run命令的参数非常重要",[2144,29672,29673],{},"5.3.run命令的参数（非常重要）",[399,29675,29676,29689],{},[402,29677,29678],{},[405,29679,29680,29683,29686],{},[408,29681,29682],{"align":410},"参数\u002F配置",[408,29684,29685],{"align":410},"功能说明",[408,29687,29688],{"align":410},"重要性与参考依据",[419,29690,29691,29702,29713,29724,29735,29746,29757,29768,29779,29790,29801,29812,29823,29834,29845],{},[405,29692,29693,29696,29699],{},[424,29694,29695],{"align":410},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[424,29697,29698],{"align":410},"指定容器名称，便于后续管理",[424,29700,29701],{"align":410},"替代随机生成的容器名。",[405,29703,29704,29707,29710],{},[424,29705,29706],{"align":410},"–gpus all",[424,29708,29709],{"align":410},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[424,29711,29712],{"align":410},"用于CUDA加速等GPU依赖任务。",[405,29714,29715,29718,29721],{},[424,29716,29717],{"align":410},"-e NVIDIA_DRIVER_CAPABILITIES=all",[424,29719,29720],{"align":410},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[424,29722,29723],{"align":410},"确保容器内GPU功能完整67。",[405,29725,29726,29729,29732],{},[424,29727,29728],{"align":410},"-dit",[424,29730,29731],{"align":410},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[424,29733,29734],{"align":410},"允许容器在后台运行并支持交互操作。",[405,29736,29737,29740,29743],{},[424,29738,29739],{"align":410},"–privileged",[424,29741,29742],{"align":410},"赋予容器完全主机权限（可访问设备、内核模块等）",[424,29744,29745],{"align":410},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[405,29747,29748,29751,29754],{},[424,29749,29750],{"align":410},"–net=host",[424,29752,29753],{"align":410},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[424,29755,29756],{"align":410},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[405,29758,29759,29762,29765],{},[424,29760,29761],{"align":410},"–group-add audio–group-add video–group-add dialout",[424,29763,29764],{"align":410},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[424,29766,29767],{"align":410},"避免权限问题（如避免无法调用摄像头、麦克风）。",[405,29769,29770,29773,29776],{},[424,29771,29772],{"align":410},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[424,29774,29775],{"align":410},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[424,29777,29778],{"align":410},"支持容器内运行图形界面应用（如OpenCV可视化）。",[405,29780,29781,29784,29787],{},[424,29782,29783],{"align":410},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[424,29785,29786],{"align":410},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[424,29788,29789],{"align":410},"实现容器内图形显示。",[405,29791,29792,29795,29798],{},[424,29793,29794],{"align":410},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[424,29796,29797],{"align":410},"挂载X11认证文件（只读）",[424,29799,29800],{"align":410},"确保容器有权连接宿主机显示服务。",[405,29802,29803,29806,29809],{},[424,29804,29805],{"align":410},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[424,29807,29808],{"align":410},"挂载Wayland显示协议相关目录",[424,29810,29811],{"align":410},"支持Wayland协议的图形显示。",[405,29813,29814,29817,29820],{},[424,29815,29816],{"align":410},"–ulimit nofile=1024:524288",[424,29818,29819],{"align":410},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[424,29821,29822],{"align":410},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[405,29824,29825,29828,29831],{},[424,29826,29827],{"align":410},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[424,29829,29830],{"align":410},"挂载宿主机用户目录到容器内同名路径",[424,29832,29833],{"align":410},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[405,29835,29836,29839,29842],{},[424,29837,29838],{"align":410},"-w \u002Fhome\u002Ftungchiahui",[424,29840,29841],{"align":410},"设置容器启动后的默认工作目录",[424,29843,29844],{"align":410},"直接进入项目路径，方便执行命令2324。",[405,29846,29847,29850,29853],{},[424,29848,29849],{"align":410},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[424,29851,29852],{"align":410},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[424,29854,29855],{"align":410},"提供预配置的深度学习与机器人开发环境。",[19,29857,29858,29859,29861,29862,29865],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[32,29860,111],{},"加不加",[32,29863,29864],{},"sudo -E","都无所谓。",[19,29867,29868,29869,29871,29872,29874,29875,29878,29879,29881],{},"用户已经被加到docker组了，不用",[32,29870,111],{},"也行跑，其次，",[32,29873,111],{},"运行的话，你的",[32,29876,29877],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[32,29880,29877],{},"更不可能变了。",[58,29883,29885],{"className":101,"code":29884,"language":103,"meta":63,"style":63},"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",[32,29886,29887,29900,29910,29920,29932,29939,29946,29953,29963,29972,29981,29995,30007,30019,30028,30038,30047,30062,30095,30122,30133,30140],{"__ignoreMap":63},[67,29888,29889,29891,29893,29895,29898],{"class":69,"line":70},[67,29890,111],{"class":110},[67,29892,28107],{"class":114},[67,29894,29016],{"class":114},[67,29896,29897],{"class":77}," --name=ros_opencv_cuda",[67,29899,26470],{"class":77},[67,29901,29902,29905,29908],{"class":69,"line":191},[67,29903,29904],{"class":73},"--gpus ",[67,29906,29907],{"class":114},"all",[67,29909,26470],{"class":77},[67,29911,29912,29915,29918],{"class":69,"line":202},[67,29913,29914],{"class":73},"-e ",[67,29916,29917],{"class":114},"NVIDIA_DRIVER_CAPABILITIES=all",[67,29919,26470],{"class":77},[67,29921,29922,29924,29927,29930],{"class":69,"line":641},[67,29923,29914],{"class":73},[67,29925,29926],{"class":114},"DISPLAY=",[67,29928,29929],{"class":73},"$DISPLAY ",[67,29931,27963],{"class":77},[67,29933,29934,29937],{"class":69,"line":655},[67,29935,29936],{"class":73},"-dit ",[67,29938,27963],{"class":77},[67,29940,29941,29944],{"class":69,"line":660},[67,29942,29943],{"class":73},"--privileged ",[67,29945,27963],{"class":77},[67,29947,29948,29951],{"class":69,"line":665},[67,29949,29950],{"class":73},"--net=host ",[67,29952,27963],{"class":77},[67,29954,29955,29958,29961],{"class":69,"line":677},[67,29956,29957],{"class":73},"--group-add ",[67,29959,29960],{"class":114},"audio",[67,29962,26470],{"class":77},[67,29964,29965,29967,29970],{"class":69,"line":683},[67,29966,29957],{"class":73},[67,29968,29969],{"class":114},"video",[67,29971,26470],{"class":77},[67,29973,29974,29976,29979],{"class":69,"line":689},[67,29975,29957],{"class":73},[67,29977,29978],{"class":114},"dialout",[67,29980,26470],{"class":77},[67,29982,29983,29985,29988,29990,29993],{"class":69,"line":694},[67,29984,29914],{"class":73},[67,29986,29987],{"class":114},"XAUTHORITY=",[67,29989,29877],{"class":73},[67,29991,29992],{"class":114},"\u002F.Xauthority",[67,29994,26470],{"class":77},[67,29996,29997,29999,30002,30005],{"class":69,"line":700},[67,29998,29914],{"class":73},[67,30000,30001],{"class":114},"WAYLAND_DISPLAY=",[67,30003,30004],{"class":73},"$WAYLAND_DISPLAY ",[67,30006,27963],{"class":77},[67,30008,30009,30011,30014,30017],{"class":69,"line":706},[67,30010,29914],{"class":73},[67,30012,30013],{"class":114},"XDG_RUNTIME_DIR=",[67,30015,30016],{"class":73},"$XDG_RUNTIME_DIR ",[67,30018,27963],{"class":77},[67,30020,30021,30023,30026],{"class":69,"line":712},[67,30022,29914],{"class":73},[67,30024,30025],{"class":114},"QT_QPA_PLATFORM=xcb",[67,30027,26470],{"class":77},[67,30029,30030,30033,30036],{"class":69,"line":717},[67,30031,30032],{"class":73},"-v ",[67,30034,30035],{"class":114},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[67,30037,26470],{"class":77},[67,30039,30040,30042,30045],{"class":69,"line":723},[67,30041,30032],{"class":73},[67,30043,30044],{"class":114},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[67,30046,26470],{"class":77},[67,30048,30049,30052,30055,30057,30060],{"class":69,"line":729},[67,30050,30051],{"class":73},"-v $HOME",[67,30053,30054],{"class":114},"\u002F.Xauthority:",[67,30056,29877],{"class":73},[67,30058,30059],{"class":114},"\u002F.Xauthority:ro",[67,30061,26470],{"class":77},[67,30063,30064,30066,30069,30071,30074,30077,30079,30082,30084,30086,30088,30090,30093],{"class":69,"line":735},[67,30065,30032],{"class":73},[67,30067,30068],{"class":114},"\u002Frun\u002Fuser\u002F",[67,30070,26891],{"class":73},[67,30072,30073],{"class":110},"id",[67,30075,30076],{"class":77}," -u",[67,30078,2420],{"class":73},[67,30080,30081],{"class":114},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[67,30083,26891],{"class":73},[67,30085,30073],{"class":110},[67,30087,30076],{"class":77},[67,30089,2420],{"class":73},[67,30091,30092],{"class":114},"\u002Fwayland-0",[67,30094,26470],{"class":77},[67,30096,30097,30099,30101,30103,30105,30107,30109,30112,30114,30116,30118,30120],{"class":69,"line":741},[67,30098,30032],{"class":73},[67,30100,30068],{"class":114},[67,30102,26891],{"class":73},[67,30104,30073],{"class":110},[67,30106,30076],{"class":77},[67,30108,2420],{"class":73},[67,30110,30111],{"class":114},":\u002Frun\u002Fuser\u002F",[67,30113,26891],{"class":73},[67,30115,30073],{"class":110},[67,30117,30076],{"class":77},[67,30119,15512],{"class":73},[67,30121,27963],{"class":77},[67,30123,30124,30126,30128,30131],{"class":69,"line":747},[67,30125,30051],{"class":73},[67,30127,2848],{"class":114},[67,30129,30130],{"class":73},"$HOME ",[67,30132,27963],{"class":77},[67,30134,30135,30138],{"class":69,"line":753},[67,30136,30137],{"class":73},"-w $HOME ",[67,30139,27963],{"class":77},[67,30141,30142],{"class":69,"line":758},[67,30143,30144],{"class":73},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30146,10831],{},[26,30148,30149,30157,30160,30163],{},[29,30150,30151,15593,30153,30156],{},[32,30152,29917],{},[32,30154,30155],{},"--gpus all","没有英伟达显卡请注释。",[29,30158,30159],{},"--name后面请自己为容器起名。",[29,30161,30162],{},"最后一行仓库名称请你自己找对应的镜像填上。",[29,30164,30165,30166,230],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25350,30167,30168],{},[2144,30169,30170],{},"请不要加",[58,30172,30174],{"className":101,"code":30173,"language":103,"meta":63,"style":63},"--ulimit nofile=1024:524288 \\\n",[32,30175,30176],{"__ignoreMap":63},[67,30177,30178,30181,30184],{"class":69,"line":70},[67,30179,30180],{"class":110},"--ulimit",[67,30182,30183],{"class":114}," nofile=1024:524288",[67,30185,26470],{"class":77},[19,30187,30188,30189,30194],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25350,30190,30191],{},[2144,30192,30193],{},"不建议","**.**",[58,30196,30198],{"className":101,"code":30197,"language":103,"meta":63,"style":63},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[32,30199,30200,30227,30236],{"__ignoreMap":63},[67,30201,30202,30205,30208,30210,30212,30214,30216,30218,30220,30223,30225],{"class":69,"line":70},[67,30203,30204],{"class":110},"--user",[67,30206,30207],{"class":73}," $(",[67,30209,30073],{"class":110},[67,30211,30076],{"class":77},[67,30213,2420],{"class":73},[67,30215,2848],{"class":114},[67,30217,26891],{"class":73},[67,30219,30073],{"class":110},[67,30221,30222],{"class":77}," -g",[67,30224,15512],{"class":73},[67,30226,27963],{"class":77},[67,30228,30229,30231,30234],{"class":69,"line":191},[67,30230,30032],{"class":73},[67,30232,30233],{"class":114},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[67,30235,26470],{"class":77},[67,30237,30238,30240,30243],{"class":69,"line":202},[67,30239,30032],{"class":73},[67,30241,30242],{"class":114},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[67,30244,26470],{"class":77},[1903,30246,30247],{},"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":63,"searchDepth":191,"depth":191,"links":30249},[30250,30251,30252],{"id":29249,"depth":202,"text":29250},{"id":29259,"depth":202,"text":29260},{"id":29670,"depth":202,"text":29673},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29241,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30259,"title":30260,"body":30261,"description":63,"extension":1930,"meta":31883,"navigation":630,"path":31884,"seo":31885,"stem":31886,"__hash__":31887},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30262,"toc":31878},[30263,30266,30270,30273,30495,30499,30503,30506,30612,30617,30620,30625,30628,30633,30636,30641,30644,30656,30659,30664,30671,30699,30706,30782,30787,30790,30813,30815,30890,30895,30898,30902,30910,30915,30920,30924,30935,30941,30944,30947,30970,30973,30976,31004,31007,31010,31475,31478,31483,31488,31492,31515,31520,31524,31528,31531,31534,31537,31564,31567,31570,31588,31591,31594,31616,31624,31629,31634,31638,31641,31644,31647,31650,31695,31698,31716,31719,31724,31727,31748,31751,31807,31810,31815,31819,31822,31829,31832,31835,31840,31843,31859,31862,31875],[10,30264,30260],{"id":30265},"_6手动创建docker镜像",[391,30267,30269],{"id":30268},"_61dockerfile","6.1.DockerFile",[19,30271,30272],{},"常用命令：",[399,30274,30275,30286],{},[402,30276,30277],{},[405,30278,30279,30282,30284],{},[408,30280,30281],{"align":410},"指令",[408,30283,27658],{"align":410},[408,30285,29278],{"align":410},[419,30287,30288,30298,30314,30325,30336,30347,30358,30369,30380,30394,30408,30419,30433,30444,30455,30469,30484],{},[405,30289,30290,30292,30295],{},[424,30291,29156],{"align":410},[424,30293,30294],{"align":410},"指定基础镜像，是 Dockerfile 的起点",[424,30296,30297],{"align":410},"FROM ubuntu:22.04",[405,30299,30300,30303,30306],{},[424,30301,30302],{"align":410},"LABEL",[424,30304,30305],{"align":410},"添加元数据（如作者、版本等）",[424,30307,30308,30309,30313],{"align":410},"LABEL maintainer=”",[2230,30310,30312],{"href":30311},"mailto:you@example.com","you@example.com","”",[405,30315,30316,30319,30322],{},[424,30317,30318],{"align":410},"ENV",[424,30320,30321],{"align":410},"设置环境变量",[424,30323,30324],{"align":410},"ENV PORT=8080",[405,30326,30327,30330,30333],{},[424,30328,30329],{"align":410},"ARG",[424,30331,30332],{"align":410},"构建参数，只在构建期间可用",[424,30334,30335],{"align":410},"ARG VERSION=1.0",[405,30337,30338,30341,30344],{},[424,30339,30340],{"align":410},"RUN",[424,30342,30343],{"align":410},"构建镜像时运行命令",[424,30345,30346],{"align":410},"RUN apt-get update && apt-get install -y curl",[405,30348,30349,30352,30355],{},[424,30350,30351],{"align":410},"COPY",[424,30353,30354],{"align":410},"复制文件到镜像中",[424,30356,30357],{"align":410},"COPY . \u002Fapp",[405,30359,30360,30363,30366],{},[424,30361,30362],{"align":410},"ADD",[424,30364,30365],{"align":410},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[424,30367,30368],{"align":410},"ADD archive.tar.gz \u002Fdata\u002F",[405,30370,30371,30374,30377],{},[424,30372,30373],{"align":410},"WORKDIR",[424,30375,30376],{"align":410},"设置工作目录",[424,30378,30379],{"align":410},"WORKDIR \u002Fopt",[405,30381,30382,30385,30388],{},[424,30383,30384],{"align":410},"CMD",[424,30386,30387],{"align":410},"设置容器启动时默认命令（可被 docker run 覆盖）",[424,30389,30390,30391],{"align":410},"CMD ",[67,30392,30393],{},"“node”, “index.js”",[405,30395,30396,30399,30402],{},[424,30397,30398],{"align":410},"ENTRYPOINT",[424,30400,30401],{"align":410},"设置容器启动时固定命令（通常用于 CLI 工具等）",[424,30403,30404,30405],{"align":410},"ENTRYPOINT ",[67,30406,30407],{},"“python3”",[405,30409,30410,30413,30416],{},[424,30411,30412],{"align":410},"EXPOSE",[424,30414,30415],{"align":410},"声明镜像内服务监听的端口（不会自动映射）",[424,30417,30418],{"align":410},"EXPOSE 80",[405,30420,30421,30424,30427],{},[424,30422,30423],{"align":410},"VOLUME",[424,30425,30426],{"align":410},"声明数据卷挂载点",[424,30428,30429,30430],{"align":410},"VOLUME ",[67,30431,30432],{},"“\u002Fdata”",[405,30434,30435,30438,30441],{},[424,30436,30437],{"align":410},"USER",[424,30439,30440],{"align":410},"设置后续命令执行的用户",[424,30442,30443],{"align":410},"USER appuser",[405,30445,30446,30449,30452],{},[424,30447,30448],{"align":410},"ONBUILD",[424,30450,30451],{"align":410},"当镜像作为其他镜像基础镜像时触发的构建指令",[424,30453,30454],{"align":410},"ONBUILD COPY . \u002Fsrc",[405,30456,30457,30460,30463],{},[424,30458,30459],{"align":410},"SHELL",[424,30461,30462],{"align":410},"更改默认 shell，比如将 sh -c 改为 bash -c",[424,30464,30465,30466],{"align":410},"SHELL ",[67,30467,30468],{},"“\u002Fbin\u002Fbash”, “-c”",[405,30470,30471,30474,30477],{},[424,30472,30473],{"align":410},"HEALTHCHECK",[424,30475,30476],{"align":410},"定义容器运行时的健康检查命令",[424,30478,30479,30480],{"align":410},"`HEALTHCHECK CMD curl –fail ",[2230,30481,30482],{"href":30482,"rel":30483},"http:\u002F\u002Flocalhost:8080",[25657],[405,30485,30486,30489,30492],{},[424,30487,30488],{"align":410},"STOPSIGNAL",[424,30490,30491],{"align":410},"容器停止时发送的信号",[424,30493,30494],{"align":410},"STOPSIGNAL SIGKILL",[391,30496,30498],{"id":30497},"_62自己创建容器","6.2.自己创建容器",[23794,30500,30502],{"id":30501},"_621手动创建","6.2.1.手动创建",[19,30504,30505],{},"在x86电脑上编译x86的：",[58,30507,30509],{"className":101,"code":30508,"language":103,"meta":63,"style":63},"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",[32,30510,30511,30527,30531,30544,30548,30561,30565,30578,30582,30595,30599],{"__ignoreMap":63},[67,30512,30513,30515,30518,30521,30524],{"class":69,"line":70},[67,30514,28339],{"class":110},[67,30516,30517],{"class":114}," build",[67,30519,30520],{"class":77}," -t",[67,30522,30523],{"class":114}," ros-melodic-cuda118-cudnn8-bionic:latest",[67,30525,30526],{"class":114}," .\n",[67,30528,30529],{"class":69,"line":191},[67,30530,631],{"emptyLinePlaceholder":630},[67,30532,30533,30535,30537,30539,30542],{"class":69,"line":202},[67,30534,28339],{"class":110},[67,30536,30517],{"class":114},[67,30538,30520],{"class":77},[67,30540,30541],{"class":114}," ros-noetic-focal:latest",[67,30543,30526],{"class":114},[67,30545,30546],{"class":69,"line":641},[67,30547,631],{"emptyLinePlaceholder":630},[67,30549,30550,30552,30554,30556,30559],{"class":69,"line":655},[67,30551,28339],{"class":110},[67,30553,30517],{"class":114},[67,30555,30520],{"class":77},[67,30557,30558],{"class":114}," ros-humble-jammy:latest",[67,30560,30526],{"class":114},[67,30562,30563],{"class":69,"line":660},[67,30564,631],{"emptyLinePlaceholder":630},[67,30566,30567,30569,30571,30573,30576],{"class":69,"line":665},[67,30568,28339],{"class":110},[67,30570,30517],{"class":114},[67,30572,30520],{"class":77},[67,30574,30575],{"class":114}," ros-jazzy-noble:latest",[67,30577,30526],{"class":114},[67,30579,30580],{"class":69,"line":677},[67,30581,631],{"emptyLinePlaceholder":630},[67,30583,30584,30586,30588,30590,30593],{"class":69,"line":683},[67,30585,28339],{"class":110},[67,30587,30517],{"class":114},[67,30589,30520],{"class":77},[67,30591,30592],{"class":114}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[67,30594,30526],{"class":114},[67,30596,30597],{"class":69,"line":689},[67,30598,631],{"emptyLinePlaceholder":630},[67,30600,30601,30603,30605,30607,30610],{"class":69,"line":694},[67,30602,28339],{"class":110},[67,30604,30517],{"class":114},[67,30606,30520],{"class":77},[67,30608,30609],{"class":114}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[67,30611,30526],{"class":114},[19,30613,30614],{},[3317,30615],{"alt":63,"src":30616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30618,30619],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30621,30622],{},[3317,30623],{"alt":63,"src":30624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30626,30627],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[26,30629,30630],{},[29,30631,30632],{},"创建 Docker Hub 账户",[19,30634,30635],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[26,30637,30638],{"start":191},[29,30639,30640],{},"登录 Docker Hub",[19,30642,30643],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[58,30645,30647],{"className":101,"code":30646,"language":103,"meta":63,"style":63},"docker login\n",[32,30648,30649],{"__ignoreMap":63},[67,30650,30651,30653],{"class":69,"line":70},[67,30652,28339],{"class":110},[67,30654,30655],{"class":114}," login\n",[19,30657,30658],{},"输入你的 Docker Hub 用户名和密码进行验证。",[26,30660,30661],{},[29,30662,30663],{},"为你的镜像打标签",[19,30665,30666,30667,30670],{},"Docker Hub 使用 ",[32,30668,30669],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[58,30672,30674],{"className":101,"code":30673,"language":103,"meta":63,"style":63},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[32,30675,30676],{"__ignoreMap":63},[67,30677,30678,30680,30683,30685,30688,30691,30694,30696],{"class":69,"line":70},[67,30679,28339],{"class":110},[67,30681,30682],{"class":114}," tag",[67,30684,30575],{"class":114},[67,30686,30687],{"class":84}," \u003C",[67,30689,30690],{"class":114},"你的用户",[67,30692,30693],{"class":73},"名",[67,30695,2948],{"class":84},[67,30697,30698],{"class":114},"\u002Fros-jazzy-noble:latest\n",[19,30700,30701,30702,30705],{},"例如，如果你的 Docker Hub 用户名是 ",[32,30703,30704],{},"tungchiahui","，你应该执行：",[58,30707,30709],{"className":101,"code":30708,"language":103,"meta":63,"style":63},"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",[32,30710,30711,30722,30726,30737,30741,30752,30756,30767,30771],{"__ignoreMap":63},[67,30712,30713,30715,30717,30719],{"class":69,"line":70},[67,30714,28339],{"class":110},[67,30716,30682],{"class":114},[67,30718,30541],{"class":114},[67,30720,30721],{"class":114}," tungchiahui\u002Fros-noetic-focal:latest\n",[67,30723,30724],{"class":69,"line":191},[67,30725,631],{"emptyLinePlaceholder":630},[67,30727,30728,30730,30732,30734],{"class":69,"line":202},[67,30729,28339],{"class":110},[67,30731,30682],{"class":114},[67,30733,30558],{"class":114},[67,30735,30736],{"class":114}," tungchiahui\u002Fros-humble-jammy:latest\n",[67,30738,30739],{"class":69,"line":641},[67,30740,631],{"emptyLinePlaceholder":630},[67,30742,30743,30745,30747,30749],{"class":69,"line":655},[67,30744,28339],{"class":110},[67,30746,30682],{"class":114},[67,30748,30575],{"class":114},[67,30750,30751],{"class":114}," tungchiahui\u002Fros-jazzy-noble:latest\n",[67,30753,30754],{"class":69,"line":660},[67,30755,631],{"emptyLinePlaceholder":630},[67,30757,30758,30760,30762,30764],{"class":69,"line":665},[67,30759,28339],{"class":110},[67,30761,30682],{"class":114},[67,30763,30592],{"class":114},[67,30765,30766],{"class":114}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[67,30768,30769],{"class":69,"line":677},[67,30770,631],{"emptyLinePlaceholder":630},[67,30772,30773,30775,30777,30779],{"class":69,"line":683},[67,30774,28339],{"class":110},[67,30776,30682],{"class":114},[67,30778,30609],{"class":114},[67,30780,30781],{"class":114}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[26,30783,30784],{"start":191},[29,30785,30786],{},"推送镜像到 Docker Hub",[19,30788,30789],{},"使用以下命令将镜像推送到 Docker Hub：",[58,30791,30793],{"className":101,"code":30792,"language":103,"meta":63,"style":63},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[32,30794,30795],{"__ignoreMap":63},[67,30796,30797,30799,30802,30804,30806,30808,30810],{"class":69,"line":70},[67,30798,28339],{"class":110},[67,30800,30801],{"class":114}," push",[67,30803,30687],{"class":84},[67,30805,30690],{"class":114},[67,30807,30693],{"class":73},[67,30809,2948],{"class":84},[67,30811,30812],{"class":114},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30814,16431],{},[58,30816,30818],{"className":101,"code":30817,"language":103,"meta":63,"style":63},"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",[32,30819,30820,30828,30832,30840,30844,30852,30856,30865,30869,30877,30881],{"__ignoreMap":63},[67,30821,30822,30824,30826],{"class":69,"line":70},[67,30823,28339],{"class":110},[67,30825,30801],{"class":114},[67,30827,30721],{"class":114},[67,30829,30830],{"class":69,"line":191},[67,30831,631],{"emptyLinePlaceholder":630},[67,30833,30834,30836,30838],{"class":69,"line":202},[67,30835,28339],{"class":110},[67,30837,30801],{"class":114},[67,30839,30736],{"class":114},[67,30841,30842],{"class":69,"line":641},[67,30843,631],{"emptyLinePlaceholder":630},[67,30845,30846,30848,30850],{"class":69,"line":655},[67,30847,28339],{"class":110},[67,30849,30801],{"class":114},[67,30851,30751],{"class":114},[67,30853,30854],{"class":69,"line":660},[67,30855,631],{"emptyLinePlaceholder":630},[67,30857,30858,30860,30862],{"class":69,"line":665},[67,30859,28339],{"class":110},[67,30861,30801],{"class":114},[67,30863,30864],{"class":114}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[67,30866,30867],{"class":69,"line":677},[67,30868,631],{"emptyLinePlaceholder":630},[67,30870,30871,30873,30875],{"class":69,"line":683},[67,30872,28339],{"class":110},[67,30874,30801],{"class":114},[67,30876,30781],{"class":114},[67,30878,30879],{"class":69,"line":689},[67,30880,631],{"emptyLinePlaceholder":630},[67,30882,30883,30885,30887],{"class":69,"line":694},[67,30884,28339],{"class":110},[67,30886,30801],{"class":114},[67,30888,30889],{"class":114}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[26,30891,30892],{"start":202},[29,30893,30894],{},"验证推送成功",[19,30896,30897],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30899,30900],{},[2144,30901,5604],{},[2994,30903,30904,30907],{},[29,30905,30906],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[29,30908,30909],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30911,30912],{},[3317,30913],{"alt":63,"src":30914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30916,30917],{},[3317,30918],{"alt":63,"src":30919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23794,30921,30923],{"id":30922},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30925,30926,30927,30930,30931,30934],{},"如果您想在 ",[2144,30928,30929],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2144,30932,30933],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30936,30937,30938],{},"1. ",[2144,30939,30940],{},"启用 Docker 跨平台构建",[19,30942,30943],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30945,30946],{},"第一步：启用 buildx（只需执行一次）",[58,30948,30950],{"className":101,"code":30949,"language":103,"meta":63,"style":63},"docker buildx create --name multiarch_builder --use\n",[32,30951,30952],{"__ignoreMap":63},[67,30953,30954,30956,30959,30961,30964,30967],{"class":69,"line":70},[67,30955,28339],{"class":110},[67,30957,30958],{"class":114}," buildx",[67,30960,173],{"class":114},[67,30962,30963],{"class":77}," --name",[67,30965,30966],{"class":114}," multiarch_builder",[67,30968,30969],{"class":77}," --use\n",[19,30971,30972],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30974,30975],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[58,30977,30979],{"className":101,"code":30978,"language":103,"meta":63,"style":63},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[32,30980,30981],{"__ignoreMap":63},[67,30982,30983,30985,30987,30989,30992,30995,30998,31001],{"class":69,"line":70},[67,30984,28339],{"class":110},[67,30986,29016],{"class":114},[67,30988,29019],{"class":77},[67,30990,30991],{"class":77}," --privileged",[67,30993,30994],{"class":114}," multiarch\u002Fqemu-user-static",[67,30996,30997],{"class":77}," --reset",[67,30999,31000],{"class":77}," -p",[67,31002,31003],{"class":114}," yes\n",[19,31005,31006],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31008,31009],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[58,31011,31013],{"className":101,"code":31012,"language":103,"meta":63,"style":63},"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",[32,31014,31015,31057,31061,31066,31076,31086,31095,31101,31105,31109,31119,31127,31136,31142,31146,31150,31160,31168,31177,31183,31187,31191,31201,31209,31218,31224,31228,31232,31242,31250,31259,31265,31269,31273,31283,31291,31300,31306,31310,31314,31324,31332,31341,31347,31351,31355,31365,31373,31382,31388,31392,31396,31406,31414,31423,31429,31433,31437,31448,31456,31465,31471],{"__ignoreMap":63},[67,31016,31017,31019,31021,31023,31026,31029,31031,31033,31036,31038,31040,31042,31044,31047,31050,31052,31055],{"class":69,"line":70},[67,31018,28339],{"class":110},[67,31020,30958],{"class":114},[67,31022,30517],{"class":114},[67,31024,31025],{"class":77}," --platform",[67,31027,31028],{"class":114}," linux\u002Famd64,linux\u002Farm64",[67,31030,30520],{"class":77},[67,31032,30687],{"class":84},[67,31034,31035],{"class":114},"你的镜像",[67,31037,30693],{"class":73},[67,31039,2948],{"class":84},[67,31041,2848],{"class":114},[67,31043,259],{"class":84},[67,31045,31046],{"class":114},"标",[67,31048,31049],{"class":73},"签",[67,31051,2948],{"class":84},[67,31053,31054],{"class":77}," --push",[67,31056,30526],{"class":114},[67,31058,31059],{"class":69,"line":191},[67,31060,631],{"emptyLinePlaceholder":630},[67,31062,31063],{"class":69,"line":202},[67,31064,31065],{"class":2058},"# 例子：\n",[67,31067,31068,31070,31072,31074],{"class":69,"line":641},[67,31069,28339],{"class":110},[67,31071,30958],{"class":114},[67,31073,30517],{"class":114},[67,31075,26470],{"class":77},[67,31077,31078,31081,31084],{"class":69,"line":655},[67,31079,31080],{"class":73},"--platform ",[67,31082,31083],{"class":114},"linux\u002Famd64,linux\u002Farm64",[67,31085,26470],{"class":77},[67,31087,31088,31090,31093],{"class":69,"line":660},[67,31089,30520],{"class":77},[67,31091,31092],{"class":114}," tungchiahui\u002Fros:noetic-focal",[67,31094,26470],{"class":77},[67,31096,31097,31099],{"class":69,"line":665},[67,31098,31054],{"class":77},[67,31100,26470],{"class":77},[67,31102,31103],{"class":69,"line":677},[67,31104,30526],{"class":114},[67,31106,31107],{"class":69,"line":683},[67,31108,631],{"emptyLinePlaceholder":630},[67,31110,31111,31113,31115,31117],{"class":69,"line":689},[67,31112,28339],{"class":110},[67,31114,30958],{"class":114},[67,31116,30517],{"class":114},[67,31118,26470],{"class":77},[67,31120,31121,31123,31125],{"class":69,"line":694},[67,31122,31080],{"class":73},[67,31124,31083],{"class":114},[67,31126,26470],{"class":77},[67,31128,31129,31131,31134],{"class":69,"line":700},[67,31130,30520],{"class":77},[67,31132,31133],{"class":114}," tungchiahui\u002Fros:humble-jammy",[67,31135,26470],{"class":77},[67,31137,31138,31140],{"class":69,"line":706},[67,31139,31054],{"class":77},[67,31141,26470],{"class":77},[67,31143,31144],{"class":69,"line":712},[67,31145,30526],{"class":114},[67,31147,31148],{"class":69,"line":717},[67,31149,631],{"emptyLinePlaceholder":630},[67,31151,31152,31154,31156,31158],{"class":69,"line":723},[67,31153,28339],{"class":110},[67,31155,30958],{"class":114},[67,31157,30517],{"class":114},[67,31159,26470],{"class":77},[67,31161,31162,31164,31166],{"class":69,"line":729},[67,31163,31080],{"class":73},[67,31165,31083],{"class":114},[67,31167,26470],{"class":77},[67,31169,31170,31172,31175],{"class":69,"line":735},[67,31171,30520],{"class":77},[67,31173,31174],{"class":114}," tungchiahui\u002Fros:jazzy-noble",[67,31176,26470],{"class":77},[67,31178,31179,31181],{"class":69,"line":741},[67,31180,31054],{"class":77},[67,31182,26470],{"class":77},[67,31184,31185],{"class":69,"line":747},[67,31186,30526],{"class":114},[67,31188,31189],{"class":69,"line":753},[67,31190,631],{"emptyLinePlaceholder":630},[67,31192,31193,31195,31197,31199],{"class":69,"line":758},[67,31194,28107],{"class":110},[67,31196,30958],{"class":114},[67,31198,30517],{"class":114},[67,31200,26470],{"class":77},[67,31202,31203,31205,31207],{"class":69,"line":764},[67,31204,31080],{"class":73},[67,31206,31083],{"class":114},[67,31208,26470],{"class":77},[67,31210,31211,31213,31216],{"class":69,"line":770},[67,31212,30520],{"class":77},[67,31214,31215],{"class":114}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[67,31217,26470],{"class":77},[67,31219,31220,31222],{"class":69,"line":776},[67,31221,31054],{"class":77},[67,31223,26470],{"class":77},[67,31225,31226],{"class":69,"line":782},[67,31227,30526],{"class":114},[67,31229,31230],{"class":69,"line":788},[67,31231,631],{"emptyLinePlaceholder":630},[67,31233,31234,31236,31238,31240],{"class":69,"line":793},[67,31235,28339],{"class":110},[67,31237,30958],{"class":114},[67,31239,30517],{"class":114},[67,31241,26470],{"class":77},[67,31243,31244,31246,31248],{"class":69,"line":798},[67,31245,31080],{"class":73},[67,31247,31083],{"class":114},[67,31249,26470],{"class":77},[67,31251,31252,31254,31257],{"class":69,"line":816},[67,31253,30520],{"class":77},[67,31255,31256],{"class":114}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[67,31258,26470],{"class":77},[67,31260,31261,31263],{"class":69,"line":832},[67,31262,31054],{"class":77},[67,31264,26470],{"class":77},[67,31266,31267],{"class":69,"line":843},[67,31268,30526],{"class":114},[67,31270,31271],{"class":69,"line":848},[67,31272,631],{"emptyLinePlaceholder":630},[67,31274,31275,31277,31279,31281],{"class":69,"line":863},[67,31276,28107],{"class":110},[67,31278,30958],{"class":114},[67,31280,30517],{"class":114},[67,31282,26470],{"class":77},[67,31284,31285,31287,31289],{"class":69,"line":876},[67,31286,31080],{"class":73},[67,31288,31083],{"class":114},[67,31290,26470],{"class":77},[67,31292,31293,31295,31298],{"class":69,"line":889},[67,31294,30520],{"class":77},[67,31296,31297],{"class":114}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[67,31299,26470],{"class":77},[67,31301,31302,31304],{"class":69,"line":894},[67,31303,31054],{"class":77},[67,31305,26470],{"class":77},[67,31307,31308],{"class":69,"line":911},[67,31309,30526],{"class":114},[67,31311,31312],{"class":69,"line":927},[67,31313,631],{"emptyLinePlaceholder":630},[67,31315,31316,31318,31320,31322],{"class":69,"line":932},[67,31317,28339],{"class":110},[67,31319,30958],{"class":114},[67,31321,30517],{"class":114},[67,31323,26470],{"class":77},[67,31325,31326,31328,31330],{"class":69,"line":955},[67,31327,31080],{"class":73},[67,31329,31083],{"class":114},[67,31331,26470],{"class":77},[67,31333,31334,31336,31339],{"class":69,"line":971},[67,31335,30520],{"class":77},[67,31337,31338],{"class":114}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[67,31340,26470],{"class":77},[67,31342,31343,31345],{"class":69,"line":1010},[67,31344,31054],{"class":77},[67,31346,26470],{"class":77},[67,31348,31349],{"class":69,"line":1016},[67,31350,30526],{"class":114},[67,31352,31353],{"class":69,"line":1021},[67,31354,631],{"emptyLinePlaceholder":630},[67,31356,31357,31359,31361,31363],{"class":69,"line":1034},[67,31358,28339],{"class":110},[67,31360,30958],{"class":114},[67,31362,30517],{"class":114},[67,31364,26470],{"class":77},[67,31366,31367,31369,31371],{"class":69,"line":1053},[67,31368,31080],{"class":73},[67,31370,31083],{"class":114},[67,31372,26470],{"class":77},[67,31374,31375,31377,31380],{"class":69,"line":1070},[67,31376,30520],{"class":77},[67,31378,31379],{"class":114}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[67,31381,26470],{"class":77},[67,31383,31384,31386],{"class":69,"line":1083},[67,31385,31054],{"class":77},[67,31387,26470],{"class":77},[67,31389,31390],{"class":69,"line":1088},[67,31391,30526],{"class":114},[67,31393,31394],{"class":69,"line":1093},[67,31395,631],{"emptyLinePlaceholder":630},[67,31397,31398,31400,31402,31404],{"class":69,"line":1110},[67,31399,28107],{"class":110},[67,31401,30958],{"class":114},[67,31403,30517],{"class":114},[67,31405,26470],{"class":77},[67,31407,31408,31410,31412],{"class":69,"line":11603},[67,31409,31080],{"class":73},[67,31411,31083],{"class":114},[67,31413,26470],{"class":77},[67,31415,31416,31418,31421],{"class":69,"line":11612},[67,31417,30520],{"class":77},[67,31419,31420],{"class":114}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[67,31422,26470],{"class":77},[67,31424,31425,31427],{"class":69,"line":11617},[67,31426,31054],{"class":77},[67,31428,26470],{"class":77},[67,31430,31431],{"class":69,"line":11623},[67,31432,30526],{"class":114},[67,31434,31435],{"class":69,"line":11644},[67,31436,631],{"emptyLinePlaceholder":630},[67,31438,31439,31442,31444,31446],{"class":69,"line":11650},[67,31440,31441],{"class":110},"  docker",[67,31443,30958],{"class":114},[67,31445,30517],{"class":114},[67,31447,26470],{"class":77},[67,31449,31450,31452,31454],{"class":69,"line":11664},[67,31451,31080],{"class":73},[67,31453,31083],{"class":114},[67,31455,26470],{"class":77},[67,31457,31458,31460,31463],{"class":69,"line":11670},[67,31459,30520],{"class":77},[67,31461,31462],{"class":114}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[67,31464,26470],{"class":77},[67,31466,31467,31469],{"class":69,"line":11697},[67,31468,31054],{"class":77},[67,31470,26470],{"class":77},[67,31472,31473],{"class":69,"line":11706},[67,31474,30526],{"class":114},[19,31476,31477],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31479,31480],{},[3317,31481],{"alt":63,"src":31482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31484,31485],{},[3317,31486],{"alt":63,"src":31487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23794,31489,31491],{"id":31490},"_623清除构建缓存","6.2.3.清除构建缓存",[58,31493,31495],{"className":101,"code":31494,"language":103,"meta":63,"style":63},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[32,31496,31497,31502],{"__ignoreMap":63},[67,31498,31499],{"class":69,"line":70},[67,31500,31501],{"class":2058},"# 清理BuildKit构建缓存\n",[67,31503,31504,31506,31509,31512],{"class":69,"line":191},[67,31505,28339],{"class":110},[67,31507,31508],{"class":114}," builder",[67,31510,31511],{"class":114}," prune",[67,31513,31514],{"class":77}," -f\n",[19,31516,31517],{},[3317,31518],{"alt":63,"src":31519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[391,31521,31523],{"id":31522},"_63补充","6.3.补充",[23794,31525,31527],{"id":31526},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31529,31530],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31532,31533],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31535,31536],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[58,31538,31540],{"className":101,"code":31539,"language":103,"meta":63,"style":63},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[32,31541,31542,31549],{"__ignoreMap":63},[67,31543,31544,31546],{"class":69,"line":70},[67,31545,29156],{"class":110},[67,31547,31548],{"class":114}," nginx\n",[67,31550,31551,31553,31556,31559,31561],{"class":69,"line":191},[67,31552,30340],{"class":110},[67,31554,31555],{"class":114}," echo",[67,31557,31558],{"class":114}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[67,31560,28010],{"class":84},[67,31562,31563],{"class":114}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31565,31566],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31568,31569],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[58,31571,31573],{"className":101,"code":31572,"language":103,"meta":63,"style":63},"docker build -t nginx:tuling .\n",[32,31574,31575],{"__ignoreMap":63},[67,31576,31577,31579,31581,31583,31586],{"class":69,"line":70},[67,31578,28339],{"class":110},[67,31580,30517],{"class":114},[67,31582,30520],{"class":77},[67,31584,31585],{"class":114}," nginx:tuling",[67,31587,30526],{"class":114},[19,31589,31590],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31592,31593],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[58,31595,31597],{"className":101,"code":31596,"language":103,"meta":63,"style":63},"docker run -d -p 92:80 nginx:tuling\n",[32,31598,31599],{"__ignoreMap":63},[67,31600,31601,31603,31605,31608,31610,31613],{"class":69,"line":70},[67,31602,28339],{"class":110},[67,31604,29016],{"class":114},[67,31606,31607],{"class":77}," -d",[67,31609,31000],{"class":77},[67,31611,31612],{"class":114}," 92:80",[67,31614,31615],{"class":114}," nginx:tuling\n",[19,31617,31618,31619],{},"4、访问 ",[2230,31620,31623],{"href":31621,"rel":31622},"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",[25657],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31625,31626],{},[3317,31627],{"alt":63,"src":31628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31630,31631],{},[3317,31632],{"alt":63,"src":31633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23794,31635,31637],{"id":31636},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31639,31640],{},"只需要知道大体流程即可",[19,31642,31643],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31645,31646],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31648,31649],{},"2、在Dockerfile中添加以下内容",[58,31651,31653],{"className":27879,"code":31652,"language":27881,"meta":63,"style":63},"# 基于哪个镜像\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",[32,31654,31655,31660,31665,31670,31675,31680,31685,31690],{"__ignoreMap":63},[67,31656,31657],{"class":69,"line":70},[67,31658,31659],{},"# 基于哪个镜像\n",[67,31661,31662],{"class":69,"line":191},[67,31663,31664],{},"From java:8\n",[67,31666,31667],{"class":69,"line":202},[67,31668,31669],{},"# 复制文件到容器\n",[67,31671,31672],{"class":69,"line":641},[67,31673,31674],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[67,31676,31677],{"class":69,"line":655},[67,31678,31679],{},"# 声明需要暴露的端口\n",[67,31681,31682],{"class":69,"line":660},[67,31683,31684],{},"EXPOSE 8877\n",[67,31686,31687],{"class":69,"line":665},[67,31688,31689],{},"# 配置容器启动后执行的命令\n",[67,31691,31692],{"class":69,"line":677},[67,31693,31694],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31696,31697],{},"3、使用docker build命令构建镜像",[58,31699,31701],{"className":101,"code":31700,"language":103,"meta":63,"style":63},"docker build -t tulingmall-member:0.0.5 .\n",[32,31702,31703],{"__ignoreMap":63},[67,31704,31705,31707,31709,31711,31714],{"class":69,"line":70},[67,31706,28339],{"class":110},[67,31708,30517],{"class":114},[67,31710,30520],{"class":77},[67,31712,31713],{"class":114}," tulingmall-member:0.0.5",[67,31715,30526],{"class":114},[19,31717,31718],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31720,31721],{},[3317,31722],{"alt":63,"src":31723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31725,31726],{},"4、启动镜像，加-d可在后台启动",[58,31728,31730],{"className":101,"code":31729,"language":103,"meta":63,"style":63},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[32,31731,31732],{"__ignoreMap":63},[67,31733,31734,31736,31738,31740,31742,31745],{"class":69,"line":70},[67,31735,28339],{"class":110},[67,31737,29016],{"class":114},[67,31739,31607],{"class":77},[67,31741,31000],{"class":77},[67,31743,31744],{"class":114}," 8877:8877",[67,31746,31747],{"class":114}," tulingmall-member:0.0.5\n",[19,31749,31750],{},"加上JVM参数：",[58,31752,31754],{"className":101,"code":31753,"language":103,"meta":63,"style":63},"# --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",[32,31755,31756,31761,31776,31786,31795,31802],{"__ignoreMap":63},[67,31757,31758],{"class":69,"line":70},[67,31759,31760],{"class":2058},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[67,31762,31763,31765,31767,31770,31772,31774],{"class":69,"line":191},[67,31764,28339],{"class":110},[67,31766,29016],{"class":114},[67,31768,31769],{"class":77},"  -d",[67,31771,31000],{"class":77},[67,31773,31744],{"class":114},[67,31775,26470],{"class":77},[67,31777,31778,31780,31783],{"class":69,"line":202},[67,31779,29914],{"class":73},[67,31781,31782],{"class":114},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[67,31784,31785],{"class":77},"  \\\n",[67,31787,31788,31790,31793],{"class":69,"line":641},[67,31789,29914],{"class":73},[67,31791,31792],{"class":114},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[67,31794,31785],{"class":77},[67,31796,31797,31800],{"class":69,"line":655},[67,31798,31799],{"class":73},"--cap-add=SYS_PTRACE  ",[67,31801,27963],{"class":77},[67,31803,31804],{"class":69,"line":660},[67,31805,31806],{"class":73},"tulingmall-member:0.0.5\n",[19,31808,31809],{},"5、访问会员服务接口",[19,31811,31812],{},[3317,31813],{"alt":63,"src":31814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23794,31816,31818],{"id":31817},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31820,31821],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31823,31824,31825],{},"阿里云docker镜像仓库：",[2230,31826,31827],{"href":31827,"rel":31828},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25657],[19,31830,31831],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31833,31834],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31836,31837],{},[3317,31838],{"alt":63,"src":31839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31841,31842],{},"要把镜像推送到镜像仓库",[58,31844,31846],{"className":101,"code":31845,"language":103,"meta":63,"style":63},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[32,31847,31848],{"__ignoreMap":63},[67,31849,31850,31852,31854,31856],{"class":69,"line":70},[67,31851,28339],{"class":110},[67,31853,30682],{"class":114},[67,31855,31713],{"class":114},[67,31857,31858],{"class":114}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31860,31861],{},"最后将镜像推送到远程仓库",[58,31863,31865],{"className":101,"code":31864,"language":103,"meta":63,"style":63},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[32,31866,31867],{"__ignoreMap":63},[67,31868,31869,31871,31873],{"class":69,"line":70},[67,31870,28339],{"class":110},[67,31872,30801],{"class":114},[67,31874,31858],{"class":114},[1903,31876,31877],{},"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":63,"searchDepth":191,"depth":191,"links":31879},[31880,31881,31882],{"id":30268,"depth":202,"text":30269},{"id":30497,"depth":202,"text":30498},{"id":31522,"depth":202,"text":31523},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30260,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31889,"title":31890,"body":31891,"description":63,"extension":1930,"meta":32034,"navigation":630,"path":32035,"seo":32036,"stem":32037,"__hash__":32038},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31892,"toc":32032},[31893,31896,31901,31906,31909,31914,31919,31922,31927,31932,31935,31940,31943,31946,31949,31952,31955,31958,31978,32000,32003,32006,32026,32029],[10,31894,31890],{"id":31895},"_7vscode远程开发",[26,31897,31898],{},[29,31899,31900],{},"插件1：微软Docker工具",[19,31902,31903],{},[3317,31904],{"alt":63,"src":31905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31907,31908],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31910,31911],{},[3317,31912],{"alt":63,"src":31913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[26,31915,31916],{"start":191},[29,31917,31918],{},"插件2：微软Docker远程开发工具",[19,31920,31921],{},"下面这是远程开发的插件。",[19,31923,31924],{},[3317,31925],{"alt":63,"src":31926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31928,31929],{},[3317,31930],{"alt":63,"src":31931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31933,31934],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31936,31937],{},[3317,31938],{"alt":63,"src":31939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31941,31942],{},"安装完拓展之后，vscode进行链接：",[19,31944,31945],{},"1.按ctrl+shift+p",[19,31947,31948],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31950,31951],{},"3.选择目前运行的容器",[19,31953,31954],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31956,31957],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[58,31959,31961],{"className":101,"code":31960,"language":103,"meta":63,"style":63},"docker run -v 主机目录:容器目录 image-name\n",[32,31962,31963],{"__ignoreMap":63},[67,31964,31965,31967,31969,31972,31975],{"class":69,"line":70},[67,31966,28339],{"class":110},[67,31968,29016],{"class":114},[67,31970,31971],{"class":77}," -v",[67,31973,31974],{"class":114}," 主机目录:容器目录",[67,31976,31977],{"class":114}," image-name\n",[58,31979,31981],{"className":101,"code":31980,"language":103,"meta":63,"style":63},"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",[32,31982,31983],{"__ignoreMap":63},[67,31984,31985,31987,31989,31992,31994,31997],{"class":69,"line":70},[67,31986,28339],{"class":110},[67,31988,29016],{"class":114},[67,31990,31991],{"class":77}," -it",[67,31993,31971],{"class":77},[67,31995,31996],{"class":114}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[67,31998,31999],{"class":114}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32001,32002],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32004,32005],{},"查看挂载情况：",[58,32007,32009],{"className":101,"code":32008,"language":103,"meta":63,"style":63},"mount | grep -i project\n",[32,32010,32011],{"__ignoreMap":63},[67,32012,32013,32016,32018,32021,32023],{"class":69,"line":70},[67,32014,32015],{"class":110},"mount",[67,32017,26901],{"class":84},[67,32019,32020],{"class":110}," grep",[67,32022,28216],{"class":77},[67,32024,32025],{"class":114}," project\n",[19,32027,32028],{},"也可以通过ls来进行查看",[1903,32030,32031],{},"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":63,"searchDepth":191,"depth":191,"links":32033},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31890,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32040,"title":32041,"body":32042,"description":25173,"extension":1930,"meta":32046,"navigation":630,"path":32048,"seo":32049,"stem":32050,"__hash__":32051},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32043,"toc":32044},[],{"title":63,"searchDepth":191,"depth":191,"links":32045},[],{"category":32047},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32041,"description":25173},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32053,"title":32054,"body":32055,"description":25173,"extension":1930,"meta":32059,"navigation":630,"path":32060,"seo":32061,"stem":32062,"__hash__":32063},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32056,"toc":32057},[],{"title":63,"searchDepth":191,"depth":191,"links":32058},[],{"category":32047},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32054,"description":25173},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32065,"title":32066,"body":32067,"description":25173,"extension":1930,"meta":32354,"navigation":630,"path":32355,"seo":32356,"stem":32357,"__hash__":32358},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32068,"toc":32352},[32069,32072,32080,32095,32100,32150,32153,32159,32341,32346,32349],[10,32070,32066],{"id":32071},"_1验证深度学习环境",[19,32073,32074,32075],{},"关于环境的安装，看",[2230,32076,32079],{"href":32077,"rel":32078},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25657],"Pytorch-->深度学习",[19,32081,32082,32083,32086,32087,32090,32091,32094],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[32,32084,32085],{},"pytorch-cuda=12.4"," 是一个“ ",[2144,32088,32089],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2144,32092,32093],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32096,32097],{},[3317,32098],{"alt":63,"src":32099},"\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",[58,32101,32103],{"className":101,"code":32102,"language":103,"meta":63,"style":63},"# 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",[32,32104,32105,32110],{"__ignoreMap":63},[67,32106,32107],{"class":69,"line":70},[67,32108,32109],{"class":2058},"# CUDA 12.4\n",[67,32111,32112,32114,32116,32119,32122,32125,32128,32131,32133,32136,32139,32142,32145,32147],{"class":69,"line":191},[67,32113,170],{"class":110},[67,32115,118],{"class":114},[67,32117,32118],{"class":114}," pytorch==",[67,32120,32121],{"class":77},"2.5.1",[67,32123,32124],{"class":114}," torchvision==",[67,32126,32127],{"class":77},"0.20.1",[67,32129,32130],{"class":114}," torchaudio==",[67,32132,32121],{"class":77},[67,32134,32135],{"class":114}," pytorch-cuda=",[67,32137,32138],{"class":77},"12.4",[67,32140,32141],{"class":77}," -c",[67,32143,32144],{"class":114}," pytorch",[67,32146,32141],{"class":77},[67,32148,32149],{"class":114}," nvidia\n",[19,32151,32152],{},"）：",[19,32154,32155],{},[2230,32156,32157],{"href":32157,"rel":32158},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25657],[58,32160,32162],{"className":60,"code":32161,"language":62,"meta":63,"style":63},"# 对深度学习环境进行测试\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",[32,32163,32164,32169,32176,32181,32191,32206,32211,32221,32258,32265,32276,32292,32297,32307,32319,32329],{"__ignoreMap":63},[67,32165,32166],{"class":69,"line":70},[67,32167,32168],{"class":2058},"# 对深度学习环境进行测试\n",[67,32170,32171,32173],{"class":69,"line":191},[67,32172,622],{"class":84},[67,32174,32175],{"class":73}," torch\n",[67,32177,32178],{"class":69,"line":202},[67,32179,32180],{"class":2058},"# 查看cuda是否被激活\n",[67,32182,32183,32186,32188],{"class":69,"line":641},[67,32184,32185],{"class":73},"flag",[67,32187,85],{"class":84},[67,32189,32190],{"class":73},"torch.cuda.is_available()\n",[67,32192,32193,32195,32197,32200,32203],{"class":69,"line":655},[67,32194,1626],{"class":77},[67,32196,854],{"class":73},[67,32198,32199],{"class":114},"\"cuda:\"",[67,32201,32202],{"class":73},", flag)   ",[67,32204,32205],{"class":2058},"#返回true的话说明被激活\n",[67,32207,32208],{"class":69,"line":660},[67,32209,32210],{"class":2058},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[67,32212,32213,32216,32218],{"class":69,"line":665},[67,32214,32215],{"class":73},"ngpu",[67,32217,85],{"class":84},[67,32219,32220],{"class":77},"1\n",[67,32222,32223,32226,32228,32231,32234,32236,32239,32242,32245,32247,32249,32251,32253,32256],{"class":69,"line":677},[67,32224,32225],{"class":73},"device",[67,32227,85],{"class":84},[67,32229,32230],{"class":73},"torch.device(",[67,32232,32233],{"class":114},"\"cuda:0\"",[67,32235,3547],{"class":84},[67,32237,32238],{"class":73},"(torch.cuda.is_available() ",[67,32240,32241],{"class":84},"and",[67,32243,32244],{"class":73}," ngpu",[67,32246,2948],{"class":84},[67,32248,78],{"class":77},[67,32250,15512],{"class":73},[67,32252,3544],{"class":84},[67,32254,32255],{"class":114}," \"cpu\"",[67,32257,829],{"class":73},[67,32259,32260,32262],{"class":69,"line":683},[67,32261,1626],{"class":77},[67,32263,32264],{"class":73},"(device)\n",[67,32266,32267,32269,32272,32274],{"class":69,"line":689},[67,32268,1626],{"class":77},[67,32270,32271],{"class":73},"(torch.cuda.get_device_name(",[67,32273,78],{"class":77},[67,32275,1050],{"class":73},[67,32277,32278,32280,32283,32285,32287,32289],{"class":69,"line":694},[67,32279,1626],{"class":77},[67,32281,32282],{"class":73},"(torch.rand(",[67,32284,2071],{"class":77},[67,32286,2369],{"class":73},[67,32288,2071],{"class":77},[67,32290,32291],{"class":73},").cuda())\n",[67,32293,32294],{"class":69,"line":700},[67,32295,32296],{"class":2058},"# 查看cuda和cudnn的版本\n",[67,32298,32299,32302,32304],{"class":69,"line":706},[67,32300,32301],{"class":73},"cuda_version",[67,32303,85],{"class":84},[67,32305,32306],{"class":73},"torch.version.cuda\n",[67,32308,32309,32311,32313,32316],{"class":69,"line":712},[67,32310,1626],{"class":77},[67,32312,854],{"class":73},[67,32314,32315],{"class":114},"\"cuda version\"",[67,32317,32318],{"class":73},",cuda_version)\n",[67,32320,32321,32324,32326],{"class":69,"line":717},[67,32322,32323],{"class":73},"cudnn_version",[67,32325,85],{"class":84},[67,32327,32328],{"class":73},"torch.backends.cudnn.version()\n",[67,32330,32331,32333,32335,32338],{"class":69,"line":723},[67,32332,1626],{"class":77},[67,32334,854],{"class":73},[67,32336,32337],{"class":114},"\"cudnn version\"",[67,32339,32340],{"class":73},",cudnn_version)\n",[19,32342,32343],{},[3317,32344],{"alt":63,"src":32345},"\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,32347,32348],{},"cuda:0 指的是一块显卡",[1903,32350,32351],{},"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":63,"searchDepth":191,"depth":191,"links":32353},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32066,"description":25173},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32360,"title":32361,"body":32362,"description":25173,"extension":1930,"meta":52156,"navigation":630,"path":52157,"seo":52158,"stem":52159,"__hash__":52160},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32363,"toc":52150},[32364,32367,32371,32375,32378,32383,32388,32391,32396,32401,32406,32409,32413,32418,32422,32427,32430,32435,32438,32441,32444,32447,32452,32455,32460,32465,32470,32475,32478,32482,32485,32490,33091,33096,33099,33104,33107,33110,33570,33573,33576,33579,33582,35631,35634,35639,35644,36439,36442,36447,37224,37228,38887,38891,39605,39609,39613,39618,39623,39628,39631,39636,39641,39646,39651,39656,39660,39665,40947,40952,40955,40958,40961,41116,41119,41122,42338,42343,43038,43042,43046,43051,43056,43059,43064,43069,43074,43079,43084,43089,43094,43099,43104,43109,43114,43119,43124,43129,43134,43139,43144,43149,43154,43159,43164,43169,43174,43179,43184,43189,43194,43199,43204,43209,43213,43217,43220,44698,44702,46349,46353,47047,47051,47054,47057,47601,47604,47608,47611,49008,49012,49015,49593,51380,51384,51387,52147],[10,32365,32361],{"id":32366},"_2经典神经网络",[391,32368,32370],{"id":32369},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23794,32372,32374],{"id":32373},"_211原理介绍","2.1.1.原理介绍",[19,32376,32377],{},"LeNet-5",[26,32379,32380],{},[29,32381,32382],{},"原理",[19,32384,32385],{},[3317,32386],{"alt":63,"src":32387},"\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,32389,32390],{},"B是batch批次；C是channel通道",[26,32392,32393],{"start":191},[29,32394,32395],{},"网络参数详细",[19,32397,32398],{},[3317,32399],{"alt":63,"src":32400},"\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,32402,32403],{},[3317,32404],{"alt":63,"src":32405},"\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,32407,32408],{},"AlexNet",[26,32410,32411],{},[29,32412,32382],{},[19,32414,32415],{},[3317,32416],{"alt":63,"src":32417},"\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,32419,32420],{"start":191},[29,32421,32395],{},[19,32423,32424],{},[3317,32425],{"alt":63,"src":32426},"\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,32428,32429],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32431,32432],{},[3317,32433],{"alt":63,"src":32434},"\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,32436,32437],{},"数据处理中的图像增强操作:",[19,32439,32440],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32442,32443],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32445,32446],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32448,32449],{},[3317,32450],{"alt":63,"src":32451},"\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,32453,32454],{},"提升网络精确度的方法：LRN正则化",[19,32456,32457],{},[3317,32458],{"alt":63,"src":32459},"\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,32461,32462],{},[3317,32463],{"alt":63,"src":32464},"\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,32466,32467],{"start":202},[29,32468,32469],{},"AlexNet的总结",[19,32471,32472],{},[3317,32473],{"alt":63,"src":32474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,32476,32477],{},"比LeNet模型要深一丢丢",[23794,32479,32481],{"id":32480},"_212代码实现","2.1.2.代码实现",[19,32483,32484],{},"（1）LeNet",[26,32486,32487],{},[29,32488,32489],{},"模型搭建",[58,32491,32493],{"className":60,"code":32492,"language":62,"meta":63,"style":63},"# 导入库\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",[32,32494,32495,32500,32506,32511,32524,32529,32541,32545,32564,32569,32574,32585,32590,32609,32613,32618,32667,32679,32684,32713,32748,32775,32780,32792,32797,32817,32836,32855,32859,32864,32874,32891,32902,32917,32928,32939,32954,32969,32980,32987,32991,33004,33009,33032,33037,33042,33047,33051,33056,33061,33071],{"__ignoreMap":63},[67,32496,32497],{"class":69,"line":70},[67,32498,32499],{"class":2058},"# 导入库\n",[67,32501,32502,32504],{"class":69,"line":191},[67,32503,622],{"class":84},[67,32505,32175],{"class":73},[67,32507,32508],{"class":69,"line":202},[67,32509,32510],{"class":2058},"# 导入神经网络层\n",[67,32512,32513,32516,32519,32521],{"class":69,"line":641},[67,32514,32515],{"class":84},"from",[67,32517,32518],{"class":73}," torch ",[67,32520,622],{"class":84},[67,32522,32523],{"class":73}," nn\n",[67,32525,32526],{"class":69,"line":655},[67,32527,32528],{"class":2058},"# 导入展示神经网络参数的包\n",[67,32530,32531,32533,32536,32538],{"class":69,"line":660},[67,32532,32515],{"class":84},[67,32534,32535],{"class":73}," torchsummary ",[67,32537,622],{"class":84},[67,32539,32540],{"class":73}," summary\n",[67,32542,32543],{"class":69,"line":665},[67,32544,631],{"emptyLinePlaceholder":630},[67,32546,32547,32549,32552,32554,32557,32559,32562],{"class":69,"line":677},[67,32548,16492],{"class":84},[67,32550,32551],{"class":110}," LeNet",[67,32553,854],{"class":73},[67,32555,32556],{"class":110},"nn",[67,32558,2547],{"class":73},[67,32560,32561],{"class":110},"Module",[67,32563,952],{"class":73},[67,32565,32566],{"class":69,"line":683},[67,32567,32568],{"class":2058},"    # 模型初始化:\n",[67,32570,32571],{"class":69,"line":689},[67,32572,32573],{"class":2058},"    # 定义一些网络层和激活函数\n",[67,32575,32576,32579,32582],{"class":69,"line":694},[67,32577,32578],{"class":84},"    def",[67,32580,32581],{"class":77}," __init__",[67,32583,32584],{"class":73},"(self):\n",[67,32586,32587],{"class":69,"line":700},[67,32588,32589],{"class":2058},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[67,32591,32592,32595,32598,32601,32604,32607],{"class":69,"line":706},[67,32593,32594],{"class":77},"        super",[67,32596,32597],{"class":73},"(LeNet,",[67,32599,32600],{"class":77},"self",[67,32602,32603],{"class":73},").",[67,32605,32606],{"class":77},"__init__",[67,32608,3809],{"class":73},[67,32610,32611],{"class":69,"line":712},[67,32612,631],{"emptyLinePlaceholder":630},[67,32614,32615],{"class":69,"line":717},[67,32616,32617],{"class":2058},"        # 定义网络层\n",[67,32619,32620,32623,32626,32628,32631,32634,32636,32638,32640,32643,32645,32647,32649,32652,32654,32656,32658,32661,32663,32665],{"class":69,"line":723},[67,32621,32622],{"class":77},"        self",[67,32624,32625],{"class":73},".c1",[67,32627,85],{"class":84},[67,32629,32630],{"class":73},"nn.Conv2d(",[67,32632,32633],{"class":7033},"in_channels",[67,32635,85],{"class":84},[67,32637,2209],{"class":77},[67,32639,2369],{"class":73},[67,32641,32642],{"class":7033},"out_channels",[67,32644,85],{"class":84},[67,32646,2335],{"class":77},[67,32648,2369],{"class":73},[67,32650,32651],{"class":7033},"kernel_size",[67,32653,85],{"class":84},[67,32655,2310],{"class":77},[67,32657,2369],{"class":73},[67,32659,32660],{"class":7033},"padding",[67,32662,85],{"class":84},[67,32664,2077],{"class":77},[67,32666,829],{"class":73},[67,32668,32669,32671,32674,32676],{"class":69,"line":729},[67,32670,32622],{"class":77},[67,32672,32673],{"class":73},".sig",[67,32675,85],{"class":84},[67,32677,32678],{"class":73},"nn.Sigmoid()\n",[67,32680,32681],{"class":69,"line":735},[67,32682,32683],{"class":2058},"        # 定义池化\n",[67,32685,32686,32688,32691,32693,32696,32698,32700,32702,32704,32707,32709,32711],{"class":69,"line":741},[67,32687,32622],{"class":77},[67,32689,32690],{"class":73},".s2",[67,32692,85],{"class":84},[67,32694,32695],{"class":73},"nn.AvgPool2d(",[67,32697,32651],{"class":7033},[67,32699,85],{"class":84},[67,32701,2077],{"class":77},[67,32703,2369],{"class":73},[67,32705,32706],{"class":7033},"stride",[67,32708,85],{"class":84},[67,32710,2077],{"class":77},[67,32712,829],{"class":73},[67,32714,32715,32717,32720,32722,32724,32726,32728,32730,32732,32734,32736,32738,32740,32742,32744,32746],{"class":69,"line":747},[67,32716,32622],{"class":77},[67,32718,32719],{"class":73},".c3",[67,32721,85],{"class":84},[67,32723,32630],{"class":73},[67,32725,32633],{"class":7033},[67,32727,85],{"class":84},[67,32729,2335],{"class":77},[67,32731,2369],{"class":73},[67,32733,32642],{"class":7033},[67,32735,85],{"class":84},[67,32737,2590],{"class":77},[67,32739,2369],{"class":73},[67,32741,32651],{"class":7033},[67,32743,85],{"class":84},[67,32745,2310],{"class":77},[67,32747,829],{"class":73},[67,32749,32750,32752,32755,32757,32759,32761,32763,32765,32767,32769,32771,32773],{"class":69,"line":753},[67,32751,32622],{"class":77},[67,32753,32754],{"class":73},".s4",[67,32756,85],{"class":84},[67,32758,32695],{"class":73},[67,32760,32651],{"class":7033},[67,32762,85],{"class":84},[67,32764,2077],{"class":77},[67,32766,2369],{"class":73},[67,32768,32706],{"class":7033},[67,32770,85],{"class":84},[67,32772,2077],{"class":77},[67,32774,829],{"class":73},[67,32776,32777],{"class":69,"line":758},[67,32778,32779],{"class":2058},"        # 定义平展层\n",[67,32781,32782,32784,32787,32789],{"class":69,"line":764},[67,32783,32622],{"class":77},[67,32785,32786],{"class":73},".flatten",[67,32788,85],{"class":84},[67,32790,32791],{"class":73},"nn.Flatten()\n",[67,32793,32794],{"class":69,"line":770},[67,32795,32796],{"class":2058},"        # 定义全连接层\n",[67,32798,32799,32801,32804,32806,32809,32811,32813,32815],{"class":69,"line":776},[67,32800,32622],{"class":77},[67,32802,32803],{"class":73},".f5",[67,32805,85],{"class":84},[67,32807,32808],{"class":73},"nn.Linear(",[67,32810,5807],{"class":77},[67,32812,2369],{"class":73},[67,32814,2806],{"class":77},[67,32816,829],{"class":73},[67,32818,32819,32821,32824,32826,32828,32830,32832,32834],{"class":69,"line":782},[67,32820,32622],{"class":77},[67,32822,32823],{"class":73},".f6",[67,32825,85],{"class":84},[67,32827,32808],{"class":73},[67,32829,2806],{"class":77},[67,32831,2369],{"class":73},[67,32833,2700],{"class":77},[67,32835,829],{"class":73},[67,32837,32838,32840,32843,32845,32847,32849,32851,32853],{"class":69,"line":788},[67,32839,32622],{"class":77},[67,32841,32842],{"class":73},".f7",[67,32844,85],{"class":84},[67,32846,32808],{"class":73},[67,32848,2700],{"class":77},[67,32850,2369],{"class":73},[67,32852,2437],{"class":77},[67,32854,829],{"class":73},[67,32856,32857],{"class":69,"line":793},[67,32858,631],{"emptyLinePlaceholder":630},[67,32860,32861],{"class":69,"line":798},[67,32862,32863],{"class":2058},"    # 写工具->写前向传播\n",[67,32865,32866,32868,32871],{"class":69,"line":816},[67,32867,32578],{"class":84},[67,32869,32870],{"class":110}," forward",[67,32872,32873],{"class":73},"(self,x):\n",[67,32875,32876,32879,32881,32883,32886,32888],{"class":69,"line":832},[67,32877,32878],{"class":73},"        x",[67,32880,85],{"class":84},[67,32882,32600],{"class":77},[67,32884,32885],{"class":73},".sig(",[67,32887,32600],{"class":77},[67,32889,32890],{"class":73},".c1(x))\n",[67,32892,32893,32895,32897,32899],{"class":69,"line":843},[67,32894,32878],{"class":73},[67,32896,85],{"class":84},[67,32898,32600],{"class":77},[67,32900,32901],{"class":73},".s2(x)\n",[67,32903,32904,32906,32908,32910,32912,32914],{"class":69,"line":848},[67,32905,32878],{"class":73},[67,32907,85],{"class":84},[67,32909,32600],{"class":77},[67,32911,32885],{"class":73},[67,32913,32600],{"class":77},[67,32915,32916],{"class":73},".c3(x))\n",[67,32918,32919,32921,32923,32925],{"class":69,"line":863},[67,32920,32878],{"class":73},[67,32922,85],{"class":84},[67,32924,32600],{"class":77},[67,32926,32927],{"class":73},".s4(x)\n",[67,32929,32930,32932,32934,32936],{"class":69,"line":876},[67,32931,32878],{"class":73},[67,32933,85],{"class":84},[67,32935,32600],{"class":77},[67,32937,32938],{"class":73},".flatten(x)\n",[67,32940,32941,32943,32945,32947,32949,32951],{"class":69,"line":889},[67,32942,32878],{"class":73},[67,32944,85],{"class":84},[67,32946,32600],{"class":77},[67,32948,32885],{"class":73},[67,32950,32600],{"class":77},[67,32952,32953],{"class":73},".f5(x))\n",[67,32955,32956,32958,32960,32962,32964,32966],{"class":69,"line":894},[67,32957,32878],{"class":73},[67,32959,85],{"class":84},[67,32961,32600],{"class":77},[67,32963,32885],{"class":73},[67,32965,32600],{"class":77},[67,32967,32968],{"class":73},".f6(x))\n",[67,32970,32971,32973,32975,32977],{"class":69,"line":911},[67,32972,32878],{"class":73},[67,32974,85],{"class":84},[67,32976,32600],{"class":77},[67,32978,32979],{"class":73},".f7(x)\n",[67,32981,32982,32984],{"class":69,"line":927},[67,32983,16550],{"class":84},[67,32985,32986],{"class":73}," x\n",[67,32988,32989],{"class":69,"line":932},[67,32990,631],{"emptyLinePlaceholder":630},[67,32992,32993,32995,32997,32999,33002],{"class":69,"line":955},[67,32994,1096],{"class":84},[67,32996,1099],{"class":77},[67,32998,4774],{"class":84},[67,33000,33001],{"class":114},"\"__main__\"",[67,33003,813],{"class":73},[67,33005,33006],{"class":69,"line":971},[67,33007,33008],{"class":2058},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[67,33010,33011,33014,33016,33018,33021,33023,33026,33028,33030],{"class":69,"line":1010},[67,33012,33013],{"class":73},"    device",[67,33015,85],{"class":84},[67,33017,32230],{"class":73},[67,33019,33020],{"class":114},"\"cuda\"",[67,33022,3547],{"class":84},[67,33024,33025],{"class":73}," torch.cuda.is_available() ",[67,33027,3544],{"class":84},[67,33029,32255],{"class":114},[67,33031,829],{"class":73},[67,33033,33034],{"class":69,"line":1016},[67,33035,33036],{"class":2058},"    # 如果就是想指定用cpu用下方代码:\n",[67,33038,33039],{"class":69,"line":1021},[67,33040,33041],{"class":2058},"    # device=\"cpu\"\n",[67,33043,33044],{"class":69,"line":1034},[67,33045,33046],{"class":2058},"    # print(device)\n",[67,33048,33049],{"class":69,"line":1053},[67,33050,631],{"emptyLinePlaceholder":630},[67,33052,33053],{"class":69,"line":1070},[67,33054,33055],{"class":2058},"    # 实例化模型\n",[67,33057,33058],{"class":69,"line":1083},[67,33059,33060],{"class":2058},"    # 将模型放到设备中去运行\n",[67,33062,33063,33066,33068],{"class":69,"line":1088},[67,33064,33065],{"class":73},"    model",[67,33067,85],{"class":84},[67,33069,33070],{"class":73},"LeNet().to(device)\n",[67,33072,33073,33075,33078,33080,33082,33084,33086,33088],{"class":69,"line":1093},[67,33074,851],{"class":77},[67,33076,33077],{"class":73},"(summary(model,(",[67,33079,2209],{"class":77},[67,33081,2369],{"class":73},[67,33083,2890],{"class":77},[67,33085,2369],{"class":73},[67,33087,2890],{"class":77},[67,33089,33090],{"class":73},")))\n",[19,33092,33093],{},[3317,33094],{"alt":63,"src":33095},"\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,33097,33098],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[26,33100,33101],{"start":191},[29,33102,33103],{},"训练",[19,33105,33106],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33108,33109],{},"在训练之前可以将数据展示看一下",[58,33111,33113],{"className":60,"code":33112,"language":62,"meta":63,"style":63},"# 建立画图的函数，用于展示数据\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",[32,33114,33115,33120,33125,33137,33149,33159,33164,33176,33181,33193,33198,33210,33214,33218,33239,33251,33256,33277,33288,33292,33297,33315,33326,33331,33342,33347,33358,33362,33367,33382,33394,33399,33404,33417,33430,33443,33448,33452,33457,33477,33494,33514,33527,33540,33550,33565],{"__ignoreMap":63},[67,33116,33117],{"class":69,"line":70},[67,33118,33119],{"class":2058},"# 建立画图的函数，用于展示数据\n",[67,33121,33122],{"class":69,"line":191},[67,33123,33124],{"class":2058},"# torchvision中包含很多内置的数据集\n",[67,33126,33127,33129,33132,33134],{"class":69,"line":202},[67,33128,32515],{"class":84},[67,33130,33131],{"class":73}," sklearn.externals.array_api_compat.torch ",[67,33133,622],{"class":84},[67,33135,33136],{"class":73}," squeeze\n",[67,33138,33139,33141,33144,33146],{"class":69,"line":641},[67,33140,32515],{"class":84},[67,33142,33143],{"class":73}," torchvision.datasets ",[67,33145,622],{"class":84},[67,33147,33148],{"class":73}," FashionMNIST\n",[67,33150,33151,33153,33155,33157],{"class":69,"line":655},[67,33152,622],{"class":84},[67,33154,646],{"class":73},[67,33156,649],{"class":84},[67,33158,652],{"class":73},[67,33160,33161],{"class":69,"line":660},[67,33162,33163],{"class":2058},"# 引入处理数据集的包\n",[67,33165,33166,33168,33171,33173],{"class":69,"line":665},[67,33167,32515],{"class":84},[67,33169,33170],{"class":73}," torchvision ",[67,33172,622],{"class":84},[67,33174,33175],{"class":73}," transforms\n",[67,33177,33178],{"class":69,"line":677},[67,33179,33180],{"class":2058},"# 从torch库中引入数据处理的包\n",[67,33182,33183,33185,33188,33190],{"class":69,"line":683},[67,33184,622],{"class":84},[67,33186,33187],{"class":73}," torch.utils.data ",[67,33189,649],{"class":84},[67,33191,33192],{"class":73}," Data\n",[67,33194,33195],{"class":69,"line":689},[67,33196,33197],{"class":2058},"# 导入画图的库\n",[67,33199,33200,33202,33205,33207],{"class":69,"line":694},[67,33201,622],{"class":84},[67,33203,33204],{"class":73}," matplotlib.pyplot ",[67,33206,649],{"class":84},[67,33208,33209],{"class":73}," plt\n",[67,33211,33212],{"class":69,"line":700},[67,33213,631],{"emptyLinePlaceholder":630},[67,33215,33216],{"class":69,"line":706},[67,33217,631],{"emptyLinePlaceholder":630},[67,33219,33220,33223,33225,33228,33231,33233,33236],{"class":69,"line":712},[67,33221,33222],{"class":73},"train_data",[67,33224,85],{"class":84},[67,33226,33227],{"class":73},"FashionMNIST(",[67,33229,33230],{"class":7033},"root",[67,33232,85],{"class":84},[67,33234,33235],{"class":114},"'.\u002Fdata'",[67,33237,33238],{"class":73},",\n",[67,33240,33241,33244,33246,33249],{"class":69,"line":717},[67,33242,33243],{"class":7033},"                        train",[67,33245,85],{"class":84},[67,33247,33248],{"class":77},"True",[67,33250,33238],{"class":73},[67,33252,33253],{"class":69,"line":723},[67,33254,33255],{"class":2058},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[67,33257,33258,33261,33263,33266,33269,33271,33274],{"class":69,"line":729},[67,33259,33260],{"class":7033},"                        transform",[67,33262,85],{"class":84},[67,33264,33265],{"class":73},"transforms.Compose([transforms.Resize(",[67,33267,33268],{"class":7033},"size",[67,33270,85],{"class":84},[67,33272,33273],{"class":77},"224",[67,33275,33276],{"class":73},"),transforms.ToTensor()]),\n",[67,33278,33279,33282,33284,33286],{"class":69,"line":735},[67,33280,33281],{"class":7033},"                        download",[67,33283,85],{"class":84},[67,33285,33248],{"class":77},[67,33287,829],{"class":73},[67,33289,33290],{"class":69,"line":741},[67,33291,631],{"emptyLinePlaceholder":630},[67,33293,33294],{"class":69,"line":747},[67,33295,33296],{"class":2058},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[67,33298,33299,33302,33304,33307,33310,33312],{"class":69,"line":753},[67,33300,33301],{"class":73},"train_loader",[67,33303,85],{"class":84},[67,33305,33306],{"class":73},"Data.DataLoader(",[67,33308,33309],{"class":7033},"dataset",[67,33311,85],{"class":84},[67,33313,33314],{"class":73},"train_data,\n",[67,33316,33317,33320,33322,33324],{"class":69,"line":758},[67,33318,33319],{"class":7033},"                             batch_size",[67,33321,85],{"class":84},[67,33323,2195],{"class":77},[67,33325,33238],{"class":73},[67,33327,33328],{"class":69,"line":764},[67,33329,33330],{"class":2058},"                             # 数据是否打乱\n",[67,33332,33333,33336,33338,33340],{"class":69,"line":770},[67,33334,33335],{"class":7033},"                             shuffle",[67,33337,85],{"class":84},[67,33339,33248],{"class":77},[67,33341,33238],{"class":73},[67,33343,33344],{"class":69,"line":776},[67,33345,33346],{"class":2058},"                             # 规定加载数据的进程\n",[67,33348,33349,33352,33354,33356],{"class":69,"line":782},[67,33350,33351],{"class":7033},"                             num_workers",[67,33353,85],{"class":84},[67,33355,78],{"class":77},[67,33357,829],{"class":73},[67,33359,33360],{"class":69,"line":788},[67,33361,631],{"emptyLinePlaceholder":630},[67,33363,33364],{"class":69,"line":793},[67,33365,33366],{"class":2058},"# 获得一个batch的数据\n",[67,33368,33369,33371,33374,33376,33379],{"class":69,"line":798},[67,33370,1512],{"class":84},[67,33372,33373],{"class":73}," step,(b_x,b_y) ",[67,33375,941],{"class":84},[67,33377,33378],{"class":77}," enumerate",[67,33380,33381],{"class":73},"(train_loader):\n",[67,33383,33384,33386,33388,33390,33392],{"class":69,"line":816},[67,33385,897],{"class":84},[67,33387,938],{"class":73},[67,33389,2948],{"class":84},[67,33391,5913],{"class":77},[67,33393,813],{"class":73},[67,33395,33396],{"class":69,"line":832},[67,33397,33398],{"class":84},"        break\n",[67,33400,33401],{"class":69,"line":843},[67,33402,33403],{"class":2058},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[67,33405,33406,33409,33411,33414],{"class":69,"line":848},[67,33407,33408],{"class":73},"batch_x",[67,33410,85],{"class":84},[67,33412,33413],{"class":73},"b_x.squeeze().numpy()  ",[67,33415,33416],{"class":2058},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[67,33418,33419,33422,33424,33427],{"class":69,"line":863},[67,33420,33421],{"class":73},"batch_y",[67,33423,85],{"class":84},[67,33425,33426],{"class":73},"b_y.numpy()   ",[67,33428,33429],{"class":2058},"#将张量转换成功numpy数组\n",[67,33431,33432,33435,33437,33440],{"class":69,"line":876},[67,33433,33434],{"class":73},"class_label",[67,33436,85],{"class":84},[67,33438,33439],{"class":73},"train_data.classes  ",[67,33441,33442],{"class":2058},"#训练集标签\n",[67,33444,33445],{"class":69,"line":889},[67,33446,33447],{"class":2058},"# print(class_label)\n",[67,33449,33450],{"class":69,"line":894},[67,33451,631],{"emptyLinePlaceholder":630},[67,33453,33454],{"class":69,"line":911},[67,33455,33456],{"class":2058},"# 可视化一个batch的图像\n",[67,33458,33459,33462,33465,33467,33469,33471,33473,33475],{"class":69,"line":927},[67,33460,33461],{"class":73},"plt.figure(",[67,33463,33464],{"class":7033},"figsize",[67,33466,85],{"class":84},[67,33468,854],{"class":73},[67,33470,2488],{"class":77},[67,33472,2369],{"class":73},[67,33474,2310],{"class":77},[67,33476,1050],{"class":73},[67,33478,33479,33481,33484,33486,33489,33491],{"class":69,"line":932},[67,33480,1512],{"class":84},[67,33482,33483],{"class":73}," ii ",[67,33485,941],{"class":84},[67,33487,33488],{"class":73}," np.arange(",[67,33490,9174],{"class":77},[67,33492,33493],{"class":73},"(batch_y)):\n",[67,33495,33496,33499,33501,33503,33505,33508,33510,33512],{"class":69,"line":955},[67,33497,33498],{"class":73},"    plt.subplot(",[67,33500,1047],{"class":77},[67,33502,2369],{"class":73},[67,33504,2590],{"class":77},[67,33506,33507],{"class":73},",ii ",[67,33509,2471],{"class":84},[67,33511,906],{"class":77},[67,33513,829],{"class":73},[67,33515,33516,33519,33522,33524],{"class":69,"line":971},[67,33517,33518],{"class":73},"    plt.imshow(batch_x[ii,:,:],",[67,33520,33521],{"class":7033},"cmap",[67,33523,85],{"class":84},[67,33525,33526],{"class":73},"plt.cm.gray)\n",[67,33528,33529,33532,33534,33536,33538],{"class":69,"line":1010},[67,33530,33531],{"class":73},"    plt.title(class_label[batch_y[ii]],",[67,33533,33268],{"class":7033},[67,33535,85],{"class":84},[67,33537,2437],{"class":77},[67,33539,829],{"class":73},[67,33541,33542,33545,33548],{"class":69,"line":1016},[67,33543,33544],{"class":73},"    plt.axis(",[67,33546,33547],{"class":114},"\"off\"",[67,33549,829],{"class":73},[67,33551,33552,33555,33558,33560,33563],{"class":69,"line":1021},[67,33553,33554],{"class":73},"    plt.subplots_adjust(",[67,33556,33557],{"class":7033},"wspace",[67,33559,85],{"class":84},[67,33561,33562],{"class":77},"0.05",[67,33564,829],{"class":73},[67,33566,33567],{"class":69,"line":1034},[67,33568,33569],{"class":73},"plt.show()\n",[19,33571,33572],{},"用matplotlib进行展示的过程可以后续再补",[19,33574,33575],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33577,33578],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33580,33581],{},"模型训练：",[58,33583,33585],{"className":60,"code":33584,"language":62,"meta":63,"style":63},"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",[32,33586,33587,33594,33601,33605,33617,33623,33634,33644,33654,33664,33674,33679,33691,33701,33705,33709,33714,33724,33737,33748,33765,33776,33815,33831,33843,33854,33859,33870,33886,33897,33908,33919,33926,33930,33935,33940,33944,33949,33959,33980,33984,33988,33993,33998,34003,34023,34027,34032,34042,34046,34051,34060,34065,34070,34075,34085,34089,34093,34098,34103,34113,34118,34128,34133,34142,34147,34156,34161,34170,34174,34179,34189,34193,34197,34202,34216,34244,34259,34263,34268,34273,34282,34287,34296,34301,34310,34315,34324,34329,34338,34343,34352,34357,34370,34375,34385,34390,34400,34406,34412,34418,34424,34435,34441,34461,34467,34478,34484,34490,34496,34502,34508,34514,34520,34540,34546,34562,34568,34582,34588,34603,34609,34618,34624,34633,34639,34645,34654,34660,34671,34677,34696,34702,34713,34719,34739,34755,34761,34775,34781,34787,34798,34804,34810,34820,34826,34837,34843,34853,34858,34864,34913,34960,34965,34971,34990,34996,35016,35022,35028,35038,35043,35049,35065,35110,35116,35122,35128,35139,35145,35151,35157,35175,35189,35198,35207,35216,35225,35231,35237,35245,35250,35256,35267,35273,35293,35299,35305,35311,35328,35334,35340,35346,35352,35358,35385,35409,35415,35421,35427,35438,35449,35455,35472,35495,35518,35524,35529,35538,35548,35554,35559,35565,35578,35584,35595,35606,35625],{"__ignoreMap":63},[67,33588,33589,33591],{"class":69,"line":70},[67,33590,622],{"class":84},[67,33592,33593],{"class":73}," copy\n",[67,33595,33596,33598],{"class":69,"line":191},[67,33597,622],{"class":84},[67,33599,33600],{"class":73}," time\n",[67,33602,33603],{"class":69,"line":202},[67,33604,631],{"emptyLinePlaceholder":630},[67,33606,33607,33609,33612,33614],{"class":69,"line":641},[67,33608,622],{"class":84},[67,33610,33611],{"class":73}," pandas ",[67,33613,649],{"class":84},[67,33615,33616],{"class":73}," pd\n",[67,33618,33619,33621],{"class":69,"line":655},[67,33620,622],{"class":84},[67,33622,32175],{"class":73},[67,33624,33625,33627,33629,33631],{"class":69,"line":660},[67,33626,32515],{"class":84},[67,33628,33187],{"class":73},[67,33630,622],{"class":84},[67,33632,33633],{"class":73}," Dataset\n",[67,33635,33636,33638,33640,33642],{"class":69,"line":665},[67,33637,32515],{"class":84},[67,33639,33143],{"class":73},[67,33641,622],{"class":84},[67,33643,33148],{"class":73},[67,33645,33646,33648,33650,33652],{"class":69,"line":677},[67,33647,32515],{"class":84},[67,33649,33170],{"class":73},[67,33651,622],{"class":84},[67,33653,33175],{"class":73},[67,33655,33656,33658,33660,33662],{"class":69,"line":683},[67,33657,622],{"class":84},[67,33659,33187],{"class":73},[67,33661,649],{"class":84},[67,33663,33192],{"class":73},[67,33665,33666,33668,33670,33672],{"class":69,"line":689},[67,33667,622],{"class":84},[67,33669,33204],{"class":73},[67,33671,649],{"class":84},[67,33673,33209],{"class":73},[67,33675,33676],{"class":69,"line":694},[67,33677,33678],{"class":2058},"# 导入模型\n",[67,33680,33681,33683,33686,33688],{"class":69,"line":700},[67,33682,32515],{"class":84},[67,33684,33685],{"class":73}," model ",[67,33687,622],{"class":84},[67,33689,33690],{"class":73}," LeNet\n",[67,33692,33693,33695,33697,33699],{"class":69,"line":706},[67,33694,32515],{"class":84},[67,33696,32518],{"class":73},[67,33698,622],{"class":84},[67,33700,32523],{"class":73},[67,33702,33703],{"class":69,"line":712},[67,33704,631],{"emptyLinePlaceholder":630},[67,33706,33707],{"class":69,"line":717},[67,33708,631],{"emptyLinePlaceholder":630},[67,33710,33711],{"class":69,"line":723},[67,33712,33713],{"class":2058},"# 处理训练集与验证集函数--->划分数据集\n",[67,33715,33716,33718,33721],{"class":69,"line":729},[67,33717,801],{"class":84},[67,33719,33720],{"class":110}," train_val_data_process",[67,33722,33723],{"class":73},"():\n",[67,33725,33726,33729,33731,33733,33735],{"class":69,"line":735},[67,33727,33728],{"class":73},"    train_data",[67,33730,85],{"class":84},[67,33732,33227],{"class":73},[67,33734,33235],{"class":114},[67,33736,33238],{"class":73},[67,33738,33739,33742,33744,33746],{"class":69,"line":741},[67,33740,33741],{"class":7033},"                            train",[67,33743,85],{"class":84},[67,33745,33248],{"class":77},[67,33747,33238],{"class":73},[67,33749,33750,33753,33755,33757,33759,33761,33763],{"class":69,"line":747},[67,33751,33752],{"class":7033},"                            transform",[67,33754,85],{"class":84},[67,33756,33265],{"class":73},[67,33758,33268],{"class":7033},[67,33760,85],{"class":84},[67,33762,2890],{"class":77},[67,33764,33276],{"class":73},[67,33766,33767,33770,33772,33774],{"class":69,"line":753},[67,33768,33769],{"class":7033},"                            download",[67,33771,85],{"class":84},[67,33773,33248],{"class":77},[67,33775,829],{"class":73},[67,33777,33778,33781,33783,33786,33789,33791,33794,33796,33798,33801,33803,33805,33808,33810,33812],{"class":69,"line":758},[67,33779,33780],{"class":73},"    train_data,val_data",[67,33782,85],{"class":84},[67,33784,33785],{"class":73},"Data.random_split(train_data,[",[67,33787,33788],{"class":77},"round",[67,33790,854],{"class":73},[67,33792,33793],{"class":77},"0.8",[67,33795,965],{"class":84},[67,33797,9174],{"class":77},[67,33799,33800],{"class":73},"(train_data)),",[67,33802,33788],{"class":77},[67,33804,854],{"class":73},[67,33806,33807],{"class":77},"0.2",[67,33809,965],{"class":84},[67,33811,9174],{"class":77},[67,33813,33814],{"class":73},"(train_data))])\n",[67,33816,33817,33820,33822,33825,33827,33829],{"class":69,"line":764},[67,33818,33819],{"class":73},"    train_dataloader ",[67,33821,85],{"class":84},[67,33823,33824],{"class":73}," Data.DataLoader(",[67,33826,33309],{"class":7033},[67,33828,85],{"class":84},[67,33830,33314],{"class":73},[67,33832,33833,33836,33838,33841],{"class":69,"line":770},[67,33834,33835],{"class":7033},"                                       batch_size",[67,33837,85],{"class":84},[67,33839,33840],{"class":77},"128",[67,33842,33238],{"class":73},[67,33844,33845,33848,33850,33852],{"class":69,"line":776},[67,33846,33847],{"class":7033},"                                       shuffle",[67,33849,85],{"class":84},[67,33851,33248],{"class":77},[67,33853,33238],{"class":73},[67,33855,33856],{"class":69,"line":782},[67,33857,33858],{"class":2058},"                                       # 规定8个进程\n",[67,33860,33861,33864,33866,33868],{"class":69,"line":788},[67,33862,33863],{"class":7033},"                                       num_workers",[67,33865,85],{"class":84},[67,33867,2386],{"class":77},[67,33869,829],{"class":73},[67,33871,33872,33875,33877,33879,33881,33883],{"class":69,"line":793},[67,33873,33874],{"class":73},"    val_dataloader",[67,33876,85],{"class":84},[67,33878,33306],{"class":73},[67,33880,33309],{"class":7033},[67,33882,85],{"class":84},[67,33884,33885],{"class":73},"val_data,\n",[67,33887,33888,33891,33893,33895],{"class":69,"line":798},[67,33889,33890],{"class":7033},"                                   batch_size",[67,33892,85],{"class":84},[67,33894,33840],{"class":77},[67,33896,33238],{"class":73},[67,33898,33899,33902,33904,33906],{"class":69,"line":816},[67,33900,33901],{"class":7033},"                                   shuffle",[67,33903,85],{"class":84},[67,33905,33248],{"class":77},[67,33907,33238],{"class":73},[67,33909,33910,33913,33915,33917],{"class":69,"line":832},[67,33911,33912],{"class":7033},"                                   num_workers",[67,33914,85],{"class":84},[67,33916,2386],{"class":77},[67,33918,829],{"class":73},[67,33920,33921,33923],{"class":69,"line":843},[67,33922,5910],{"class":84},[67,33924,33925],{"class":73}," train_dataloader,val_dataloader\n",[67,33927,33928],{"class":69,"line":848},[67,33929,631],{"emptyLinePlaceholder":630},[67,33931,33932],{"class":69,"line":863},[67,33933,33934],{"class":2058},"# 验证是否出错\n",[67,33936,33937],{"class":69,"line":876},[67,33938,33939],{"class":2058},"# train_val_data_process()\n",[67,33941,33942],{"class":69,"line":889},[67,33943,631],{"emptyLinePlaceholder":630},[67,33945,33946],{"class":69,"line":894},[67,33947,33948],{"class":2058},"# 定义模型训练函数\n",[67,33950,33951,33953,33956],{"class":69,"line":911},[67,33952,801],{"class":84},[67,33954,33955],{"class":110}," train_model_process",[67,33957,33958],{"class":73},"(model,train_dataloader,val_dataloader,num_epochs):\n",[67,33960,33961,33963,33965,33967,33969,33971,33973,33975,33978],{"class":69,"line":927},[67,33962,33013],{"class":73},[67,33964,85],{"class":84},[67,33966,32230],{"class":73},[67,33968,33020],{"class":114},[67,33970,3547],{"class":84},[67,33972,33025],{"class":73},[67,33974,3544],{"class":84},[67,33976,33977],{"class":114}," 'cpu'",[67,33979,829],{"class":73},[67,33981,33982],{"class":69,"line":932},[67,33983,631],{"emptyLinePlaceholder":630},[67,33985,33986],{"class":69,"line":955},[67,33987,631],{"emptyLinePlaceholder":630},[67,33989,33990],{"class":69,"line":971},[67,33991,33992],{"class":2058},"    # 定义优化器\n",[67,33994,33995],{"class":69,"line":1010},[67,33996,33997],{"class":2058},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[67,33999,34000],{"class":69,"line":1016},[67,34001,34002],{"class":2058},"    # lr为学习率\n",[67,34004,34005,34008,34010,34013,34016,34018,34021],{"class":69,"line":1021},[67,34006,34007],{"class":73},"    optimizer",[67,34009,85],{"class":84},[67,34011,34012],{"class":73},"torch.optim.Adam(model.parameters(),",[67,34014,34015],{"class":7033},"lr",[67,34017,85],{"class":84},[67,34019,34020],{"class":77},"0.001",[67,34022,829],{"class":73},[67,34024,34025],{"class":69,"line":1034},[67,34026,631],{"emptyLinePlaceholder":630},[67,34028,34029],{"class":69,"line":1053},[67,34030,34031],{"class":2058},"    # 定义损失函数使用交叉熵损失函数\n",[67,34033,34034,34037,34039],{"class":69,"line":1070},[67,34035,34036],{"class":73},"    criterion",[67,34038,85],{"class":84},[67,34040,34041],{"class":73},"nn.CrossEntropyLoss()\n",[67,34043,34044],{"class":69,"line":1083},[67,34045,631],{"emptyLinePlaceholder":630},[67,34047,34048],{"class":69,"line":1088},[67,34049,34050],{"class":2058},"    # 将模型放到GPU中进行训练\n",[67,34052,34053,34055,34057],{"class":69,"line":1093},[67,34054,33065],{"class":73},[67,34056,85],{"class":84},[67,34058,34059],{"class":73},"model.to(device)\n",[67,34061,34062],{"class":69,"line":1110},[67,34063,34064],{"class":2058},"    # 复制当前模型的参数\n",[67,34066,34067],{"class":69,"line":11603},[67,34068,34069],{"class":2058},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[67,34071,34072],{"class":69,"line":11612},[67,34073,34074],{"class":2058},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[67,34076,34077,34080,34082],{"class":69,"line":11617},[67,34078,34079],{"class":73},"    best_model_wts",[67,34081,85],{"class":84},[67,34083,34084],{"class":73},"copy.deepcopy(model.state_dict())\n",[67,34086,34087],{"class":69,"line":11623},[67,34088,631],{"emptyLinePlaceholder":630},[67,34090,34091],{"class":69,"line":11644},[67,34092,631],{"emptyLinePlaceholder":630},[67,34094,34095],{"class":69,"line":11650},[67,34096,34097],{"class":2058},"    # 初始化参数\n",[67,34099,34100],{"class":69,"line":11664},[67,34101,34102],{"class":2058},"    # 最高准确度\n",[67,34104,34105,34108,34110],{"class":69,"line":11670},[67,34106,34107],{"class":73},"    best_acc",[67,34109,85],{"class":84},[67,34111,34112],{"class":77},"0.0\n",[67,34114,34115],{"class":69,"line":11697},[67,34116,34117],{"class":2058},"    # 训练集损失列表\n",[67,34119,34120,34123,34125],{"class":69,"line":11706},[67,34121,34122],{"class":73},"    train_loss_all",[67,34124,85],{"class":84},[67,34126,34127],{"class":73},"[]\n",[67,34129,34130],{"class":69,"line":11712},[67,34131,34132],{"class":2058},"    # 验证集函数列表\n",[67,34134,34135,34138,34140],{"class":69,"line":11720},[67,34136,34137],{"class":73},"    val_loss_all",[67,34139,85],{"class":84},[67,34141,34127],{"class":73},[67,34143,34144],{"class":69,"line":11725},[67,34145,34146],{"class":2058},"    # 训练集准确度列表\n",[67,34148,34149,34152,34154],{"class":69,"line":18401},[67,34150,34151],{"class":73},"    train_acc_all",[67,34153,85],{"class":84},[67,34155,34127],{"class":73},[67,34157,34158],{"class":69,"line":18407},[67,34159,34160],{"class":2058},"    # 验证集准确度列表\n",[67,34162,34163,34166,34168],{"class":69,"line":18430},[67,34164,34165],{"class":73},"    val_acc_all",[67,34167,85],{"class":84},[67,34169,34127],{"class":73},[67,34171,34172],{"class":69,"line":18436},[67,34173,631],{"emptyLinePlaceholder":630},[67,34175,34176],{"class":69,"line":18459},[67,34177,34178],{"class":2058},"    # 保存当前时间--->方便看每轮训练的时间\n",[67,34180,34181,34184,34186],{"class":69,"line":18473},[67,34182,34183],{"class":73},"    since",[67,34185,85],{"class":84},[67,34187,34188],{"class":73},"time.time()\n",[67,34190,34191],{"class":69,"line":18493},[67,34192,631],{"emptyLinePlaceholder":630},[67,34194,34195],{"class":69,"line":18499},[67,34196,631],{"emptyLinePlaceholder":630},[67,34198,34199],{"class":69,"line":18510},[67,34200,34201],{"class":2058},"    # 准备工作完成--->开始训练模型\n",[67,34203,34204,34206,34209,34211,34213],{"class":69,"line":18533},[67,34205,935],{"class":84},[67,34207,34208],{"class":73}," epoch ",[67,34210,941],{"class":84},[67,34212,944],{"class":77},[67,34214,34215],{"class":73},"(num_epochs):\n",[67,34217,34218,34221,34223,34226,34229,34231,34233,34235,34238,34240,34242],{"class":69,"line":18555},[67,34219,34220],{"class":77},"        print",[67,34222,854],{"class":73},[67,34224,34225],{"class":114},"\"Epoch ",[67,34227,34228],{"class":77},"{}",[67,34230,2573],{"class":114},[67,34232,34228],{"class":77},[67,34234,2243],{"class":114},[67,34236,34237],{"class":73},".format(epoch,num_epochs",[67,34239,1863],{"class":84},[67,34241,2209],{"class":77},[67,34243,1050],{"class":73},[67,34245,34246,34248,34250,34253,34255,34257],{"class":69,"line":18560},[67,34247,34220],{"class":77},[67,34249,854],{"class":73},[67,34251,34252],{"class":114},"\"-\"",[67,34254,965],{"class":84},[67,34256,2437],{"class":77},[67,34258,829],{"class":73},[67,34260,34261],{"class":69,"line":18566},[67,34262,631],{"emptyLinePlaceholder":630},[67,34264,34265],{"class":69,"line":18580},[67,34266,34267],{"class":2058},"        # 初始化参数\n",[67,34269,34270],{"class":69,"line":18593},[67,34271,34272],{"class":2058},"        # 训练集损失函数\n",[67,34274,34275,34278,34280],{"class":69,"line":18598},[67,34276,34277],{"class":73},"        train_loss",[67,34279,85],{"class":84},[67,34281,34112],{"class":77},[67,34283,34284],{"class":69,"line":18612},[67,34285,34286],{"class":2058},"        # 训练集准确度\n",[67,34288,34289,34292,34294],{"class":69,"line":18617},[67,34290,34291],{"class":73},"        train_corrects",[67,34293,85],{"class":84},[67,34295,4909],{"class":77},[67,34297,34298],{"class":69,"line":18623},[67,34299,34300],{"class":2058},"        # 验证集损失函数\n",[67,34302,34303,34306,34308],{"class":69,"line":18628},[67,34304,34305],{"class":73},"        val_loss",[67,34307,85],{"class":84},[67,34309,34112],{"class":77},[67,34311,34312],{"class":69,"line":18642},[67,34313,34314],{"class":2058},"        # 验证集准确度\n",[67,34316,34317,34320,34322],{"class":69,"line":18647},[67,34318,34319],{"class":73},"        val_corrects",[67,34321,85],{"class":84},[67,34323,4909],{"class":77},[67,34325,34326],{"class":69,"line":18652},[67,34327,34328],{"class":2058},"        # 训练集样本数量\n",[67,34330,34331,34334,34336],{"class":69,"line":18666},[67,34332,34333],{"class":73},"        train_num",[67,34335,85],{"class":84},[67,34337,4909],{"class":77},[67,34339,34340],{"class":69,"line":18678},[67,34341,34342],{"class":2058},"        # 验证集样本数量\n",[67,34344,34345,34348,34350],{"class":69,"line":18683},[67,34346,34347],{"class":73},"        val_num",[67,34349,85],{"class":84},[67,34351,4909],{"class":77},[67,34353,34354],{"class":69,"line":18696},[67,34355,34356],{"class":2058},"        # 将数据放到设备,并开始训练\n",[67,34358,34359,34361,34363,34365,34367],{"class":69,"line":18701},[67,34360,5225],{"class":84},[67,34362,33373],{"class":73},[67,34364,941],{"class":84},[67,34366,33378],{"class":77},[67,34368,34369],{"class":73},"(train_dataloader):\n",[67,34371,34372],{"class":69,"line":18706},[67,34373,34374],{"class":2058},"            # 将特征放入到训练设备\n",[67,34376,34377,34380,34382],{"class":69,"line":18711},[67,34378,34379],{"class":73},"            b_x",[67,34381,85],{"class":84},[67,34383,34384],{"class":73},"b_x.to(device)\n",[67,34386,34387],{"class":69,"line":18724},[67,34388,34389],{"class":2058},"            # 将标签放入到训练设备当中\n",[67,34391,34392,34395,34397],{"class":69,"line":18729},[67,34393,34394],{"class":73},"            b_y",[67,34396,85],{"class":84},[67,34398,34399],{"class":73},"b_y.to(device)\n",[67,34401,34403],{"class":69,"line":34402},98,[67,34404,34405],{"class":2058},"            # 设置模型为训练模式\n",[67,34407,34409],{"class":69,"line":34408},99,[67,34410,34411],{"class":73},"            model.train()\n",[67,34413,34415],{"class":69,"line":34414},100,[67,34416,34417],{"class":2058},"            # 将数据放到模型当中,开始前向传播\n",[67,34419,34421],{"class":69,"line":34420},101,[67,34422,34423],{"class":2058},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[67,34425,34427,34430,34432],{"class":69,"line":34426},102,[67,34428,34429],{"class":73},"            output",[67,34431,85],{"class":84},[67,34433,34434],{"class":73},"model(b_x)\n",[67,34436,34438],{"class":69,"line":34437},103,[67,34439,34440],{"class":2058},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[67,34442,34444,34447,34449,34452,34455,34457,34459],{"class":69,"line":34443},104,[67,34445,34446],{"class":73},"            pre_lab",[67,34448,85],{"class":84},[67,34450,34451],{"class":73},"torch.argmax(output,",[67,34453,34454],{"class":7033},"dim",[67,34456,85],{"class":84},[67,34458,2209],{"class":77},[67,34460,829],{"class":73},[67,34462,34464],{"class":69,"line":34463},105,[67,34465,34466],{"class":2058},"            # 计算每一个batch的损失函数\n",[67,34468,34470,34473,34475],{"class":69,"line":34469},106,[67,34471,34472],{"class":73},"            loss",[67,34474,85],{"class":84},[67,34476,34477],{"class":73},"criterion(output,b_y)\n",[67,34479,34481],{"class":69,"line":34480},107,[67,34482,34483],{"class":2058},"            # 将梯度初始化为0\n",[67,34485,34487],{"class":69,"line":34486},108,[67,34488,34489],{"class":73},"            optimizer.zero_grad()\n",[67,34491,34493],{"class":69,"line":34492},109,[67,34494,34495],{"class":2058},"            # 梯度置为0后再进行反向传播\n",[67,34497,34499],{"class":69,"line":34498},110,[67,34500,34501],{"class":73},"            loss.backward()\n",[67,34503,34505],{"class":69,"line":34504},111,[67,34506,34507],{"class":2058},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[67,34509,34511],{"class":69,"line":34510},112,[67,34512,34513],{"class":73},"            optimizer.step()\n",[67,34515,34517],{"class":69,"line":34516},113,[67,34518,34519],{"class":2058},"            # loss.item()指的是batch的平均损失\n",[67,34521,34523,34526,34528,34531,34533,34536,34538],{"class":69,"line":34522},114,[67,34524,34525],{"class":73},"            train_loss",[67,34527,11283],{"class":84},[67,34529,34530],{"class":73},"loss.item()",[67,34532,965],{"class":84},[67,34534,34535],{"class":73},"b_x.size(",[67,34537,78],{"class":77},[67,34539,829],{"class":73},[67,34541,34543],{"class":69,"line":34542},115,[67,34544,34545],{"class":2058},"            # 计算每个批次中正确预测的数量\n",[67,34547,34549,34552,34554,34557,34559],{"class":69,"line":34548},116,[67,34550,34551],{"class":73},"            train_corrects",[67,34553,11283],{"class":84},[67,34555,34556],{"class":73},"torch.sum(pre_lab",[67,34558,4774],{"class":84},[67,34560,34561],{"class":73},"b_y.data)\n",[67,34563,34565],{"class":69,"line":34564},117,[67,34566,34567],{"class":2058},"            # 计算目前为止一共处理了多少样本\n",[67,34569,34571,34574,34576,34578,34580],{"class":69,"line":34570},118,[67,34572,34573],{"class":73},"            train_num",[67,34575,11283],{"class":84},[67,34577,34535],{"class":73},[67,34579,78],{"class":77},[67,34581,829],{"class":73},[67,34583,34585],{"class":69,"line":34584},119,[67,34586,34587],{"class":2058},"        # 验证数据\n",[67,34589,34591,34593,34596,34598,34600],{"class":69,"line":34590},120,[67,34592,5225],{"class":84},[67,34594,34595],{"class":73}," step ,(b_x,b_y) ",[67,34597,941],{"class":84},[67,34599,33378],{"class":77},[67,34601,34602],{"class":73},"(val_dataloader):\n",[67,34604,34606],{"class":69,"line":34605},121,[67,34607,34608],{"class":2058},"            # 将特征放到验证设备当中\n",[67,34610,34612,34614,34616],{"class":69,"line":34611},122,[67,34613,34379],{"class":73},[67,34615,85],{"class":84},[67,34617,34384],{"class":73},[67,34619,34621],{"class":69,"line":34620},123,[67,34622,34623],{"class":2058},"            # 将标签放到放到训练设备当中\n",[67,34625,34627,34629,34631],{"class":69,"line":34626},124,[67,34628,34394],{"class":73},[67,34630,85],{"class":84},[67,34632,34399],{"class":73},[67,34634,34636],{"class":69,"line":34635},125,[67,34637,34638],{"class":2058},"            # 开启验证模式，设置模型为评估模式\n",[67,34640,34642],{"class":69,"line":34641},126,[67,34643,34644],{"class":73},"            model.eval()\n",[67,34646,34648,34651],{"class":69,"line":34647},127,[67,34649,34650],{"class":84},"            with",[67,34652,34653],{"class":73}," torch.no_grad():\n",[67,34655,34657],{"class":69,"line":34656},128,[67,34658,34659],{"class":2058},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[67,34661,34663,34666,34668],{"class":69,"line":34662},129,[67,34664,34665],{"class":73},"                output ",[67,34667,85],{"class":84},[67,34669,34670],{"class":73}," model(b_x)\n",[67,34672,34674],{"class":69,"line":34673},130,[67,34675,34676],{"class":2058},"                # 查找每一行中最大值对应的下标\n",[67,34678,34680,34683,34685,34688,34690,34692,34694],{"class":69,"line":34679},131,[67,34681,34682],{"class":73},"                pre_lab ",[67,34684,85],{"class":84},[67,34686,34687],{"class":73}," torch.argmax(output, ",[67,34689,34454],{"class":7033},[67,34691,85],{"class":84},[67,34693,2209],{"class":77},[67,34695,829],{"class":73},[67,34697,34699],{"class":69,"line":34698},132,[67,34700,34701],{"class":2058},"                # 计算验证集上的当前 batch 损失\n",[67,34703,34705,34708,34710],{"class":69,"line":34704},133,[67,34706,34707],{"class":73},"                val_batch_loss ",[67,34709,85],{"class":84},[67,34711,34712],{"class":73}," criterion(output, b_y)\n",[67,34714,34716],{"class":69,"line":34715},134,[67,34717,34718],{"class":2058},"                # 对损失函数进行累加（按样本数加权）\n",[67,34720,34722,34725,34727,34730,34732,34735,34737],{"class":69,"line":34721},135,[67,34723,34724],{"class":73},"                val_loss ",[67,34726,11283],{"class":84},[67,34728,34729],{"class":73}," val_batch_loss.item() ",[67,34731,965],{"class":84},[67,34733,34734],{"class":73}," b_x.size(",[67,34736,78],{"class":77},[67,34738,829],{"class":73},[67,34740,34742,34745,34747,34750,34752],{"class":69,"line":34741},136,[67,34743,34744],{"class":73},"                val_corrects ",[67,34746,11283],{"class":84},[67,34748,34749],{"class":73}," torch.sum(pre_lab ",[67,34751,4774],{"class":84},[67,34753,34754],{"class":73}," b_y.data)\n",[67,34756,34758],{"class":69,"line":34757},137,[67,34759,34760],{"class":2058},"                # 当前用于验证的样本数量\n",[67,34762,34764,34767,34769,34771,34773],{"class":69,"line":34763},138,[67,34765,34766],{"class":73},"            val_num ",[67,34768,11283],{"class":84},[67,34770,34734],{"class":73},[67,34772,78],{"class":77},[67,34774,829],{"class":73},[67,34776,34778],{"class":69,"line":34777},139,[67,34779,34780],{"class":2058},"        # 计算并保存每一次迭代的loss值和准确率\n",[67,34782,34784],{"class":69,"line":34783},140,[67,34785,34786],{"class":2058},"        # 计算并保存训练集的loss值\n",[67,34788,34790,34793,34795],{"class":69,"line":34789},141,[67,34791,34792],{"class":73},"        train_loss_all.append(train_loss",[67,34794,2573],{"class":84},[67,34796,34797],{"class":73},"train_num)\n",[67,34799,34801],{"class":69,"line":34800},142,[67,34802,34803],{"class":2058},"        # 取双精度\n",[67,34805,34807],{"class":69,"line":34806},143,[67,34808,34809],{"class":2058},"        # 计算并保存训练集的准确率\n",[67,34811,34813,34816,34818],{"class":69,"line":34812},144,[67,34814,34815],{"class":73},"        train_acc_all.append(train_corrects.double().item()",[67,34817,2573],{"class":84},[67,34819,34797],{"class":73},[67,34821,34823],{"class":69,"line":34822},145,[67,34824,34825],{"class":2058},"        # 计算并保存验证集的loss值\n",[67,34827,34829,34832,34834],{"class":69,"line":34828},146,[67,34830,34831],{"class":73},"        val_loss_all.append(val_loss",[67,34833,2573],{"class":84},[67,34835,34836],{"class":73},"val_num)\n",[67,34838,34840],{"class":69,"line":34839},147,[67,34841,34842],{"class":2058},"        # 计算并保存验证集的准确率\n",[67,34844,34846,34849,34851],{"class":69,"line":34845},148,[67,34847,34848],{"class":73},"        val_acc_all.append(val_corrects.double().item()",[67,34850,2573],{"class":84},[67,34852,34836],{"class":73},[67,34854,34856],{"class":69,"line":34855},149,[67,34857,631],{"emptyLinePlaceholder":630},[67,34859,34861],{"class":69,"line":34860},150,[67,34862,34863],{"class":2058},"        # 打印训练一轮的loss值和准确率\n",[67,34865,34867,34869,34871,34873,34875,34878,34880,34883,34885,34888,34890,34892,34894,34896,34899,34901,34903,34906,34908,34910],{"class":69,"line":34866},151,[67,34868,34220],{"class":77},[67,34870,854],{"class":73},[67,34872,5414],{"class":114},[67,34874,34228],{"class":77},[67,34876,34877],{"class":114},"train loss:",[67,34879,2885],{"class":77},[67,34881,34882],{"class":84},":.4f",[67,34884,2934],{"class":77},[67,34886,34887],{"class":114}," train acc:",[67,34889,2885],{"class":77},[67,34891,34882],{"class":84},[67,34893,2934],{"class":77},[67,34895,5414],{"class":114},[67,34897,34898],{"class":73},".format(epoch,train_loss_all[",[67,34900,1863],{"class":84},[67,34902,2209],{"class":77},[67,34904,34905],{"class":73},"],train_acc_all[",[67,34907,1863],{"class":84},[67,34909,2209],{"class":77},[67,34911,34912],{"class":73},"]))\n",[67,34914,34916,34918,34920,34922,34924,34927,34929,34931,34933,34936,34938,34940,34942,34944,34947,34949,34951,34954,34956,34958],{"class":69,"line":34915},152,[67,34917,34220],{"class":77},[67,34919,854],{"class":73},[67,34921,5414],{"class":114},[67,34923,34228],{"class":77},[67,34925,34926],{"class":114},"val loss:",[67,34928,2885],{"class":77},[67,34930,34882],{"class":84},[67,34932,2934],{"class":77},[67,34934,34935],{"class":114}," val acc:",[67,34937,2885],{"class":77},[67,34939,34882],{"class":84},[67,34941,2934],{"class":77},[67,34943,5414],{"class":114},[67,34945,34946],{"class":73},".format(epoch,val_loss_all[",[67,34948,1863],{"class":84},[67,34950,2209],{"class":77},[67,34952,34953],{"class":73},"],val_acc_all[",[67,34955,1863],{"class":84},[67,34957,2209],{"class":77},[67,34959,34912],{"class":73},[67,34961,34963],{"class":69,"line":34962},153,[67,34964,631],{"emptyLinePlaceholder":630},[67,34966,34968],{"class":69,"line":34967},154,[67,34969,34970],{"class":2058},"        # 判断准确度--->保存最优模型\n",[67,34972,34974,34976,34979,34981,34983,34985,34987],{"class":69,"line":34973},155,[67,34975,4329],{"class":84},[67,34977,34978],{"class":73}," val_acc_all[",[67,34980,1863],{"class":84},[67,34982,2209],{"class":77},[67,34984,2928],{"class":73},[67,34986,2948],{"class":84},[67,34988,34989],{"class":73},"best_acc:\n",[67,34991,34993],{"class":69,"line":34992},156,[67,34994,34995],{"class":2058},"            # 保存当前模型准确度\n",[67,34997,34999,35002,35004,35006,35009,35011,35013],{"class":69,"line":34998},157,[67,35000,35001],{"class":73},"            best_acc:",[67,35003,2041],{"class":77},[67,35005,85],{"class":84},[67,35007,35008],{"class":73},"val_acc_all[",[67,35010,1863],{"class":84},[67,35012,2209],{"class":77},[67,35014,35015],{"class":73},"]\n",[67,35017,35019],{"class":69,"line":35018},158,[67,35020,35021],{"class":2058},"            # 保存当前的准确度\n",[67,35023,35025],{"class":69,"line":35024},159,[67,35026,35027],{"class":2058},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[67,35029,35031,35034,35036],{"class":69,"line":35030},160,[67,35032,35033],{"class":73},"            best_model_wts",[67,35035,85],{"class":84},[67,35037,34084],{"class":73},[67,35039,35041],{"class":69,"line":35040},161,[67,35042,631],{"emptyLinePlaceholder":630},[67,35044,35046],{"class":69,"line":35045},162,[67,35047,35048],{"class":2058},"        # 计算耗时\n",[67,35050,35052,35055,35057,35060,35062],{"class":69,"line":35051},163,[67,35053,35054],{"class":73},"        time_use",[67,35056,85],{"class":84},[67,35058,35059],{"class":73},"time.time()",[67,35061,1863],{"class":84},[67,35063,35064],{"class":73},"since\n",[67,35066,35068,35070,35072,35075,35077,35080,35082,35084,35086,35088,35090,35093,35096,35099,35101,35104,35106,35108],{"class":69,"line":35067},164,[67,35069,34220],{"class":77},[67,35071,854],{"class":73},[67,35073,35074],{"class":114},"'训练和验证耗费的时间",[67,35076,2885],{"class":77},[67,35078,35079],{"class":84},":.0f",[67,35081,2934],{"class":77},[67,35083,2533],{"class":114},[67,35085,2885],{"class":77},[67,35087,35079],{"class":84},[67,35089,2934],{"class":77},[67,35091,35092],{"class":114},"s'",[67,35094,35095],{"class":73},".format(time_use",[67,35097,35098],{"class":84},"\u002F\u002F",[67,35100,2896],{"class":77},[67,35102,35103],{"class":73},",time_use",[67,35105,2319],{"class":84},[67,35107,2896],{"class":77},[67,35109,1050],{"class":73},[67,35111,35113],{"class":69,"line":35112},165,[67,35114,35115],{"class":2058},"    # 选择最优参数\n",[67,35117,35119],{"class":69,"line":35118},166,[67,35120,35121],{"class":2058},"    # 加载最高准确率下的模型参数\n",[67,35123,35125],{"class":69,"line":35124},167,[67,35126,35127],{"class":2058},"    # model.load_state_dict(best_model_wts)\n",[67,35129,35131,35134,35137],{"class":69,"line":35130},168,[67,35132,35133],{"class":73},"    torch.save(model.state_dict(best_model_wts), ",[67,35135,35136],{"class":114},"'.\u002Fbest_model.pth'",[67,35138,829],{"class":73},[67,35140,35142],{"class":69,"line":35141},169,[67,35143,35144],{"class":2058},"    # 或者写成\n",[67,35146,35148],{"class":69,"line":35147},170,[67,35149,35150],{"class":2058},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[67,35152,35154],{"class":69,"line":35153},171,[67,35155,35156],{"class":2058},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[67,35158,35160,35163,35165,35168,35171,35173],{"class":69,"line":35159},172,[67,35161,35162],{"class":73},"    train_process",[67,35164,85],{"class":84},[67,35166,35167],{"class":73},"pd.DataFrame(",[67,35169,35170],{"class":7033},"data",[67,35172,85],{"class":84},[67,35174,3400],{"class":73},[67,35176,35178,35181,35183,35186],{"class":69,"line":35177},173,[67,35179,35180],{"class":114},"        \"epoch\"",[67,35182,2848],{"class":73},[67,35184,35185],{"class":77},"range",[67,35187,35188],{"class":73},"(num_epochs),\n",[67,35190,35192,35195],{"class":69,"line":35191},174,[67,35193,35194],{"class":114},"        \"train_loss_all\"",[67,35196,35197],{"class":73},":train_loss_all,\n",[67,35199,35201,35204],{"class":69,"line":35200},175,[67,35202,35203],{"class":114},"        \"val_loss_all\"",[67,35205,35206],{"class":73},":val_loss_all,\n",[67,35208,35210,35213],{"class":69,"line":35209},176,[67,35211,35212],{"class":114},"        \"train_acc_all\"",[67,35214,35215],{"class":73},":train_acc_all,\n",[67,35217,35219,35222],{"class":69,"line":35218},177,[67,35220,35221],{"class":114},"        \"val_acc_all\"",[67,35223,35224],{"class":73},":val_acc_all\n",[67,35226,35228],{"class":69,"line":35227},178,[67,35229,35230],{"class":73},"    })\n",[67,35232,35234],{"class":69,"line":35233},179,[67,35235,35236],{"class":2058},"    # 返回训练保存的过程\n",[67,35238,35240,35242],{"class":69,"line":35239},180,[67,35241,5910],{"class":84},[67,35243,35244],{"class":73}," train_process\n",[67,35246,35248],{"class":69,"line":35247},181,[67,35249,631],{"emptyLinePlaceholder":630},[67,35251,35253],{"class":69,"line":35252},182,[67,35254,35255],{"class":2058},"# 将loss值和精度按照图片的形式展示出来\n",[67,35257,35259,35261,35264],{"class":69,"line":35258},183,[67,35260,801],{"class":84},[67,35262,35263],{"class":110}," matplot_acc_loss",[67,35265,35266],{"class":73},"(train_process):\n",[67,35268,35270],{"class":69,"line":35269},184,[67,35271,35272],{"class":2058},"    # 设置图的大小\n",[67,35274,35276,35279,35281,35283,35285,35287,35289,35291],{"class":69,"line":35275},185,[67,35277,35278],{"class":73},"    plt.figure(",[67,35280,33464],{"class":7033},[67,35282,85],{"class":84},[67,35284,854],{"class":73},[67,35286,2488],{"class":77},[67,35288,2369],{"class":73},[67,35290,1047],{"class":77},[67,35292,1050],{"class":73},[67,35294,35296],{"class":69,"line":35295},186,[67,35297,35298],{"class":2058},"    # 设置图中有几张图\n",[67,35300,35302],{"class":69,"line":35301},187,[67,35303,35304],{"class":2058},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[67,35306,35308],{"class":69,"line":35307},188,[67,35309,35310],{"class":2058},"    # ①loss图\n",[67,35312,35314,35316,35318,35320,35322,35324,35326],{"class":69,"line":35313},189,[67,35315,33498],{"class":73},[67,35317,2209],{"class":77},[67,35319,2369],{"class":73},[67,35321,2077],{"class":77},[67,35323,2369],{"class":73},[67,35325,2209],{"class":77},[67,35327,829],{"class":73},[67,35329,35331],{"class":69,"line":35330},190,[67,35332,35333],{"class":2058},"    # 补充:\n",[67,35335,35337],{"class":69,"line":35336},191,[67,35338,35339],{"class":2058},"    # plt.subplot(nrows, ncols, index)\n",[67,35341,35343],{"class":69,"line":35342},192,[67,35344,35345],{"class":2058},"    # nrows：行数\n",[67,35347,35349],{"class":69,"line":35348},193,[67,35350,35351],{"class":2058},"    # ncols：列数\n",[67,35353,35355],{"class":69,"line":35354},194,[67,35356,35357],{"class":2058},"    # index：目前选中第几个子图（从1开始）\n",[67,35359,35361,35364,35367,35370,35373,35375,35378,35380,35383],{"class":69,"line":35360},195,[67,35362,35363],{"class":73},"    plt.plot(train_process[",[67,35365,35366],{"class":114},"\"epoch\"",[67,35368,35369],{"class":73},"],train_process.train_loss_all,",[67,35371,35372],{"class":114},"'ro-'",[67,35374,2369],{"class":73},[67,35376,35377],{"class":7033},"label",[67,35379,85],{"class":84},[67,35381,35382],{"class":114},"'train loss'",[67,35384,829],{"class":73},[67,35386,35388,35390,35392,35395,35398,35400,35402,35404,35407],{"class":69,"line":35387},196,[67,35389,35363],{"class":73},[67,35391,35366],{"class":114},[67,35393,35394],{"class":73},"],train_process.val_loss_all,",[67,35396,35397],{"class":114},"'bs--'",[67,35399,2369],{"class":73},[67,35401,35377],{"class":7033},[67,35403,85],{"class":84},[67,35405,35406],{"class":114},"'val loss'",[67,35408,829],{"class":73},[67,35410,35412],{"class":69,"line":35411},197,[67,35413,35414],{"class":2058},"    # 添加一个图例\n",[67,35416,35418],{"class":69,"line":35417},198,[67,35419,35420],{"class":73},"    plt.legend()\n",[67,35422,35424],{"class":69,"line":35423},199,[67,35425,35426],{"class":2058},"    # 给轴添加标签\n",[67,35428,35430,35433,35436],{"class":69,"line":35429},200,[67,35431,35432],{"class":73},"    plt.xlabel(",[67,35434,35435],{"class":114},"'epoch'",[67,35437,829],{"class":73},[67,35439,35441,35444,35447],{"class":69,"line":35440},201,[67,35442,35443],{"class":73},"    plt.ylabel(",[67,35445,35446],{"class":114},"'loss'",[67,35448,829],{"class":73},[67,35450,35452],{"class":69,"line":35451},202,[67,35453,35454],{"class":2058},"    # ②准确度图\n",[67,35456,35458,35460,35462,35464,35466,35468,35470],{"class":69,"line":35457},203,[67,35459,33498],{"class":73},[67,35461,2209],{"class":77},[67,35463,2369],{"class":73},[67,35465,2077],{"class":77},[67,35467,2369],{"class":73},[67,35469,2077],{"class":77},[67,35471,829],{"class":73},[67,35473,35475,35477,35479,35482,35484,35486,35488,35490,35493],{"class":69,"line":35474},204,[67,35476,35363],{"class":73},[67,35478,35366],{"class":114},[67,35480,35481],{"class":73},"],train_process.train_acc_all,",[67,35483,35372],{"class":114},[67,35485,2369],{"class":73},[67,35487,35377],{"class":7033},[67,35489,85],{"class":84},[67,35491,35492],{"class":114},"'train acc'",[67,35494,829],{"class":73},[67,35496,35498,35500,35502,35505,35507,35509,35511,35513,35516],{"class":69,"line":35497},205,[67,35499,35363],{"class":73},[67,35501,35366],{"class":114},[67,35503,35504],{"class":73},"],train_process.val_acc_all,",[67,35506,35397],{"class":114},[67,35508,2369],{"class":73},[67,35510,35377],{"class":7033},[67,35512,85],{"class":84},[67,35514,35515],{"class":114},"'val acc'",[67,35517,829],{"class":73},[67,35519,35521],{"class":69,"line":35520},206,[67,35522,35523],{"class":2058},"    # 添加图例\n",[67,35525,35527],{"class":69,"line":35526},207,[67,35528,35420],{"class":73},[67,35530,35532,35534,35536],{"class":69,"line":35531},208,[67,35533,35432],{"class":73},[67,35535,35366],{"class":114},[67,35537,829],{"class":73},[67,35539,35541,35543,35546],{"class":69,"line":35540},209,[67,35542,35443],{"class":73},[67,35544,35545],{"class":114},"\"acc\"",[67,35547,829],{"class":73},[67,35549,35551],{"class":69,"line":35550},210,[67,35552,35553],{"class":73},"    plt.show()\n",[67,35555,35557],{"class":69,"line":35556},211,[67,35558,631],{"emptyLinePlaceholder":630},[67,35560,35562],{"class":69,"line":35561},212,[67,35563,35564],{"class":2058},"# 正式开始训练:\n",[67,35566,35568,35570,35572,35574,35576],{"class":69,"line":35567},213,[67,35569,1096],{"class":84},[67,35571,1099],{"class":77},[67,35573,4774],{"class":84},[67,35575,33001],{"class":114},[67,35577,813],{"class":73},[67,35579,35581],{"class":69,"line":35580},214,[67,35582,35583],{"class":2058},"    # 将模型实例化\n",[67,35585,35587,35590,35592],{"class":69,"line":35586},215,[67,35588,35589],{"class":73},"    LeNet",[67,35591,85],{"class":84},[67,35593,35594],{"class":73},"LeNet()\n",[67,35596,35598,35601,35603],{"class":69,"line":35597},216,[67,35599,35600],{"class":73},"    train_dataloader,val_dataloader",[67,35602,85],{"class":84},[67,35604,35605],{"class":73},"train_val_data_process()\n",[67,35607,35609,35611,35613,35616,35619,35621,35623],{"class":69,"line":35608},217,[67,35610,35162],{"class":73},[67,35612,85],{"class":84},[67,35614,35615],{"class":73},"train_model_process(LeNet,train_dataloader,val_dataloader,",[67,35617,35618],{"class":7033},"num_epochs",[67,35620,85],{"class":84},[67,35622,2689],{"class":77},[67,35624,829],{"class":73},[67,35626,35628],{"class":69,"line":35627},218,[67,35629,35630],{"class":73},"    matplot_acc_loss(train_process)\n",[19,35632,35633],{},"画图的补充点学习：",[19,35635,35636],{},[3317,35637],{"alt":63,"src":35638},"\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,35640,35641],{"start":202},[29,35642,35643],{},"测试",[58,35645,35647],{"className":60,"code":35646,"language":62,"meta":63,"style":63},"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",[32,35648,35649,35655,35665,35677,35687,35692,35702,35712,35716,35721,35730,35747,35759,35776,35787,35803,35808,35819,35830,35841,35848,35852,35857,35867,35872,35889,35897,35901,35906,35915,35924,35928,35933,35938,35943,35950,35955,35967,35977,35987,35992,35996,36001,36010,36015,36031,36036,36041,36046,36060,36065,36079,36083,36088,36103,36108,36120,36124,36129,36141,36146,36154,36159,36164,36174,36179,36188,36193,36198,36202,36207,36212,36228,36236,36241,36246,36305,36311,36316,36327,36335,36343,36347,36352,36356,36361,36369,36374,36390,36395,36405,36415],{"__ignoreMap":63},[67,35650,35651,35653],{"class":69,"line":70},[67,35652,622],{"class":84},[67,35654,32175],{"class":73},[67,35656,35657,35659,35661,35663],{"class":69,"line":191},[67,35658,622],{"class":84},[67,35660,33187],{"class":73},[67,35662,649],{"class":84},[67,35664,33192],{"class":73},[67,35666,35667,35669,35672,35674],{"class":69,"line":202},[67,35668,32515],{"class":84},[67,35670,35671],{"class":73}," jupyter_client.consoleapp ",[67,35673,622],{"class":84},[67,35675,35676],{"class":73}," classes\n",[67,35678,35679,35681,35683,35685],{"class":69,"line":641},[67,35680,32515],{"class":84},[67,35682,33170],{"class":73},[67,35684,622],{"class":84},[67,35686,33175],{"class":73},[67,35688,35689],{"class":69,"line":655},[67,35690,35691],{"class":2058},"# 导入数据集\n",[67,35693,35694,35696,35698,35700],{"class":69,"line":660},[67,35695,32515],{"class":84},[67,35697,33143],{"class":73},[67,35699,622],{"class":84},[67,35701,33148],{"class":73},[67,35703,35704,35706,35708,35710],{"class":69,"line":665},[67,35705,32515],{"class":84},[67,35707,33685],{"class":73},[67,35709,622],{"class":84},[67,35711,33690],{"class":73},[67,35713,35714],{"class":69,"line":677},[67,35715,631],{"emptyLinePlaceholder":630},[67,35717,35718],{"class":69,"line":683},[67,35719,35720],{"class":2058},"# 测试数据处理\n",[67,35722,35723,35725,35728],{"class":69,"line":689},[67,35724,801],{"class":84},[67,35726,35727],{"class":110}," test_data_process",[67,35729,33723],{"class":73},[67,35731,35732,35735,35737,35739,35741,35743,35745],{"class":69,"line":694},[67,35733,35734],{"class":73},"    test_data",[67,35736,85],{"class":84},[67,35738,33227],{"class":73},[67,35740,33230],{"class":7033},[67,35742,85],{"class":84},[67,35744,33235],{"class":114},[67,35746,33238],{"class":73},[67,35748,35749,35752,35754,35757],{"class":69,"line":700},[67,35750,35751],{"class":7033},"                           train",[67,35753,85],{"class":84},[67,35755,35756],{"class":77},"False",[67,35758,33238],{"class":73},[67,35760,35761,35764,35766,35768,35770,35772,35774],{"class":69,"line":706},[67,35762,35763],{"class":7033},"                           transform",[67,35765,85],{"class":84},[67,35767,33265],{"class":73},[67,35769,33268],{"class":7033},[67,35771,85],{"class":84},[67,35773,2890],{"class":77},[67,35775,33276],{"class":73},[67,35777,35778,35781,35783,35785],{"class":69,"line":712},[67,35779,35780],{"class":7033},"                           download",[67,35782,85],{"class":84},[67,35784,33248],{"class":77},[67,35786,829],{"class":73},[67,35788,35789,35792,35794,35796,35798,35800],{"class":69,"line":717},[67,35790,35791],{"class":73},"    test_dataloader",[67,35793,85],{"class":84},[67,35795,33306],{"class":73},[67,35797,33309],{"class":7033},[67,35799,85],{"class":84},[67,35801,35802],{"class":73},"test_data,\n",[67,35804,35805],{"class":69,"line":723},[67,35806,35807],{"class":2058},"                                    # 这里是一张一张进行测试\n",[67,35809,35810,35813,35815,35817],{"class":69,"line":729},[67,35811,35812],{"class":7033},"                                    batch_size",[67,35814,85],{"class":84},[67,35816,2209],{"class":77},[67,35818,33238],{"class":73},[67,35820,35821,35824,35826,35828],{"class":69,"line":735},[67,35822,35823],{"class":7033},"                                    shuffle",[67,35825,85],{"class":84},[67,35827,33248],{"class":77},[67,35829,33238],{"class":73},[67,35831,35832,35835,35837,35839],{"class":69,"line":741},[67,35833,35834],{"class":7033},"                                    num_workers",[67,35836,85],{"class":84},[67,35838,78],{"class":77},[67,35840,829],{"class":73},[67,35842,35843,35845],{"class":69,"line":747},[67,35844,5910],{"class":84},[67,35846,35847],{"class":73}," test_dataloader\n",[67,35849,35850],{"class":69,"line":753},[67,35851,631],{"emptyLinePlaceholder":630},[67,35853,35854],{"class":69,"line":758},[67,35855,35856],{"class":2058},"# 定义模型测试函数\n",[67,35858,35859,35861,35864],{"class":69,"line":764},[67,35860,801],{"class":84},[67,35862,35863],{"class":110}," test_model_process",[67,35865,35866],{"class":73},"(model,test_dataloader):\n",[67,35868,35869],{"class":69,"line":770},[67,35870,35871],{"class":2058},"    # 将模型放到设备当中，先进行判断\n",[67,35873,35874,35876,35878,35880,35882,35884,35886],{"class":69,"line":776},[67,35875,33013],{"class":73},[67,35877,85],{"class":84},[67,35879,33020],{"class":114},[67,35881,3547],{"class":84},[67,35883,33025],{"class":73},[67,35885,3544],{"class":84},[67,35887,35888],{"class":114}," \"cpu\"\n",[67,35890,35891,35893,35895],{"class":69,"line":782},[67,35892,33065],{"class":73},[67,35894,85],{"class":84},[67,35896,34059],{"class":73},[67,35898,35899],{"class":69,"line":788},[67,35900,631],{"emptyLinePlaceholder":630},[67,35902,35903],{"class":69,"line":793},[67,35904,35905],{"class":2058},"    # 设置初始化参数\n",[67,35907,35908,35911,35913],{"class":69,"line":798},[67,35909,35910],{"class":73},"    test_corrects",[67,35912,85],{"class":84},[67,35914,34112],{"class":77},[67,35916,35917,35920,35922],{"class":69,"line":816},[67,35918,35919],{"class":73},"    test_num",[67,35921,85],{"class":84},[67,35923,4909],{"class":77},[67,35925,35926],{"class":69,"line":832},[67,35927,631],{"emptyLinePlaceholder":630},[67,35929,35930],{"class":69,"line":843},[67,35931,35932],{"class":2058},"    # 进行模型测试\n",[67,35934,35935],{"class":69,"line":848},[67,35936,35937],{"class":2058},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[67,35939,35940],{"class":69,"line":863},[67,35941,35942],{"class":2058},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[67,35944,35945,35948],{"class":69,"line":876},[67,35946,35947],{"class":84},"    with",[67,35949,34653],{"class":73},[67,35951,35952],{"class":69,"line":889},[67,35953,35954],{"class":2058},"        # 从数据中进行\n",[67,35956,35957,35959,35962,35964],{"class":69,"line":894},[67,35958,5225],{"class":84},[67,35960,35961],{"class":73}," test_data_x,test_data_y ",[67,35963,941],{"class":84},[67,35965,35966],{"class":73}," test_dataloader:\n",[67,35968,35969,35972,35974],{"class":69,"line":911},[67,35970,35971],{"class":73},"            test_data_x",[67,35973,85],{"class":84},[67,35975,35976],{"class":73},"test_data_x.to(device)\n",[67,35978,35979,35982,35984],{"class":69,"line":927},[67,35980,35981],{"class":73},"            test_data_y",[67,35983,85],{"class":84},[67,35985,35986],{"class":73},"test_data_y.to(device)\n",[67,35988,35989],{"class":69,"line":932},[67,35990,35991],{"class":2058},"            # 设置为验证模式\n",[67,35993,35994],{"class":69,"line":955},[67,35995,34644],{"class":73},[67,35997,35998],{"class":69,"line":971},[67,35999,36000],{"class":2058},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[67,36002,36003,36005,36007],{"class":69,"line":1010},[67,36004,34429],{"class":73},[67,36006,85],{"class":84},[67,36008,36009],{"class":73},"model(test_data_x)\n",[67,36011,36012],{"class":69,"line":1016},[67,36013,36014],{"class":2058},"            # 查找每一行中最大值对应的下标\n",[67,36016,36017,36019,36021,36023,36025,36027,36029],{"class":69,"line":1021},[67,36018,34446],{"class":73},[67,36020,85],{"class":84},[67,36022,34451],{"class":73},[67,36024,34454],{"class":7033},[67,36026,85],{"class":84},[67,36028,2209],{"class":77},[67,36030,829],{"class":73},[67,36032,36033],{"class":69,"line":1034},[67,36034,36035],{"class":2058},"            # 计算正确率\n",[67,36037,36038],{"class":69,"line":1053},[67,36039,36040],{"class":2058},"            # .data表示是一个不带梯度信息的tensor\n",[67,36042,36043],{"class":69,"line":1070},[67,36044,36045],{"class":2058},"            # 如果预测正确，则准确度test_corrects加1\n",[67,36047,36048,36051,36053,36055,36057],{"class":69,"line":1083},[67,36049,36050],{"class":73},"            test_corrects",[67,36052,11283],{"class":84},[67,36054,34556],{"class":73},[67,36056,4774],{"class":84},[67,36058,36059],{"class":73},"test_data_y.data)\n",[67,36061,36062],{"class":69,"line":1088},[67,36063,36064],{"class":2058},"            # 将所有的测试样本进行累计\n",[67,36066,36067,36070,36072,36075,36077],{"class":69,"line":1093},[67,36068,36069],{"class":73},"            test_num",[67,36071,11283],{"class":84},[67,36073,36074],{"class":73},"test_data_x.size(",[67,36076,78],{"class":77},[67,36078,829],{"class":73},[67,36080,36081],{"class":69,"line":1110},[67,36082,631],{"emptyLinePlaceholder":630},[67,36084,36085],{"class":69,"line":11603},[67,36086,36087],{"class":2058},"        # 计算准确度\n",[67,36089,36090,36093,36095,36098,36100],{"class":69,"line":11612},[67,36091,36092],{"class":73},"        test_acc",[67,36094,85],{"class":84},[67,36096,36097],{"class":73},"test_corrects.double().item()",[67,36099,2573],{"class":84},[67,36101,36102],{"class":73},"test_num\n",[67,36104,36105],{"class":69,"line":11617},[67,36106,36107],{"class":2058},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[67,36109,36110,36112,36114,36117],{"class":69,"line":11623},[67,36111,34220],{"class":77},[67,36113,854],{"class":73},[67,36115,36116],{"class":114},"\"测试的准确率：\"",[67,36118,36119],{"class":73},",test_acc)\n",[67,36121,36122],{"class":69,"line":11644},[67,36123,631],{"emptyLinePlaceholder":630},[67,36125,36126],{"class":69,"line":11650},[67,36127,36128],{"class":2058},"# 实现模型的测试功能\n",[67,36130,36131,36133,36135,36137,36139],{"class":69,"line":11664},[67,36132,1096],{"class":84},[67,36134,1099],{"class":77},[67,36136,4774],{"class":84},[67,36138,33001],{"class":114},[67,36140,813],{"class":73},[67,36142,36143],{"class":69,"line":11670},[67,36144,36145],{"class":2058},"    # 加载模型\n",[67,36147,36148,36150,36152],{"class":69,"line":11697},[67,36149,33065],{"class":73},[67,36151,85],{"class":84},[67,36153,35594],{"class":73},[67,36155,36156],{"class":69,"line":11706},[67,36157,36158],{"class":2058},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[67,36160,36161],{"class":69,"line":11712},[67,36162,36163],{"class":2058},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[67,36165,36166,36169,36172],{"class":69,"line":11720},[67,36167,36168],{"class":73},"    model.load_state_dict(torch.load(",[67,36170,36171],{"class":114},"'best_model.pth'",[67,36173,1050],{"class":73},[67,36175,36176],{"class":69,"line":11725},[67,36177,36178],{"class":2058},"    # 数据加载\n",[67,36180,36181,36183,36185],{"class":69,"line":18401},[67,36182,35791],{"class":73},[67,36184,85],{"class":84},[67,36186,36187],{"class":73},"test_data_process()\n",[67,36189,36190],{"class":69,"line":18407},[67,36191,36192],{"class":2058},"    # 加载模型测试的函数\n",[67,36194,36195],{"class":69,"line":18430},[67,36196,36197],{"class":73},"    test_model_process(model,test_dataloader)\n",[67,36199,36200],{"class":69,"line":18436},[67,36201,631],{"emptyLinePlaceholder":630},[67,36203,36204],{"class":69,"line":18459},[67,36205,36206],{"class":2058},"    # 验证集推理实现：\n",[67,36208,36209],{"class":69,"line":18473},[67,36210,36211],{"class":2058},"    # 加载数据加载的更详细一些\n",[67,36213,36214,36216,36218,36220,36222,36224,36226],{"class":69,"line":18493},[67,36215,33013],{"class":73},[67,36217,85],{"class":84},[67,36219,33020],{"class":114},[67,36221,3547],{"class":84},[67,36223,33025],{"class":73},[67,36225,3544],{"class":84},[67,36227,35888],{"class":114},[67,36229,36230,36232,36234],{"class":69,"line":18499},[67,36231,33065],{"class":73},[67,36233,85],{"class":84},[67,36235,34059],{"class":73},[67,36237,36238],{"class":69,"line":18510},[67,36239,36240],{"class":2058},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[67,36242,36243],{"class":69,"line":18533},[67,36244,36245],{"class":2058},"    # 顺序不可改变\n",[67,36247,36248,36251,36253,36255,36258,36260,36263,36265,36268,36270,36273,36275,36278,36280,36283,36285,36288,36290,36293,36295,36298,36300,36303],{"class":69,"line":18555},[67,36249,36250],{"class":73},"    classes",[67,36252,85],{"class":84},[67,36254,2879],{"class":73},[67,36256,36257],{"class":114},"'T-shirt\u002Ftop'",[67,36259,2369],{"class":73},[67,36261,36262],{"class":114},"'Trouser'",[67,36264,2369],{"class":73},[67,36266,36267],{"class":114},"'Pullover'",[67,36269,2369],{"class":73},[67,36271,36272],{"class":114},"'Dress'",[67,36274,2369],{"class":73},[67,36276,36277],{"class":114},"'Coat'",[67,36279,2369],{"class":73},[67,36281,36282],{"class":114},"'Sandal'",[67,36284,2369],{"class":73},[67,36286,36287],{"class":114},"'Shirt'",[67,36289,2369],{"class":73},[67,36291,36292],{"class":114},"'Sneaker'",[67,36294,2369],{"class":73},[67,36296,36297],{"class":114},"'Bag'",[67,36299,2369],{"class":73},[67,36301,36302],{"class":114},"'Ankle boot'",[67,36304,35015],{"class":73},[67,36306,36307,36309],{"class":69,"line":18560},[67,36308,35947],{"class":84},[67,36310,34653],{"class":73},[67,36312,36313],{"class":69,"line":18566},[67,36314,36315],{"class":2058},"        # 将数据和标签都放到设备当中\n",[67,36317,36318,36320,36323,36325],{"class":69,"line":18580},[67,36319,5225],{"class":84},[67,36321,36322],{"class":73}," b_x,b_y ",[67,36324,941],{"class":84},[67,36326,35966],{"class":73},[67,36328,36329,36331,36333],{"class":69,"line":18593},[67,36330,34379],{"class":73},[67,36332,85],{"class":84},[67,36334,34384],{"class":73},[67,36336,36337,36339,36341],{"class":69,"line":18598},[67,36338,34394],{"class":73},[67,36340,85],{"class":84},[67,36342,34399],{"class":73},[67,36344,36345],{"class":69,"line":18612},[67,36346,631],{"emptyLinePlaceholder":630},[67,36348,36349],{"class":69,"line":18617},[67,36350,36351],{"class":2058},"            # 设置模型为验证模式\n",[67,36353,36354],{"class":69,"line":18623},[67,36355,34644],{"class":73},[67,36357,36358],{"class":69,"line":18628},[67,36359,36360],{"class":2058},"            # 模型推理结果\n",[67,36362,36363,36365,36367],{"class":69,"line":18642},[67,36364,34429],{"class":73},[67,36366,85],{"class":84},[67,36368,34434],{"class":73},[67,36370,36371],{"class":69,"line":18647},[67,36372,36373],{"class":2058},"            # 获取最大下标，最大下标就是类别号\n",[67,36375,36376,36378,36380,36382,36384,36386,36388],{"class":69,"line":18652},[67,36377,34446],{"class":73},[67,36379,85],{"class":84},[67,36381,34451],{"class":73},[67,36383,34454],{"class":7033},[67,36385,85],{"class":84},[67,36387,2209],{"class":77},[67,36389,829],{"class":73},[67,36391,36392],{"class":69,"line":18666},[67,36393,36394],{"class":2058},"            # 取出张量中的数值\n",[67,36396,36397,36400,36402],{"class":69,"line":18678},[67,36398,36399],{"class":73},"            result",[67,36401,85],{"class":84},[67,36403,36404],{"class":73},"pre_lab.item()\n",[67,36406,36407,36410,36412],{"class":69,"line":18683},[67,36408,36409],{"class":73},"            label",[67,36411,85],{"class":84},[67,36413,36414],{"class":73},"b_y.item()\n",[67,36416,36417,36420,36422,36425,36428,36431,36433,36436],{"class":69,"line":18696},[67,36418,36419],{"class":77},"            print",[67,36421,854],{"class":73},[67,36423,36424],{"class":114},"\"预测值：\"",[67,36426,36427],{"class":73},",classes[result],",[67,36429,36430],{"class":114},"\"------\"",[67,36432,2369],{"class":73},[67,36434,36435],{"class":114},"\"真实值：\"",[67,36437,36438],{"class":73},",classes[label])\n",[19,36440,36441],{},"（2）AlexNet",[26,36443,36444],{},[29,36445,36446],{},"神经网络构建",[58,36448,36450],{"className":60,"code":36449,"language":62,"meta":63,"style":63},"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",[32,36451,36452,36458,36468,36478,36490,36494,36511,36519,36534,36546,36588,36615,36658,36684,36728,36771,36814,36841,36845,36855,36860,36888,36907,36926,36930,36935,36943,36958,36968,36982,36992,37007,37022,37037,37048,37052,37057,37067,37082,37087,37100,37115,37127,37132,37143,37148,37154,37159,37171,37191,37196,37205],{"__ignoreMap":63},[67,36453,36454,36456],{"class":69,"line":70},[67,36455,622],{"class":84},[67,36457,32175],{"class":73},[67,36459,36460,36462,36464,36466],{"class":69,"line":191},[67,36461,32515],{"class":84},[67,36463,32518],{"class":73},[67,36465,622],{"class":84},[67,36467,32523],{"class":73},[67,36469,36470,36472,36474,36476],{"class":69,"line":202},[67,36471,32515],{"class":84},[67,36473,32535],{"class":73},[67,36475,622],{"class":84},[67,36477,32540],{"class":73},[67,36479,36480,36482,36485,36487],{"class":69,"line":641},[67,36481,622],{"class":84},[67,36483,36484],{"class":73}," torch.nn.functional ",[67,36486,649],{"class":84},[67,36488,36489],{"class":73}," F\n",[67,36491,36492],{"class":69,"line":655},[67,36493,631],{"emptyLinePlaceholder":630},[67,36495,36496,36498,36501,36503,36505,36507,36509],{"class":69,"line":660},[67,36497,16492],{"class":84},[67,36499,36500],{"class":110}," AlexNet",[67,36502,854],{"class":73},[67,36504,32556],{"class":110},[67,36506,2547],{"class":73},[67,36508,32561],{"class":110},[67,36510,952],{"class":73},[67,36512,36513,36515,36517],{"class":69,"line":665},[67,36514,32578],{"class":84},[67,36516,32581],{"class":77},[67,36518,32584],{"class":73},[67,36520,36521,36523,36526,36528,36530,36532],{"class":69,"line":677},[67,36522,32594],{"class":77},[67,36524,36525],{"class":73},"(AlexNet,",[67,36527,32600],{"class":77},[67,36529,32603],{"class":73},[67,36531,32606],{"class":77},[67,36533,3809],{"class":73},[67,36535,36536,36538,36541,36543],{"class":69,"line":683},[67,36537,32622],{"class":77},[67,36539,36540],{"class":73},".ReLu",[67,36542,85],{"class":84},[67,36544,36545],{"class":73},"nn.ReLU()\n",[67,36547,36548,36550,36552,36554,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586],{"class":69,"line":689},[67,36549,32622],{"class":77},[67,36551,32625],{"class":73},[67,36553,85],{"class":84},[67,36555,32630],{"class":73},[67,36557,32633],{"class":7033},[67,36559,85],{"class":84},[67,36561,2209],{"class":77},[67,36563,2369],{"class":73},[67,36565,32642],{"class":7033},[67,36567,85],{"class":84},[67,36569,2201],{"class":77},[67,36571,2369],{"class":73},[67,36573,32651],{"class":7033},[67,36575,85],{"class":84},[67,36577,2462],{"class":77},[67,36579,2369],{"class":73},[67,36581,32706],{"class":7033},[67,36583,85],{"class":84},[67,36585,1047],{"class":77},[67,36587,829],{"class":73},[67,36589,36590,36592,36594,36596,36599,36601,36603,36605,36607,36609,36611,36613],{"class":69,"line":694},[67,36591,32622],{"class":77},[67,36593,32690],{"class":73},[67,36595,85],{"class":84},[67,36597,36598],{"class":73},"nn.MaxPool2d(",[67,36600,32651],{"class":7033},[67,36602,85],{"class":84},[67,36604,2071],{"class":77},[67,36606,2369],{"class":73},[67,36608,32706],{"class":7033},[67,36610,85],{"class":84},[67,36612,2077],{"class":77},[67,36614,829],{"class":73},[67,36616,36617,36619,36621,36623,36625,36627,36629,36631,36633,36635,36637,36640,36642,36644,36646,36648,36650,36652,36654,36656],{"class":69,"line":700},[67,36618,32622],{"class":77},[67,36620,32719],{"class":73},[67,36622,85],{"class":84},[67,36624,32630],{"class":73},[67,36626,32633],{"class":7033},[67,36628,85],{"class":84},[67,36630,2201],{"class":77},[67,36632,2369],{"class":73},[67,36634,32642],{"class":7033},[67,36636,85],{"class":84},[67,36638,36639],{"class":77},"256",[67,36641,2369],{"class":73},[67,36643,32651],{"class":7033},[67,36645,85],{"class":84},[67,36647,2310],{"class":77},[67,36649,2369],{"class":73},[67,36651,32660],{"class":7033},[67,36653,85],{"class":84},[67,36655,2077],{"class":77},[67,36657,829],{"class":73},[67,36659,36660,36662,36664,36666,36668,36670,36672,36674,36676,36678,36680,36682],{"class":69,"line":706},[67,36661,32622],{"class":77},[67,36663,32754],{"class":73},[67,36665,85],{"class":84},[67,36667,36598],{"class":73},[67,36669,32651],{"class":7033},[67,36671,85],{"class":84},[67,36673,2071],{"class":77},[67,36675,2369],{"class":73},[67,36677,32706],{"class":7033},[67,36679,85],{"class":84},[67,36681,2077],{"class":77},[67,36683,829],{"class":73},[67,36685,36686,36688,36691,36693,36695,36697,36699,36701,36703,36705,36707,36710,36712,36714,36716,36718,36720,36722,36724,36726],{"class":69,"line":712},[67,36687,32622],{"class":77},[67,36689,36690],{"class":73},".c5",[67,36692,85],{"class":84},[67,36694,32630],{"class":73},[67,36696,32633],{"class":7033},[67,36698,85],{"class":84},[67,36700,36639],{"class":77},[67,36702,2369],{"class":73},[67,36704,32642],{"class":7033},[67,36706,85],{"class":84},[67,36708,36709],{"class":77},"384",[67,36711,2369],{"class":73},[67,36713,32651],{"class":7033},[67,36715,85],{"class":84},[67,36717,2071],{"class":77},[67,36719,2369],{"class":73},[67,36721,32660],{"class":7033},[67,36723,85],{"class":84},[67,36725,2209],{"class":77},[67,36727,829],{"class":73},[67,36729,36730,36732,36735,36737,36739,36741,36743,36745,36747,36749,36751,36753,36755,36757,36759,36761,36763,36765,36767,36769],{"class":69,"line":717},[67,36731,32622],{"class":77},[67,36733,36734],{"class":73},".c6",[67,36736,85],{"class":84},[67,36738,32630],{"class":73},[67,36740,32633],{"class":7033},[67,36742,85],{"class":84},[67,36744,36709],{"class":77},[67,36746,2369],{"class":73},[67,36748,32642],{"class":7033},[67,36750,85],{"class":84},[67,36752,36709],{"class":77},[67,36754,2369],{"class":73},[67,36756,32651],{"class":7033},[67,36758,85],{"class":84},[67,36760,2071],{"class":77},[67,36762,2369],{"class":73},[67,36764,32660],{"class":7033},[67,36766,85],{"class":84},[67,36768,2209],{"class":77},[67,36770,829],{"class":73},[67,36772,36773,36775,36778,36780,36782,36784,36786,36788,36790,36792,36794,36796,36798,36800,36802,36804,36806,36808,36810,36812],{"class":69,"line":723},[67,36774,32622],{"class":77},[67,36776,36777],{"class":73},".c7",[67,36779,85],{"class":84},[67,36781,32630],{"class":73},[67,36783,32633],{"class":7033},[67,36785,85],{"class":84},[67,36787,36709],{"class":77},[67,36789,2369],{"class":73},[67,36791,32642],{"class":7033},[67,36793,85],{"class":84},[67,36795,36639],{"class":77},[67,36797,2369],{"class":73},[67,36799,32651],{"class":7033},[67,36801,85],{"class":84},[67,36803,2071],{"class":77},[67,36805,2369],{"class":73},[67,36807,32660],{"class":7033},[67,36809,85],{"class":84},[67,36811,2209],{"class":77},[67,36813,829],{"class":73},[67,36815,36816,36818,36821,36823,36825,36827,36829,36831,36833,36835,36837,36839],{"class":69,"line":729},[67,36817,32622],{"class":77},[67,36819,36820],{"class":73},".s8",[67,36822,85],{"class":84},[67,36824,36598],{"class":73},[67,36826,32651],{"class":7033},[67,36828,85],{"class":84},[67,36830,2071],{"class":77},[67,36832,2369],{"class":73},[67,36834,32706],{"class":7033},[67,36836,85],{"class":84},[67,36838,2077],{"class":77},[67,36840,829],{"class":73},[67,36842,36843],{"class":69,"line":735},[67,36844,32779],{"class":2058},[67,36846,36847,36849,36851,36853],{"class":69,"line":741},[67,36848,32622],{"class":77},[67,36850,32786],{"class":73},[67,36852,85],{"class":84},[67,36854,32791],{"class":73},[67,36856,36857],{"class":69,"line":747},[67,36858,36859],{"class":2058},"       # 定义全连接层\n",[67,36861,36862,36864,36867,36869,36871,36873,36875,36877,36879,36881,36883,36886],{"class":69,"line":753},[67,36863,32622],{"class":77},[67,36865,36866],{"class":73},".f1",[67,36868,85],{"class":84},[67,36870,32808],{"class":73},[67,36872,2335],{"class":77},[67,36874,965],{"class":84},[67,36876,2335],{"class":77},[67,36878,965],{"class":84},[67,36880,36639],{"class":77},[67,36882,2369],{"class":73},[67,36884,36885],{"class":77},"4096",[67,36887,829],{"class":73},[67,36889,36890,36892,36895,36897,36899,36901,36903,36905],{"class":69,"line":758},[67,36891,32622],{"class":77},[67,36893,36894],{"class":73},".f2",[67,36896,85],{"class":84},[67,36898,32808],{"class":73},[67,36900,36885],{"class":77},[67,36902,2369],{"class":73},[67,36904,36885],{"class":77},[67,36906,829],{"class":73},[67,36908,36909,36911,36914,36916,36918,36920,36922,36924],{"class":69,"line":764},[67,36910,32622],{"class":77},[67,36912,36913],{"class":73},".f3",[67,36915,85],{"class":84},[67,36917,32808],{"class":73},[67,36919,36885],{"class":77},[67,36921,2369],{"class":73},[67,36923,2437],{"class":77},[67,36925,829],{"class":73},[67,36927,36928],{"class":69,"line":770},[67,36929,631],{"emptyLinePlaceholder":630},[67,36931,36932],{"class":69,"line":776},[67,36933,36934],{"class":2058},"    # 定义前向传播\n",[67,36936,36937,36939,36941],{"class":69,"line":782},[67,36938,32578],{"class":84},[67,36940,32870],{"class":110},[67,36942,32873],{"class":73},[67,36944,36945,36947,36949,36951,36954,36956],{"class":69,"line":788},[67,36946,32878],{"class":73},[67,36948,85],{"class":84},[67,36950,32600],{"class":77},[67,36952,36953],{"class":73},".ReLu(",[67,36955,32600],{"class":77},[67,36957,32890],{"class":73},[67,36959,36960,36962,36964,36966],{"class":69,"line":793},[67,36961,32878],{"class":73},[67,36963,85],{"class":84},[67,36965,32600],{"class":77},[67,36967,32901],{"class":73},[67,36969,36970,36972,36974,36976,36978,36980],{"class":69,"line":798},[67,36971,32878],{"class":73},[67,36973,85],{"class":84},[67,36975,32600],{"class":77},[67,36977,36953],{"class":73},[67,36979,32600],{"class":77},[67,36981,32916],{"class":73},[67,36983,36984,36986,36988,36990],{"class":69,"line":816},[67,36985,32878],{"class":73},[67,36987,85],{"class":84},[67,36989,32600],{"class":77},[67,36991,32927],{"class":73},[67,36993,36994,36996,36998,37000,37002,37004],{"class":69,"line":832},[67,36995,32878],{"class":73},[67,36997,85],{"class":84},[67,36999,32600],{"class":77},[67,37001,36953],{"class":73},[67,37003,32600],{"class":77},[67,37005,37006],{"class":73},".c5(x))\n",[67,37008,37009,37011,37013,37015,37017,37019],{"class":69,"line":843},[67,37010,32878],{"class":73},[67,37012,85],{"class":84},[67,37014,32600],{"class":77},[67,37016,36953],{"class":73},[67,37018,32600],{"class":77},[67,37020,37021],{"class":73},".c6(x))\n",[67,37023,37024,37026,37028,37030,37032,37034],{"class":69,"line":848},[67,37025,32878],{"class":73},[67,37027,85],{"class":84},[67,37029,32600],{"class":77},[67,37031,36953],{"class":73},[67,37033,32600],{"class":77},[67,37035,37036],{"class":73},".c7(x))\n",[67,37038,37039,37041,37043,37045],{"class":69,"line":863},[67,37040,32878],{"class":73},[67,37042,85],{"class":84},[67,37044,32600],{"class":77},[67,37046,37047],{"class":73},".s8(x)\n",[67,37049,37050],{"class":69,"line":876},[67,37051,631],{"emptyLinePlaceholder":630},[67,37053,37054],{"class":69,"line":889},[67,37055,37056],{"class":2058},"        # 展平加线性全连接层\n",[67,37058,37059,37061,37063,37065],{"class":69,"line":894},[67,37060,32878],{"class":73},[67,37062,85],{"class":84},[67,37064,32600],{"class":77},[67,37066,32938],{"class":73},[67,37068,37069,37071,37073,37075,37077,37079],{"class":69,"line":911},[67,37070,32878],{"class":73},[67,37072,85],{"class":84},[67,37074,32600],{"class":77},[67,37076,36953],{"class":73},[67,37078,32600],{"class":77},[67,37080,37081],{"class":73},".f1(x))\n",[67,37083,37084],{"class":69,"line":927},[67,37085,37086],{"class":2058},"        # 还需要dropout对神经元随机进行失活\n",[67,37088,37089,37091,37093,37096,37098],{"class":69,"line":932},[67,37090,32878],{"class":73},[67,37092,85],{"class":84},[67,37094,37095],{"class":73},"F.dropout(x,",[67,37097,1691],{"class":77},[67,37099,829],{"class":73},[67,37101,37102,37104,37106,37108,37110,37112],{"class":69,"line":955},[67,37103,32878],{"class":73},[67,37105,85],{"class":84},[67,37107,32600],{"class":77},[67,37109,36953],{"class":73},[67,37111,32600],{"class":77},[67,37113,37114],{"class":73},".f2(x))\n",[67,37116,37117,37119,37121,37123,37125],{"class":69,"line":971},[67,37118,32878],{"class":73},[67,37120,85],{"class":84},[67,37122,37095],{"class":73},[67,37124,1691],{"class":77},[67,37126,829],{"class":73},[67,37128,37129],{"class":69,"line":1010},[67,37130,37131],{"class":2058},"        # 直接输出\n",[67,37133,37134,37136,37138,37140],{"class":69,"line":1016},[67,37135,32878],{"class":73},[67,37137,85],{"class":84},[67,37139,32600],{"class":77},[67,37141,37142],{"class":73},".f3(x)\n",[67,37144,37145],{"class":69,"line":1021},[67,37146,37147],{"class":2058},"        # 前向传播输出\n",[67,37149,37150,37152],{"class":69,"line":1034},[67,37151,16550],{"class":84},[67,37153,32986],{"class":73},[67,37155,37156],{"class":69,"line":1053},[67,37157,37158],{"class":2058},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[67,37160,37161,37163,37165,37167,37169],{"class":69,"line":1070},[67,37162,1096],{"class":84},[67,37164,1099],{"class":77},[67,37166,4774],{"class":84},[67,37168,33001],{"class":114},[67,37170,813],{"class":73},[67,37172,37173,37175,37177,37179,37181,37183,37185,37187,37189],{"class":69,"line":1083},[67,37174,33013],{"class":73},[67,37176,85],{"class":84},[67,37178,32230],{"class":73},[67,37180,33020],{"class":114},[67,37182,3547],{"class":84},[67,37184,33025],{"class":73},[67,37186,3544],{"class":84},[67,37188,32255],{"class":114},[67,37190,829],{"class":73},[67,37192,37193],{"class":69,"line":1088},[67,37194,37195],{"class":2058},"    # 模型实例化，然后将实例化的模型放到设备中\n",[67,37197,37198,37200,37202],{"class":69,"line":1093},[67,37199,33065],{"class":73},[67,37201,85],{"class":84},[67,37203,37204],{"class":73},"AlexNet().to(device)\n",[67,37206,37207,37209,37211,37213,37215,37218,37220,37222],{"class":69,"line":1110},[67,37208,851],{"class":77},[67,37210,33077],{"class":73},[67,37212,2209],{"class":77},[67,37214,2369],{"class":73},[67,37216,37217],{"class":77},"227",[67,37219,2369],{"class":73},[67,37221,37217],{"class":77},[67,37223,33090],{"class":73},[26,37225,37226],{"start":191},[29,37227,33103],{},[58,37229,37231],{"className":60,"code":37230,"language":62,"meta":63,"style":63},"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",[32,37232,37233,37239,37245,37255,37261,37271,37281,37291,37301,37311,37315,37326,37336,37340,37344,37348,37356,37368,37378,37394,37404,37436,37450,37460,37470,37474,37484,37498,37508,37518,37528,37534,37538,37542,37546,37550,37554,37562,37582,37586,37590,37594,37598,37602,37618,37622,37626,37634,37638,37642,37650,37654,37658,37662,37670,37674,37678,37682,37686,37694,37698,37706,37710,37718,37722,37730,37734,37742,37746,37750,37758,37762,37766,37770,37782,37806,37820,37824,37828,37832,37840,37844,37852,37856,37864,37868,37876,37880,37888,37892,37900,37904,37916,37920,37928,37932,37940,37944,37948,37952,37956,37964,37968,37984,37988,37996,38000,38004,38008,38012,38016,38020,38024,38040,38044,38056,38060,38072,38076,38088,38092,38100,38104,38112,38116,38120,38125,38131,38135,38144,38148,38165,38169,38178,38182,38200,38213,38218,38231,38235,38239,38247,38251,38255,38263,38267,38275,38279,38287,38291,38295,38337,38379,38383,38387,38403,38407,38423,38427,38431,38439,38443,38447,38459,38497,38502,38507,38516,38520,38534,38544,38550,38556,38562,38568,38572,38576,38582,38586,38590,38598,38602,38620,38624,38628,38632,38648,38652,38656,38660,38664,38668,38688,38708,38712,38716,38720,38728,38736,38740,38756,38776,38796,38800,38804,38812,38820,38824,38828,38832,38844,38848,38858,38866,38883],{"__ignoreMap":63},[67,37234,37235,37237],{"class":69,"line":70},[67,37236,622],{"class":84},[67,37238,33593],{"class":73},[67,37240,37241,37243],{"class":69,"line":191},[67,37242,622],{"class":84},[67,37244,33600],{"class":73},[67,37246,37247,37249,37251,37253],{"class":69,"line":202},[67,37248,622],{"class":84},[67,37250,33611],{"class":73},[67,37252,649],{"class":84},[67,37254,33616],{"class":73},[67,37256,37257,37259],{"class":69,"line":641},[67,37258,622],{"class":84},[67,37260,32175],{"class":73},[67,37262,37263,37265,37267,37269],{"class":69,"line":655},[67,37264,32515],{"class":84},[67,37266,33187],{"class":73},[67,37268,622],{"class":84},[67,37270,33633],{"class":73},[67,37272,37273,37275,37277,37279],{"class":69,"line":660},[67,37274,32515],{"class":84},[67,37276,33143],{"class":73},[67,37278,622],{"class":84},[67,37280,33148],{"class":73},[67,37282,37283,37285,37287,37289],{"class":69,"line":665},[67,37284,32515],{"class":84},[67,37286,33170],{"class":73},[67,37288,622],{"class":84},[67,37290,33175],{"class":73},[67,37292,37293,37295,37297,37299],{"class":69,"line":677},[67,37294,622],{"class":84},[67,37296,33187],{"class":73},[67,37298,649],{"class":84},[67,37300,33192],{"class":73},[67,37302,37303,37305,37307,37309],{"class":69,"line":683},[67,37304,622],{"class":84},[67,37306,33204],{"class":73},[67,37308,649],{"class":84},[67,37310,33209],{"class":73},[67,37312,37313],{"class":69,"line":689},[67,37314,33678],{"class":2058},[67,37316,37317,37319,37321,37323],{"class":69,"line":694},[67,37318,32515],{"class":84},[67,37320,33685],{"class":73},[67,37322,622],{"class":84},[67,37324,37325],{"class":73}," AlexNet\n",[67,37327,37328,37330,37332,37334],{"class":69,"line":700},[67,37329,32515],{"class":84},[67,37331,32518],{"class":73},[67,37333,622],{"class":84},[67,37335,32523],{"class":73},[67,37337,37338],{"class":69,"line":706},[67,37339,631],{"emptyLinePlaceholder":630},[67,37341,37342],{"class":69,"line":712},[67,37343,631],{"emptyLinePlaceholder":630},[67,37345,37346],{"class":69,"line":717},[67,37347,33713],{"class":2058},[67,37349,37350,37352,37354],{"class":69,"line":723},[67,37351,801],{"class":84},[67,37353,33720],{"class":110},[67,37355,33723],{"class":73},[67,37357,37358,37360,37362,37364,37366],{"class":69,"line":729},[67,37359,33728],{"class":73},[67,37361,85],{"class":84},[67,37363,33227],{"class":73},[67,37365,33235],{"class":114},[67,37367,33238],{"class":73},[67,37369,37370,37372,37374,37376],{"class":69,"line":735},[67,37371,33741],{"class":7033},[67,37373,85],{"class":84},[67,37375,33248],{"class":77},[67,37377,33238],{"class":73},[67,37379,37380,37382,37384,37386,37388,37390,37392],{"class":69,"line":741},[67,37381,33752],{"class":7033},[67,37383,85],{"class":84},[67,37385,33265],{"class":73},[67,37387,33268],{"class":7033},[67,37389,85],{"class":84},[67,37391,37217],{"class":77},[67,37393,33276],{"class":73},[67,37395,37396,37398,37400,37402],{"class":69,"line":747},[67,37397,33769],{"class":7033},[67,37399,85],{"class":84},[67,37401,33248],{"class":77},[67,37403,829],{"class":73},[67,37405,37406,37408,37410,37412,37414,37416,37418,37420,37422,37424,37426,37428,37430,37432,37434],{"class":69,"line":753},[67,37407,33780],{"class":73},[67,37409,85],{"class":84},[67,37411,33785],{"class":73},[67,37413,33788],{"class":77},[67,37415,854],{"class":73},[67,37417,33793],{"class":77},[67,37419,965],{"class":84},[67,37421,9174],{"class":77},[67,37423,33800],{"class":73},[67,37425,33788],{"class":77},[67,37427,854],{"class":73},[67,37429,33807],{"class":77},[67,37431,965],{"class":84},[67,37433,9174],{"class":77},[67,37435,33814],{"class":73},[67,37437,37438,37440,37442,37444,37446,37448],{"class":69,"line":758},[67,37439,33819],{"class":73},[67,37441,85],{"class":84},[67,37443,33824],{"class":73},[67,37445,33309],{"class":7033},[67,37447,85],{"class":84},[67,37449,33314],{"class":73},[67,37451,37452,37454,37456,37458],{"class":69,"line":764},[67,37453,33835],{"class":7033},[67,37455,85],{"class":84},[67,37457,33840],{"class":77},[67,37459,33238],{"class":73},[67,37461,37462,37464,37466,37468],{"class":69,"line":770},[67,37463,33847],{"class":7033},[67,37465,85],{"class":84},[67,37467,33248],{"class":77},[67,37469,33238],{"class":73},[67,37471,37472],{"class":69,"line":776},[67,37473,33858],{"class":2058},[67,37475,37476,37478,37480,37482],{"class":69,"line":782},[67,37477,33863],{"class":7033},[67,37479,85],{"class":84},[67,37481,2386],{"class":77},[67,37483,829],{"class":73},[67,37485,37486,37488,37490,37492,37494,37496],{"class":69,"line":788},[67,37487,33874],{"class":73},[67,37489,85],{"class":84},[67,37491,33306],{"class":73},[67,37493,33309],{"class":7033},[67,37495,85],{"class":84},[67,37497,33885],{"class":73},[67,37499,37500,37502,37504,37506],{"class":69,"line":793},[67,37501,33890],{"class":7033},[67,37503,85],{"class":84},[67,37505,33840],{"class":77},[67,37507,33238],{"class":73},[67,37509,37510,37512,37514,37516],{"class":69,"line":798},[67,37511,33901],{"class":7033},[67,37513,85],{"class":84},[67,37515,33248],{"class":77},[67,37517,33238],{"class":73},[67,37519,37520,37522,37524,37526],{"class":69,"line":816},[67,37521,33912],{"class":7033},[67,37523,85],{"class":84},[67,37525,2386],{"class":77},[67,37527,829],{"class":73},[67,37529,37530,37532],{"class":69,"line":832},[67,37531,5910],{"class":84},[67,37533,33925],{"class":73},[67,37535,37536],{"class":69,"line":843},[67,37537,631],{"emptyLinePlaceholder":630},[67,37539,37540],{"class":69,"line":848},[67,37541,33934],{"class":2058},[67,37543,37544],{"class":69,"line":863},[67,37545,33939],{"class":2058},[67,37547,37548],{"class":69,"line":876},[67,37549,631],{"emptyLinePlaceholder":630},[67,37551,37552],{"class":69,"line":889},[67,37553,33948],{"class":2058},[67,37555,37556,37558,37560],{"class":69,"line":894},[67,37557,801],{"class":84},[67,37559,33955],{"class":110},[67,37561,33958],{"class":73},[67,37563,37564,37566,37568,37570,37572,37574,37576,37578,37580],{"class":69,"line":911},[67,37565,33013],{"class":73},[67,37567,85],{"class":84},[67,37569,32230],{"class":73},[67,37571,33020],{"class":114},[67,37573,3547],{"class":84},[67,37575,33025],{"class":73},[67,37577,3544],{"class":84},[67,37579,33977],{"class":114},[67,37581,829],{"class":73},[67,37583,37584],{"class":69,"line":927},[67,37585,631],{"emptyLinePlaceholder":630},[67,37587,37588],{"class":69,"line":932},[67,37589,631],{"emptyLinePlaceholder":630},[67,37591,37592],{"class":69,"line":955},[67,37593,33992],{"class":2058},[67,37595,37596],{"class":69,"line":971},[67,37597,33997],{"class":2058},[67,37599,37600],{"class":69,"line":1010},[67,37601,34002],{"class":2058},[67,37603,37604,37606,37608,37610,37612,37614,37616],{"class":69,"line":1016},[67,37605,34007],{"class":73},[67,37607,85],{"class":84},[67,37609,34012],{"class":73},[67,37611,34015],{"class":7033},[67,37613,85],{"class":84},[67,37615,34020],{"class":77},[67,37617,829],{"class":73},[67,37619,37620],{"class":69,"line":1021},[67,37621,631],{"emptyLinePlaceholder":630},[67,37623,37624],{"class":69,"line":1034},[67,37625,34031],{"class":2058},[67,37627,37628,37630,37632],{"class":69,"line":1053},[67,37629,34036],{"class":73},[67,37631,85],{"class":84},[67,37633,34041],{"class":73},[67,37635,37636],{"class":69,"line":1070},[67,37637,631],{"emptyLinePlaceholder":630},[67,37639,37640],{"class":69,"line":1083},[67,37641,34050],{"class":2058},[67,37643,37644,37646,37648],{"class":69,"line":1088},[67,37645,33065],{"class":73},[67,37647,85],{"class":84},[67,37649,34059],{"class":73},[67,37651,37652],{"class":69,"line":1093},[67,37653,34064],{"class":2058},[67,37655,37656],{"class":69,"line":1110},[67,37657,34069],{"class":2058},[67,37659,37660],{"class":69,"line":11603},[67,37661,34074],{"class":2058},[67,37663,37664,37666,37668],{"class":69,"line":11612},[67,37665,34079],{"class":73},[67,37667,85],{"class":84},[67,37669,34084],{"class":73},[67,37671,37672],{"class":69,"line":11617},[67,37673,631],{"emptyLinePlaceholder":630},[67,37675,37676],{"class":69,"line":11623},[67,37677,631],{"emptyLinePlaceholder":630},[67,37679,37680],{"class":69,"line":11644},[67,37681,34097],{"class":2058},[67,37683,37684],{"class":69,"line":11650},[67,37685,34102],{"class":2058},[67,37687,37688,37690,37692],{"class":69,"line":11664},[67,37689,34107],{"class":73},[67,37691,85],{"class":84},[67,37693,34112],{"class":77},[67,37695,37696],{"class":69,"line":11670},[67,37697,34117],{"class":2058},[67,37699,37700,37702,37704],{"class":69,"line":11697},[67,37701,34122],{"class":73},[67,37703,85],{"class":84},[67,37705,34127],{"class":73},[67,37707,37708],{"class":69,"line":11706},[67,37709,34132],{"class":2058},[67,37711,37712,37714,37716],{"class":69,"line":11712},[67,37713,34137],{"class":73},[67,37715,85],{"class":84},[67,37717,34127],{"class":73},[67,37719,37720],{"class":69,"line":11720},[67,37721,34146],{"class":2058},[67,37723,37724,37726,37728],{"class":69,"line":11725},[67,37725,34151],{"class":73},[67,37727,85],{"class":84},[67,37729,34127],{"class":73},[67,37731,37732],{"class":69,"line":18401},[67,37733,34160],{"class":2058},[67,37735,37736,37738,37740],{"class":69,"line":18407},[67,37737,34165],{"class":73},[67,37739,85],{"class":84},[67,37741,34127],{"class":73},[67,37743,37744],{"class":69,"line":18430},[67,37745,631],{"emptyLinePlaceholder":630},[67,37747,37748],{"class":69,"line":18436},[67,37749,34178],{"class":2058},[67,37751,37752,37754,37756],{"class":69,"line":18459},[67,37753,34183],{"class":73},[67,37755,85],{"class":84},[67,37757,34188],{"class":73},[67,37759,37760],{"class":69,"line":18473},[67,37761,631],{"emptyLinePlaceholder":630},[67,37763,37764],{"class":69,"line":18493},[67,37765,631],{"emptyLinePlaceholder":630},[67,37767,37768],{"class":69,"line":18499},[67,37769,34201],{"class":2058},[67,37771,37772,37774,37776,37778,37780],{"class":69,"line":18510},[67,37773,935],{"class":84},[67,37775,34208],{"class":73},[67,37777,941],{"class":84},[67,37779,944],{"class":77},[67,37781,34215],{"class":73},[67,37783,37784,37786,37788,37790,37792,37794,37796,37798,37800,37802,37804],{"class":69,"line":18533},[67,37785,34220],{"class":77},[67,37787,854],{"class":73},[67,37789,34225],{"class":114},[67,37791,34228],{"class":77},[67,37793,2573],{"class":114},[67,37795,34228],{"class":77},[67,37797,2243],{"class":114},[67,37799,34237],{"class":73},[67,37801,1863],{"class":84},[67,37803,2209],{"class":77},[67,37805,1050],{"class":73},[67,37807,37808,37810,37812,37814,37816,37818],{"class":69,"line":18555},[67,37809,34220],{"class":77},[67,37811,854],{"class":73},[67,37813,34252],{"class":114},[67,37815,965],{"class":84},[67,37817,2437],{"class":77},[67,37819,829],{"class":73},[67,37821,37822],{"class":69,"line":18560},[67,37823,631],{"emptyLinePlaceholder":630},[67,37825,37826],{"class":69,"line":18566},[67,37827,34267],{"class":2058},[67,37829,37830],{"class":69,"line":18580},[67,37831,34272],{"class":2058},[67,37833,37834,37836,37838],{"class":69,"line":18593},[67,37835,34277],{"class":73},[67,37837,85],{"class":84},[67,37839,34112],{"class":77},[67,37841,37842],{"class":69,"line":18598},[67,37843,34286],{"class":2058},[67,37845,37846,37848,37850],{"class":69,"line":18612},[67,37847,34291],{"class":73},[67,37849,85],{"class":84},[67,37851,4909],{"class":77},[67,37853,37854],{"class":69,"line":18617},[67,37855,34300],{"class":2058},[67,37857,37858,37860,37862],{"class":69,"line":18623},[67,37859,34305],{"class":73},[67,37861,85],{"class":84},[67,37863,34112],{"class":77},[67,37865,37866],{"class":69,"line":18628},[67,37867,34314],{"class":2058},[67,37869,37870,37872,37874],{"class":69,"line":18642},[67,37871,34319],{"class":73},[67,37873,85],{"class":84},[67,37875,4909],{"class":77},[67,37877,37878],{"class":69,"line":18647},[67,37879,34328],{"class":2058},[67,37881,37882,37884,37886],{"class":69,"line":18652},[67,37883,34333],{"class":73},[67,37885,85],{"class":84},[67,37887,4909],{"class":77},[67,37889,37890],{"class":69,"line":18666},[67,37891,34342],{"class":2058},[67,37893,37894,37896,37898],{"class":69,"line":18678},[67,37895,34347],{"class":73},[67,37897,85],{"class":84},[67,37899,4909],{"class":77},[67,37901,37902],{"class":69,"line":18683},[67,37903,34356],{"class":2058},[67,37905,37906,37908,37910,37912,37914],{"class":69,"line":18696},[67,37907,5225],{"class":84},[67,37909,33373],{"class":73},[67,37911,941],{"class":84},[67,37913,33378],{"class":77},[67,37915,34369],{"class":73},[67,37917,37918],{"class":69,"line":18701},[67,37919,34374],{"class":2058},[67,37921,37922,37924,37926],{"class":69,"line":18706},[67,37923,34379],{"class":73},[67,37925,85],{"class":84},[67,37927,34384],{"class":73},[67,37929,37930],{"class":69,"line":18711},[67,37931,34389],{"class":2058},[67,37933,37934,37936,37938],{"class":69,"line":18724},[67,37935,34394],{"class":73},[67,37937,85],{"class":84},[67,37939,34399],{"class":73},[67,37941,37942],{"class":69,"line":18729},[67,37943,34405],{"class":2058},[67,37945,37946],{"class":69,"line":34402},[67,37947,34411],{"class":73},[67,37949,37950],{"class":69,"line":34408},[67,37951,34417],{"class":2058},[67,37953,37954],{"class":69,"line":34414},[67,37955,34423],{"class":2058},[67,37957,37958,37960,37962],{"class":69,"line":34420},[67,37959,34429],{"class":73},[67,37961,85],{"class":84},[67,37963,34434],{"class":73},[67,37965,37966],{"class":69,"line":34426},[67,37967,34440],{"class":2058},[67,37969,37970,37972,37974,37976,37978,37980,37982],{"class":69,"line":34437},[67,37971,34446],{"class":73},[67,37973,85],{"class":84},[67,37975,34451],{"class":73},[67,37977,34454],{"class":7033},[67,37979,85],{"class":84},[67,37981,2209],{"class":77},[67,37983,829],{"class":73},[67,37985,37986],{"class":69,"line":34443},[67,37987,34466],{"class":2058},[67,37989,37990,37992,37994],{"class":69,"line":34463},[67,37991,34472],{"class":73},[67,37993,85],{"class":84},[67,37995,34477],{"class":73},[67,37997,37998],{"class":69,"line":34469},[67,37999,34483],{"class":2058},[67,38001,38002],{"class":69,"line":34480},[67,38003,34489],{"class":73},[67,38005,38006],{"class":69,"line":34486},[67,38007,34495],{"class":2058},[67,38009,38010],{"class":69,"line":34492},[67,38011,34501],{"class":73},[67,38013,38014],{"class":69,"line":34498},[67,38015,34507],{"class":2058},[67,38017,38018],{"class":69,"line":34504},[67,38019,34513],{"class":73},[67,38021,38022],{"class":69,"line":34510},[67,38023,34519],{"class":2058},[67,38025,38026,38028,38030,38032,38034,38036,38038],{"class":69,"line":34516},[67,38027,34525],{"class":73},[67,38029,11283],{"class":84},[67,38031,34530],{"class":73},[67,38033,965],{"class":84},[67,38035,34535],{"class":73},[67,38037,78],{"class":77},[67,38039,829],{"class":73},[67,38041,38042],{"class":69,"line":34522},[67,38043,34545],{"class":2058},[67,38045,38046,38048,38050,38052,38054],{"class":69,"line":34542},[67,38047,34551],{"class":73},[67,38049,11283],{"class":84},[67,38051,34556],{"class":73},[67,38053,4774],{"class":84},[67,38055,34561],{"class":73},[67,38057,38058],{"class":69,"line":34548},[67,38059,34567],{"class":2058},[67,38061,38062,38064,38066,38068,38070],{"class":69,"line":34564},[67,38063,34573],{"class":73},[67,38065,11283],{"class":84},[67,38067,34535],{"class":73},[67,38069,78],{"class":77},[67,38071,829],{"class":73},[67,38073,38074],{"class":69,"line":34570},[67,38075,34587],{"class":2058},[67,38077,38078,38080,38082,38084,38086],{"class":69,"line":34584},[67,38079,5225],{"class":84},[67,38081,34595],{"class":73},[67,38083,941],{"class":84},[67,38085,33378],{"class":77},[67,38087,34602],{"class":73},[67,38089,38090],{"class":69,"line":34590},[67,38091,34608],{"class":2058},[67,38093,38094,38096,38098],{"class":69,"line":34605},[67,38095,34379],{"class":73},[67,38097,85],{"class":84},[67,38099,34384],{"class":73},[67,38101,38102],{"class":69,"line":34611},[67,38103,34623],{"class":2058},[67,38105,38106,38108,38110],{"class":69,"line":34620},[67,38107,34394],{"class":73},[67,38109,85],{"class":84},[67,38111,34399],{"class":73},[67,38113,38114],{"class":69,"line":34626},[67,38115,34638],{"class":2058},[67,38117,38118],{"class":69,"line":34635},[67,38119,34644],{"class":73},[67,38121,38122],{"class":69,"line":34641},[67,38123,38124],{"class":2058},"            # 验证时不计算梯度以节省内存\u002F计算\n",[67,38126,38127,38129],{"class":69,"line":34647},[67,38128,34650],{"class":84},[67,38130,34653],{"class":73},[67,38132,38133],{"class":69,"line":34656},[67,38134,34659],{"class":2058},[67,38136,38137,38140,38142],{"class":69,"line":34662},[67,38138,38139],{"class":73},"                output",[67,38141,85],{"class":84},[67,38143,34434],{"class":73},[67,38145,38146],{"class":69,"line":34673},[67,38147,34676],{"class":2058},[67,38149,38150,38153,38155,38157,38159,38161,38163],{"class":69,"line":34679},[67,38151,38152],{"class":73},"                pre_lab",[67,38154,85],{"class":84},[67,38156,34451],{"class":73},[67,38158,34454],{"class":7033},[67,38160,85],{"class":84},[67,38162,2209],{"class":77},[67,38164,829],{"class":73},[67,38166,38167],{"class":69,"line":34698},[67,38168,34701],{"class":2058},[67,38170,38171,38174,38176],{"class":69,"line":34704},[67,38172,38173],{"class":73},"                val_batch_loss",[67,38175,85],{"class":84},[67,38177,34477],{"class":73},[67,38179,38180],{"class":69,"line":34715},[67,38181,34718],{"class":2058},[67,38183,38184,38187,38189,38192,38194,38196,38198],{"class":69,"line":34721},[67,38185,38186],{"class":73},"                val_loss",[67,38188,11283],{"class":84},[67,38190,38191],{"class":73},"val_batch_loss.item()",[67,38193,965],{"class":84},[67,38195,34535],{"class":73},[67,38197,78],{"class":77},[67,38199,829],{"class":73},[67,38201,38202,38205,38207,38209,38211],{"class":69,"line":34741},[67,38203,38204],{"class":73},"                val_corrects",[67,38206,11283],{"class":84},[67,38208,34556],{"class":73},[67,38210,4774],{"class":84},[67,38212,34561],{"class":73},[67,38214,38215],{"class":69,"line":34757},[67,38216,38217],{"class":2058},"            # 当前用于验证的样本数量\n",[67,38219,38220,38223,38225,38227,38229],{"class":69,"line":34763},[67,38221,38222],{"class":73},"            val_num",[67,38224,11283],{"class":84},[67,38226,34535],{"class":73},[67,38228,78],{"class":77},[67,38230,829],{"class":73},[67,38232,38233],{"class":69,"line":34777},[67,38234,34780],{"class":2058},[67,38236,38237],{"class":69,"line":34783},[67,38238,34786],{"class":2058},[67,38240,38241,38243,38245],{"class":69,"line":34789},[67,38242,34792],{"class":73},[67,38244,2573],{"class":84},[67,38246,34797],{"class":73},[67,38248,38249],{"class":69,"line":34800},[67,38250,34803],{"class":2058},[67,38252,38253],{"class":69,"line":34806},[67,38254,34809],{"class":2058},[67,38256,38257,38259,38261],{"class":69,"line":34812},[67,38258,34815],{"class":73},[67,38260,2573],{"class":84},[67,38262,34797],{"class":73},[67,38264,38265],{"class":69,"line":34822},[67,38266,34825],{"class":2058},[67,38268,38269,38271,38273],{"class":69,"line":34828},[67,38270,34831],{"class":73},[67,38272,2573],{"class":84},[67,38274,34836],{"class":73},[67,38276,38277],{"class":69,"line":34839},[67,38278,34842],{"class":2058},[67,38280,38281,38283,38285],{"class":69,"line":34845},[67,38282,34848],{"class":73},[67,38284,2573],{"class":84},[67,38286,34836],{"class":73},[67,38288,38289],{"class":69,"line":34855},[67,38290,631],{"emptyLinePlaceholder":630},[67,38292,38293],{"class":69,"line":34860},[67,38294,34863],{"class":2058},[67,38296,38297,38299,38301,38303,38305,38307,38309,38311,38313,38315,38317,38319,38321,38323,38325,38327,38329,38331,38333,38335],{"class":69,"line":34866},[67,38298,34220],{"class":77},[67,38300,854],{"class":73},[67,38302,5414],{"class":114},[67,38304,34228],{"class":77},[67,38306,34877],{"class":114},[67,38308,2885],{"class":77},[67,38310,34882],{"class":84},[67,38312,2934],{"class":77},[67,38314,34887],{"class":114},[67,38316,2885],{"class":77},[67,38318,34882],{"class":84},[67,38320,2934],{"class":77},[67,38322,5414],{"class":114},[67,38324,34898],{"class":73},[67,38326,1863],{"class":84},[67,38328,2209],{"class":77},[67,38330,34905],{"class":73},[67,38332,1863],{"class":84},[67,38334,2209],{"class":77},[67,38336,34912],{"class":73},[67,38338,38339,38341,38343,38345,38347,38349,38351,38353,38355,38357,38359,38361,38363,38365,38367,38369,38371,38373,38375,38377],{"class":69,"line":34915},[67,38340,34220],{"class":77},[67,38342,854],{"class":73},[67,38344,5414],{"class":114},[67,38346,34228],{"class":77},[67,38348,34926],{"class":114},[67,38350,2885],{"class":77},[67,38352,34882],{"class":84},[67,38354,2934],{"class":77},[67,38356,34935],{"class":114},[67,38358,2885],{"class":77},[67,38360,34882],{"class":84},[67,38362,2934],{"class":77},[67,38364,5414],{"class":114},[67,38366,34946],{"class":73},[67,38368,1863],{"class":84},[67,38370,2209],{"class":77},[67,38372,34953],{"class":73},[67,38374,1863],{"class":84},[67,38376,2209],{"class":77},[67,38378,34912],{"class":73},[67,38380,38381],{"class":69,"line":34962},[67,38382,631],{"emptyLinePlaceholder":630},[67,38384,38385],{"class":69,"line":34967},[67,38386,34970],{"class":2058},[67,38388,38389,38391,38393,38395,38397,38399,38401],{"class":69,"line":34973},[67,38390,4329],{"class":84},[67,38392,34978],{"class":73},[67,38394,1863],{"class":84},[67,38396,2209],{"class":77},[67,38398,2928],{"class":73},[67,38400,2948],{"class":84},[67,38402,34989],{"class":73},[67,38404,38405],{"class":69,"line":34992},[67,38406,34995],{"class":2058},[67,38408,38409,38411,38413,38415,38417,38419,38421],{"class":69,"line":34998},[67,38410,35001],{"class":73},[67,38412,2041],{"class":77},[67,38414,85],{"class":84},[67,38416,35008],{"class":73},[67,38418,1863],{"class":84},[67,38420,2209],{"class":77},[67,38422,35015],{"class":73},[67,38424,38425],{"class":69,"line":35018},[67,38426,35021],{"class":2058},[67,38428,38429],{"class":69,"line":35024},[67,38430,35027],{"class":2058},[67,38432,38433,38435,38437],{"class":69,"line":35030},[67,38434,35033],{"class":73},[67,38436,85],{"class":84},[67,38438,34084],{"class":73},[67,38440,38441],{"class":69,"line":35040},[67,38442,631],{"emptyLinePlaceholder":630},[67,38444,38445],{"class":69,"line":35045},[67,38446,35048],{"class":2058},[67,38448,38449,38451,38453,38455,38457],{"class":69,"line":35051},[67,38450,35054],{"class":73},[67,38452,85],{"class":84},[67,38454,35059],{"class":73},[67,38456,1863],{"class":84},[67,38458,35064],{"class":73},[67,38460,38461,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495],{"class":69,"line":35067},[67,38462,34220],{"class":77},[67,38464,854],{"class":73},[67,38466,35074],{"class":114},[67,38468,2885],{"class":77},[67,38470,35079],{"class":84},[67,38472,2934],{"class":77},[67,38474,2533],{"class":114},[67,38476,2885],{"class":77},[67,38478,35079],{"class":84},[67,38480,2934],{"class":77},[67,38482,35092],{"class":114},[67,38484,35095],{"class":73},[67,38486,35098],{"class":84},[67,38488,2896],{"class":77},[67,38490,35103],{"class":73},[67,38492,2319],{"class":84},[67,38494,2896],{"class":77},[67,38496,1050],{"class":73},[67,38498,38499],{"class":69,"line":35112},[67,38500,38501],{"class":2058},"    # 选择最优参数并保存\n",[67,38503,38504],{"class":69,"line":35118},[67,38505,38506],{"class":2058},"    # 保存最佳模型权重字典\n",[67,38508,38509,38512,38514],{"class":69,"line":35124},[67,38510,38511],{"class":73},"    torch.save(best_model_wts,",[67,38513,35136],{"class":114},[67,38515,829],{"class":73},[67,38517,38518],{"class":69,"line":35130},[67,38519,35156],{"class":2058},[67,38521,38522,38524,38526,38528,38530,38532],{"class":69,"line":35141},[67,38523,35162],{"class":73},[67,38525,85],{"class":84},[67,38527,35167],{"class":73},[67,38529,35170],{"class":7033},[67,38531,85],{"class":84},[67,38533,3400],{"class":73},[67,38535,38536,38538,38540,38542],{"class":69,"line":35147},[67,38537,35180],{"class":114},[67,38539,2848],{"class":73},[67,38541,35185],{"class":77},[67,38543,35188],{"class":73},[67,38545,38546,38548],{"class":69,"line":35153},[67,38547,35194],{"class":114},[67,38549,35197],{"class":73},[67,38551,38552,38554],{"class":69,"line":35159},[67,38553,35203],{"class":114},[67,38555,35206],{"class":73},[67,38557,38558,38560],{"class":69,"line":35177},[67,38559,35212],{"class":114},[67,38561,35215],{"class":73},[67,38563,38564,38566],{"class":69,"line":35191},[67,38565,35221],{"class":114},[67,38567,35224],{"class":73},[67,38569,38570],{"class":69,"line":35200},[67,38571,35230],{"class":73},[67,38573,38574],{"class":69,"line":35209},[67,38575,35236],{"class":2058},[67,38577,38578,38580],{"class":69,"line":35218},[67,38579,5910],{"class":84},[67,38581,35244],{"class":73},[67,38583,38584],{"class":69,"line":35227},[67,38585,631],{"emptyLinePlaceholder":630},[67,38587,38588],{"class":69,"line":35233},[67,38589,35255],{"class":2058},[67,38591,38592,38594,38596],{"class":69,"line":35239},[67,38593,801],{"class":84},[67,38595,35263],{"class":110},[67,38597,35266],{"class":73},[67,38599,38600],{"class":69,"line":35247},[67,38601,35272],{"class":2058},[67,38603,38604,38606,38608,38610,38612,38614,38616,38618],{"class":69,"line":35252},[67,38605,35278],{"class":73},[67,38607,33464],{"class":7033},[67,38609,85],{"class":84},[67,38611,854],{"class":73},[67,38613,2488],{"class":77},[67,38615,2369],{"class":73},[67,38617,1047],{"class":77},[67,38619,1050],{"class":73},[67,38621,38622],{"class":69,"line":35258},[67,38623,35298],{"class":2058},[67,38625,38626],{"class":69,"line":35269},[67,38627,35304],{"class":2058},[67,38629,38630],{"class":69,"line":35275},[67,38631,35310],{"class":2058},[67,38633,38634,38636,38638,38640,38642,38644,38646],{"class":69,"line":35295},[67,38635,33498],{"class":73},[67,38637,2209],{"class":77},[67,38639,2369],{"class":73},[67,38641,2077],{"class":77},[67,38643,2369],{"class":73},[67,38645,2209],{"class":77},[67,38647,829],{"class":73},[67,38649,38650],{"class":69,"line":35301},[67,38651,35333],{"class":2058},[67,38653,38654],{"class":69,"line":35307},[67,38655,35339],{"class":2058},[67,38657,38658],{"class":69,"line":35313},[67,38659,35345],{"class":2058},[67,38661,38662],{"class":69,"line":35330},[67,38663,35351],{"class":2058},[67,38665,38666],{"class":69,"line":35336},[67,38667,35357],{"class":2058},[67,38669,38670,38672,38674,38676,38678,38680,38682,38684,38686],{"class":69,"line":35342},[67,38671,35363],{"class":73},[67,38673,35366],{"class":114},[67,38675,35369],{"class":73},[67,38677,35372],{"class":114},[67,38679,2369],{"class":73},[67,38681,35377],{"class":7033},[67,38683,85],{"class":84},[67,38685,35382],{"class":114},[67,38687,829],{"class":73},[67,38689,38690,38692,38694,38696,38698,38700,38702,38704,38706],{"class":69,"line":35348},[67,38691,35363],{"class":73},[67,38693,35366],{"class":114},[67,38695,35394],{"class":73},[67,38697,35397],{"class":114},[67,38699,2369],{"class":73},[67,38701,35377],{"class":7033},[67,38703,85],{"class":84},[67,38705,35406],{"class":114},[67,38707,829],{"class":73},[67,38709,38710],{"class":69,"line":35354},[67,38711,35414],{"class":2058},[67,38713,38714],{"class":69,"line":35360},[67,38715,35420],{"class":73},[67,38717,38718],{"class":69,"line":35387},[67,38719,35426],{"class":2058},[67,38721,38722,38724,38726],{"class":69,"line":35411},[67,38723,35432],{"class":73},[67,38725,35435],{"class":114},[67,38727,829],{"class":73},[67,38729,38730,38732,38734],{"class":69,"line":35417},[67,38731,35443],{"class":73},[67,38733,35446],{"class":114},[67,38735,829],{"class":73},[67,38737,38738],{"class":69,"line":35423},[67,38739,35454],{"class":2058},[67,38741,38742,38744,38746,38748,38750,38752,38754],{"class":69,"line":35429},[67,38743,33498],{"class":73},[67,38745,2209],{"class":77},[67,38747,2369],{"class":73},[67,38749,2077],{"class":77},[67,38751,2369],{"class":73},[67,38753,2077],{"class":77},[67,38755,829],{"class":73},[67,38757,38758,38760,38762,38764,38766,38768,38770,38772,38774],{"class":69,"line":35440},[67,38759,35363],{"class":73},[67,38761,35366],{"class":114},[67,38763,35481],{"class":73},[67,38765,35372],{"class":114},[67,38767,2369],{"class":73},[67,38769,35377],{"class":7033},[67,38771,85],{"class":84},[67,38773,35492],{"class":114},[67,38775,829],{"class":73},[67,38777,38778,38780,38782,38784,38786,38788,38790,38792,38794],{"class":69,"line":35451},[67,38779,35363],{"class":73},[67,38781,35366],{"class":114},[67,38783,35504],{"class":73},[67,38785,35397],{"class":114},[67,38787,2369],{"class":73},[67,38789,35377],{"class":7033},[67,38791,85],{"class":84},[67,38793,35515],{"class":114},[67,38795,829],{"class":73},[67,38797,38798],{"class":69,"line":35457},[67,38799,35523],{"class":2058},[67,38801,38802],{"class":69,"line":35474},[67,38803,35420],{"class":73},[67,38805,38806,38808,38810],{"class":69,"line":35497},[67,38807,35432],{"class":73},[67,38809,35366],{"class":114},[67,38811,829],{"class":73},[67,38813,38814,38816,38818],{"class":69,"line":35520},[67,38815,35443],{"class":73},[67,38817,35545],{"class":114},[67,38819,829],{"class":73},[67,38821,38822],{"class":69,"line":35526},[67,38823,35553],{"class":73},[67,38825,38826],{"class":69,"line":35531},[67,38827,631],{"emptyLinePlaceholder":630},[67,38829,38830],{"class":69,"line":35540},[67,38831,35564],{"class":2058},[67,38833,38834,38836,38838,38840,38842],{"class":69,"line":35550},[67,38835,1096],{"class":84},[67,38837,1099],{"class":77},[67,38839,4774],{"class":84},[67,38841,33001],{"class":114},[67,38843,813],{"class":73},[67,38845,38846],{"class":69,"line":35556},[67,38847,35583],{"class":2058},[67,38849,38850,38853,38855],{"class":69,"line":35561},[67,38851,38852],{"class":73},"    AlexNet",[67,38854,85],{"class":84},[67,38856,38857],{"class":73},"AlexNet()\n",[67,38859,38860,38862,38864],{"class":69,"line":35567},[67,38861,35600],{"class":73},[67,38863,85],{"class":84},[67,38865,35605],{"class":73},[67,38867,38868,38870,38872,38875,38877,38879,38881],{"class":69,"line":35580},[67,38869,35162],{"class":73},[67,38871,85],{"class":84},[67,38873,38874],{"class":73},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[67,38876,35618],{"class":7033},[67,38878,85],{"class":84},[67,38880,2689],{"class":77},[67,38882,829],{"class":73},[67,38884,38885],{"class":69,"line":35586},[67,38886,35630],{"class":73},[26,38888,38889],{"start":202},[29,38890,35643],{},[58,38892,38894],{"className":60,"code":38893,"language":62,"meta":63,"style":63},"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",[32,38895,38896,38902,38912,38922,38932,38936,38946,38956,38967,38971,38975,38979,38987,39003,39013,39029,39039,39053,39057,39067,39077,39087,39093,39097,39101,39109,39113,39129,39137,39141,39145,39153,39161,39165,39169,39173,39177,39183,39187,39197,39205,39213,39217,39221,39225,39233,39237,39253,39257,39261,39265,39277,39281,39293,39297,39301,39313,39317,39327,39331,39335,39347,39351,39359,39363,39367,39375,39379,39387,39391,39395,39399,39403,39407,39423,39431,39435,39439,39487,39493,39497,39507,39515,39523,39527,39531,39535,39539,39547,39551,39567,39571,39579,39587],{"__ignoreMap":63},[67,38897,38898,38900],{"class":69,"line":70},[67,38899,622],{"class":84},[67,38901,32175],{"class":73},[67,38903,38904,38906,38908,38910],{"class":69,"line":191},[67,38905,622],{"class":84},[67,38907,33187],{"class":73},[67,38909,649],{"class":84},[67,38911,33192],{"class":73},[67,38913,38914,38916,38918,38920],{"class":69,"line":202},[67,38915,32515],{"class":84},[67,38917,35671],{"class":73},[67,38919,622],{"class":84},[67,38921,35676],{"class":73},[67,38923,38924,38926,38928,38930],{"class":69,"line":641},[67,38925,32515],{"class":84},[67,38927,33170],{"class":73},[67,38929,622],{"class":84},[67,38931,33175],{"class":73},[67,38933,38934],{"class":69,"line":655},[67,38935,35691],{"class":2058},[67,38937,38938,38940,38942,38944],{"class":69,"line":660},[67,38939,32515],{"class":84},[67,38941,33143],{"class":73},[67,38943,622],{"class":84},[67,38945,33148],{"class":73},[67,38947,38948,38950,38952,38954],{"class":69,"line":665},[67,38949,32515],{"class":84},[67,38951,33685],{"class":73},[67,38953,622],{"class":84},[67,38955,37325],{"class":73},[67,38957,38958,38960,38963,38965],{"class":69,"line":677},[67,38959,32515],{"class":84},[67,38961,38962],{"class":73}," 练习.AlexNet.model ",[67,38964,622],{"class":84},[67,38966,37325],{"class":73},[67,38968,38969],{"class":69,"line":683},[67,38970,631],{"emptyLinePlaceholder":630},[67,38972,38973],{"class":69,"line":689},[67,38974,631],{"emptyLinePlaceholder":630},[67,38976,38977],{"class":69,"line":694},[67,38978,35720],{"class":2058},[67,38980,38981,38983,38985],{"class":69,"line":700},[67,38982,801],{"class":84},[67,38984,35727],{"class":110},[67,38986,33723],{"class":73},[67,38988,38989,38991,38993,38995,38997,38999,39001],{"class":69,"line":706},[67,38990,35734],{"class":73},[67,38992,85],{"class":84},[67,38994,33227],{"class":73},[67,38996,33230],{"class":7033},[67,38998,85],{"class":84},[67,39000,33235],{"class":114},[67,39002,33238],{"class":73},[67,39004,39005,39007,39009,39011],{"class":69,"line":712},[67,39006,35751],{"class":7033},[67,39008,85],{"class":84},[67,39010,35756],{"class":77},[67,39012,33238],{"class":73},[67,39014,39015,39017,39019,39021,39023,39025,39027],{"class":69,"line":717},[67,39016,35763],{"class":7033},[67,39018,85],{"class":84},[67,39020,33265],{"class":73},[67,39022,33268],{"class":7033},[67,39024,85],{"class":84},[67,39026,37217],{"class":77},[67,39028,33276],{"class":73},[67,39030,39031,39033,39035,39037],{"class":69,"line":723},[67,39032,35780],{"class":7033},[67,39034,85],{"class":84},[67,39036,33248],{"class":77},[67,39038,829],{"class":73},[67,39040,39041,39043,39045,39047,39049,39051],{"class":69,"line":729},[67,39042,35791],{"class":73},[67,39044,85],{"class":84},[67,39046,33306],{"class":73},[67,39048,33309],{"class":7033},[67,39050,85],{"class":84},[67,39052,35802],{"class":73},[67,39054,39055],{"class":69,"line":735},[67,39056,35807],{"class":2058},[67,39058,39059,39061,39063,39065],{"class":69,"line":741},[67,39060,35812],{"class":7033},[67,39062,85],{"class":84},[67,39064,2209],{"class":77},[67,39066,33238],{"class":73},[67,39068,39069,39071,39073,39075],{"class":69,"line":747},[67,39070,35823],{"class":7033},[67,39072,85],{"class":84},[67,39074,33248],{"class":77},[67,39076,33238],{"class":73},[67,39078,39079,39081,39083,39085],{"class":69,"line":753},[67,39080,35834],{"class":7033},[67,39082,85],{"class":84},[67,39084,78],{"class":77},[67,39086,829],{"class":73},[67,39088,39089,39091],{"class":69,"line":758},[67,39090,5910],{"class":84},[67,39092,35847],{"class":73},[67,39094,39095],{"class":69,"line":764},[67,39096,631],{"emptyLinePlaceholder":630},[67,39098,39099],{"class":69,"line":770},[67,39100,35856],{"class":2058},[67,39102,39103,39105,39107],{"class":69,"line":776},[67,39104,801],{"class":84},[67,39106,35863],{"class":110},[67,39108,35866],{"class":73},[67,39110,39111],{"class":69,"line":782},[67,39112,35871],{"class":2058},[67,39114,39115,39117,39119,39121,39123,39125,39127],{"class":69,"line":788},[67,39116,33013],{"class":73},[67,39118,85],{"class":84},[67,39120,33020],{"class":114},[67,39122,3547],{"class":84},[67,39124,33025],{"class":73},[67,39126,3544],{"class":84},[67,39128,35888],{"class":114},[67,39130,39131,39133,39135],{"class":69,"line":793},[67,39132,33065],{"class":73},[67,39134,85],{"class":84},[67,39136,34059],{"class":73},[67,39138,39139],{"class":69,"line":798},[67,39140,631],{"emptyLinePlaceholder":630},[67,39142,39143],{"class":69,"line":816},[67,39144,35905],{"class":2058},[67,39146,39147,39149,39151],{"class":69,"line":832},[67,39148,35910],{"class":73},[67,39150,85],{"class":84},[67,39152,34112],{"class":77},[67,39154,39155,39157,39159],{"class":69,"line":843},[67,39156,35919],{"class":73},[67,39158,85],{"class":84},[67,39160,4909],{"class":77},[67,39162,39163],{"class":69,"line":848},[67,39164,631],{"emptyLinePlaceholder":630},[67,39166,39167],{"class":69,"line":863},[67,39168,35932],{"class":2058},[67,39170,39171],{"class":69,"line":876},[67,39172,35937],{"class":2058},[67,39174,39175],{"class":69,"line":889},[67,39176,35942],{"class":2058},[67,39178,39179,39181],{"class":69,"line":894},[67,39180,35947],{"class":84},[67,39182,34653],{"class":73},[67,39184,39185],{"class":69,"line":911},[67,39186,35954],{"class":2058},[67,39188,39189,39191,39193,39195],{"class":69,"line":927},[67,39190,5225],{"class":84},[67,39192,35961],{"class":73},[67,39194,941],{"class":84},[67,39196,35966],{"class":73},[67,39198,39199,39201,39203],{"class":69,"line":932},[67,39200,35971],{"class":73},[67,39202,85],{"class":84},[67,39204,35976],{"class":73},[67,39206,39207,39209,39211],{"class":69,"line":955},[67,39208,35981],{"class":73},[67,39210,85],{"class":84},[67,39212,35986],{"class":73},[67,39214,39215],{"class":69,"line":971},[67,39216,35991],{"class":2058},[67,39218,39219],{"class":69,"line":1010},[67,39220,34644],{"class":73},[67,39222,39223],{"class":69,"line":1016},[67,39224,36000],{"class":2058},[67,39226,39227,39229,39231],{"class":69,"line":1021},[67,39228,34429],{"class":73},[67,39230,85],{"class":84},[67,39232,36009],{"class":73},[67,39234,39235],{"class":69,"line":1034},[67,39236,36014],{"class":2058},[67,39238,39239,39241,39243,39245,39247,39249,39251],{"class":69,"line":1053},[67,39240,34446],{"class":73},[67,39242,85],{"class":84},[67,39244,34451],{"class":73},[67,39246,34454],{"class":7033},[67,39248,85],{"class":84},[67,39250,2209],{"class":77},[67,39252,829],{"class":73},[67,39254,39255],{"class":69,"line":1070},[67,39256,36035],{"class":2058},[67,39258,39259],{"class":69,"line":1083},[67,39260,36040],{"class":2058},[67,39262,39263],{"class":69,"line":1088},[67,39264,36045],{"class":2058},[67,39266,39267,39269,39271,39273,39275],{"class":69,"line":1093},[67,39268,36050],{"class":73},[67,39270,11283],{"class":84},[67,39272,34556],{"class":73},[67,39274,4774],{"class":84},[67,39276,36059],{"class":73},[67,39278,39279],{"class":69,"line":1110},[67,39280,36064],{"class":2058},[67,39282,39283,39285,39287,39289,39291],{"class":69,"line":11603},[67,39284,36069],{"class":73},[67,39286,11283],{"class":84},[67,39288,36074],{"class":73},[67,39290,78],{"class":77},[67,39292,829],{"class":73},[67,39294,39295],{"class":69,"line":11612},[67,39296,631],{"emptyLinePlaceholder":630},[67,39298,39299],{"class":69,"line":11617},[67,39300,36087],{"class":2058},[67,39302,39303,39305,39307,39309,39311],{"class":69,"line":11623},[67,39304,36092],{"class":73},[67,39306,85],{"class":84},[67,39308,36097],{"class":73},[67,39310,2573],{"class":84},[67,39312,36102],{"class":73},[67,39314,39315],{"class":69,"line":11644},[67,39316,36107],{"class":2058},[67,39318,39319,39321,39323,39325],{"class":69,"line":11650},[67,39320,34220],{"class":77},[67,39322,854],{"class":73},[67,39324,36116],{"class":114},[67,39326,36119],{"class":73},[67,39328,39329],{"class":69,"line":11664},[67,39330,631],{"emptyLinePlaceholder":630},[67,39332,39333],{"class":69,"line":11670},[67,39334,36128],{"class":2058},[67,39336,39337,39339,39341,39343,39345],{"class":69,"line":11697},[67,39338,1096],{"class":84},[67,39340,1099],{"class":77},[67,39342,4774],{"class":84},[67,39344,33001],{"class":114},[67,39346,813],{"class":73},[67,39348,39349],{"class":69,"line":11706},[67,39350,36145],{"class":2058},[67,39352,39353,39355,39357],{"class":69,"line":11712},[67,39354,33065],{"class":73},[67,39356,85],{"class":84},[67,39358,38857],{"class":73},[67,39360,39361],{"class":69,"line":11720},[67,39362,36158],{"class":2058},[67,39364,39365],{"class":69,"line":11725},[67,39366,36163],{"class":2058},[67,39368,39369,39371,39373],{"class":69,"line":18401},[67,39370,36168],{"class":73},[67,39372,36171],{"class":114},[67,39374,1050],{"class":73},[67,39376,39377],{"class":69,"line":18407},[67,39378,36178],{"class":2058},[67,39380,39381,39383,39385],{"class":69,"line":18430},[67,39382,35791],{"class":73},[67,39384,85],{"class":84},[67,39386,36187],{"class":73},[67,39388,39389],{"class":69,"line":18436},[67,39390,36192],{"class":2058},[67,39392,39393],{"class":69,"line":18459},[67,39394,36197],{"class":73},[67,39396,39397],{"class":69,"line":18473},[67,39398,631],{"emptyLinePlaceholder":630},[67,39400,39401],{"class":69,"line":18493},[67,39402,36206],{"class":2058},[67,39404,39405],{"class":69,"line":18499},[67,39406,36211],{"class":2058},[67,39408,39409,39411,39413,39415,39417,39419,39421],{"class":69,"line":18510},[67,39410,33013],{"class":73},[67,39412,85],{"class":84},[67,39414,33020],{"class":114},[67,39416,3547],{"class":84},[67,39418,33025],{"class":73},[67,39420,3544],{"class":84},[67,39422,35888],{"class":114},[67,39424,39425,39427,39429],{"class":69,"line":18533},[67,39426,33065],{"class":73},[67,39428,85],{"class":84},[67,39430,34059],{"class":73},[67,39432,39433],{"class":69,"line":18555},[67,39434,36240],{"class":2058},[67,39436,39437],{"class":69,"line":18560},[67,39438,36245],{"class":2058},[67,39440,39441,39443,39445,39447,39449,39451,39453,39455,39457,39459,39461,39463,39465,39467,39469,39471,39473,39475,39477,39479,39481,39483,39485],{"class":69,"line":18566},[67,39442,36250],{"class":73},[67,39444,85],{"class":84},[67,39446,2879],{"class":73},[67,39448,36257],{"class":114},[67,39450,2369],{"class":73},[67,39452,36262],{"class":114},[67,39454,2369],{"class":73},[67,39456,36267],{"class":114},[67,39458,2369],{"class":73},[67,39460,36272],{"class":114},[67,39462,2369],{"class":73},[67,39464,36277],{"class":114},[67,39466,2369],{"class":73},[67,39468,36282],{"class":114},[67,39470,2369],{"class":73},[67,39472,36287],{"class":114},[67,39474,2369],{"class":73},[67,39476,36292],{"class":114},[67,39478,2369],{"class":73},[67,39480,36297],{"class":114},[67,39482,2369],{"class":73},[67,39484,36302],{"class":114},[67,39486,35015],{"class":73},[67,39488,39489,39491],{"class":69,"line":18580},[67,39490,35947],{"class":84},[67,39492,34653],{"class":73},[67,39494,39495],{"class":69,"line":18593},[67,39496,36315],{"class":2058},[67,39498,39499,39501,39503,39505],{"class":69,"line":18598},[67,39500,5225],{"class":84},[67,39502,36322],{"class":73},[67,39504,941],{"class":84},[67,39506,35966],{"class":73},[67,39508,39509,39511,39513],{"class":69,"line":18612},[67,39510,34379],{"class":73},[67,39512,85],{"class":84},[67,39514,34384],{"class":73},[67,39516,39517,39519,39521],{"class":69,"line":18617},[67,39518,34394],{"class":73},[67,39520,85],{"class":84},[67,39522,34399],{"class":73},[67,39524,39525],{"class":69,"line":18623},[67,39526,631],{"emptyLinePlaceholder":630},[67,39528,39529],{"class":69,"line":18628},[67,39530,36351],{"class":2058},[67,39532,39533],{"class":69,"line":18642},[67,39534,34644],{"class":73},[67,39536,39537],{"class":69,"line":18647},[67,39538,36360],{"class":2058},[67,39540,39541,39543,39545],{"class":69,"line":18652},[67,39542,34429],{"class":73},[67,39544,85],{"class":84},[67,39546,34434],{"class":73},[67,39548,39549],{"class":69,"line":18666},[67,39550,36373],{"class":2058},[67,39552,39553,39555,39557,39559,39561,39563,39565],{"class":69,"line":18678},[67,39554,34446],{"class":73},[67,39556,85],{"class":84},[67,39558,34451],{"class":73},[67,39560,34454],{"class":7033},[67,39562,85],{"class":84},[67,39564,2209],{"class":77},[67,39566,829],{"class":73},[67,39568,39569],{"class":69,"line":18683},[67,39570,36394],{"class":2058},[67,39572,39573,39575,39577],{"class":69,"line":18696},[67,39574,36399],{"class":73},[67,39576,85],{"class":84},[67,39578,36404],{"class":73},[67,39580,39581,39583,39585],{"class":69,"line":18701},[67,39582,36409],{"class":73},[67,39584,85],{"class":84},[67,39586,36414],{"class":73},[67,39588,39589,39591,39593,39595,39597,39599,39601,39603],{"class":69,"line":18706},[67,39590,36419],{"class":77},[67,39592,854],{"class":73},[67,39594,36424],{"class":114},[67,39596,36427],{"class":73},[67,39598,36430],{"class":114},[67,39600,2369],{"class":73},[67,39602,36435],{"class":114},[67,39604,36438],{"class":73},[391,39606,39608],{"id":39607},"_22vgg","2.2.VGG",[23794,39610,39612],{"id":39611},"_221原理","2.2.1.原理",[19,39614,39615],{},[3317,39616],{"alt":63,"src":39617},"\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,39619,39620],{},[3317,39621],{"alt":63,"src":39622},"\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,39624,39625],{},[3317,39626],{"alt":63,"src":39627},"\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,39629,39630],{},"参数详细描述：",[19,39632,39633],{},[3317,39634],{"alt":63,"src":39635},"\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,39637,39638],{},[3317,39639],{"alt":63,"src":39640},"\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,39642,39643],{},[3317,39644],{"alt":63,"src":39645},"\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,39647,39648],{},[3317,39649],{"alt":63,"src":39650},"\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,39652,39653],{},[3317,39654],{"alt":63,"src":39655},"\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",[23794,39657,39659],{"id":39658},"_222代码实现","2.2.2.代码实现",[26,39661,39662],{},[29,39663,39664],{},"网络搭建",[58,39666,39668],{"className":60,"code":39667,"language":62,"meta":63,"style":63},"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",[32,39669,39670,39676,39688,39698,39708,39712,39729,39737,39756,39761,39766,39778,39816,39821,39857,39861,39890,39895,39900,39911,39947,39951,39987,39991,40019,40023,40028,40039,40075,40079,40115,40119,40155,40159,40187,40191,40196,40207,40244,40248,40284,40288,40324,40328,40356,40360,40365,40376,40412,40416,40452,40456,40492,40496,40524,40528,40533,40544,40549,40554,40559,40580,40584,40596,40600,40612,40616,40620,40625,40630,40645,40650,40660,40665,40680,40685,40704,40709,40718,40723,40733,40738,40743,40757,40762,40776,40784,40788,40792,40800,40811,40822,40833,40844,40855,40866,40872,40876,40881,40894,40914,40920,40929],{"__ignoreMap":63},[67,39671,39672,39674],{"class":69,"line":70},[67,39673,622],{"class":84},[67,39675,32175],{"class":73},[67,39677,39678,39680,39683,39685],{"class":69,"line":191},[67,39679,32515],{"class":84},[67,39681,39682],{"class":73}," sympy.core.sympify ",[67,39684,622],{"class":84},[67,39686,39687],{"class":73}," kernS\n",[67,39689,39690,39692,39694,39696],{"class":69,"line":202},[67,39691,32515],{"class":84},[67,39693,32518],{"class":73},[67,39695,622],{"class":84},[67,39697,32523],{"class":73},[67,39699,39700,39702,39704,39706],{"class":69,"line":641},[67,39701,32515],{"class":84},[67,39703,32535],{"class":73},[67,39705,622],{"class":84},[67,39707,32540],{"class":73},[67,39709,39710],{"class":69,"line":655},[67,39711,631],{"emptyLinePlaceholder":630},[67,39713,39714,39716,39719,39721,39723,39725,39727],{"class":69,"line":660},[67,39715,16492],{"class":84},[67,39717,39718],{"class":110}," VGG16",[67,39720,854],{"class":73},[67,39722,32556],{"class":110},[67,39724,2547],{"class":73},[67,39726,32561],{"class":110},[67,39728,952],{"class":73},[67,39730,39731,39733,39735],{"class":69,"line":665},[67,39732,32578],{"class":84},[67,39734,32581],{"class":77},[67,39736,32584],{"class":73},[67,39738,39739,39741,39743,39746,39748,39750,39752,39754],{"class":69,"line":677},[67,39740,32594],{"class":77},[67,39742,854],{"class":73},[67,39744,39745],{"class":77},"VGG16",[67,39747,1868],{"class":73},[67,39749,32600],{"class":77},[67,39751,32603],{"class":73},[67,39753,32606],{"class":77},[67,39755,3809],{"class":73},[67,39757,39758],{"class":69,"line":683},[67,39759,39760],{"class":2058},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[67,39762,39763],{"class":69,"line":689},[67,39764,39765],{"class":2058},"        # 这里用的是灰度图\n",[67,39767,39768,39770,39773,39775],{"class":69,"line":694},[67,39769,32622],{"class":77},[67,39771,39772],{"class":73},".block1",[67,39774,85],{"class":84},[67,39776,39777],{"class":73},"nn.Sequential(\n",[67,39779,39780,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813],{"class":69,"line":700},[67,39781,39782],{"class":73},"            nn.Conv2d(",[67,39784,32633],{"class":7033},[67,39786,85],{"class":84},[67,39788,2209],{"class":77},[67,39790,2369],{"class":73},[67,39792,32642],{"class":7033},[67,39794,85],{"class":84},[67,39796,2195],{"class":77},[67,39798,2369],{"class":73},[67,39800,32651],{"class":7033},[67,39802,85],{"class":84},[67,39804,2071],{"class":77},[67,39806,2369],{"class":73},[67,39808,32660],{"class":7033},[67,39810,85],{"class":84},[67,39812,2209],{"class":77},[67,39814,39815],{"class":73},"),\n",[67,39817,39818],{"class":69,"line":706},[67,39819,39820],{"class":73},"            nn.ReLU(),\n",[67,39822,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855],{"class":69,"line":712},[67,39824,39782],{"class":73},[67,39826,32633],{"class":7033},[67,39828,85],{"class":84},[67,39830,2195],{"class":77},[67,39832,2369],{"class":73},[67,39834,32642],{"class":7033},[67,39836,85],{"class":84},[67,39838,2195],{"class":77},[67,39840,2369],{"class":73},[67,39842,32651],{"class":7033},[67,39844,85],{"class":84},[67,39846,2071],{"class":77},[67,39848,2369],{"class":73},[67,39850,32660],{"class":7033},[67,39852,85],{"class":84},[67,39854,2209],{"class":77},[67,39856,39815],{"class":73},[67,39858,39859],{"class":69,"line":717},[67,39860,39820],{"class":73},[67,39862,39863,39866,39868,39870,39872,39874,39876,39878,39880,39882,39884,39886,39888],{"class":69,"line":723},[67,39864,39865],{"class":73},"            nn.MaxPool2d(",[67,39867,32651],{"class":7033},[67,39869,85],{"class":84},[67,39871,2077],{"class":77},[67,39873,2369],{"class":73},[67,39875,32706],{"class":7033},[67,39877,85],{"class":84},[67,39879,2077],{"class":77},[67,39881,2369],{"class":73},[67,39883,32660],{"class":7033},[67,39885,85],{"class":84},[67,39887,78],{"class":77},[67,39889,829],{"class":73},[67,39891,39892],{"class":69,"line":729},[67,39893,39894],{"class":73},"        )\n",[67,39896,39897],{"class":69,"line":735},[67,39898,39899],{"class":2058},"        # 第二层\n",[67,39901,39902,39904,39907,39909],{"class":69,"line":741},[67,39903,32622],{"class":77},[67,39905,39906],{"class":73},".block2",[67,39908,85],{"class":84},[67,39910,39777],{"class":73},[67,39912,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945],{"class":69,"line":747},[67,39914,39782],{"class":73},[67,39916,32633],{"class":7033},[67,39918,85],{"class":84},[67,39920,2195],{"class":77},[67,39922,2369],{"class":73},[67,39924,32642],{"class":7033},[67,39926,85],{"class":84},[67,39928,33840],{"class":77},[67,39930,2369],{"class":73},[67,39932,32651],{"class":7033},[67,39934,85],{"class":84},[67,39936,2071],{"class":77},[67,39938,2369],{"class":73},[67,39940,32660],{"class":7033},[67,39942,85],{"class":84},[67,39944,2209],{"class":77},[67,39946,39815],{"class":73},[67,39948,39949],{"class":69,"line":753},[67,39950,39820],{"class":73},[67,39952,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985],{"class":69,"line":758},[67,39954,39782],{"class":73},[67,39956,32633],{"class":7033},[67,39958,85],{"class":84},[67,39960,33840],{"class":77},[67,39962,2369],{"class":73},[67,39964,32642],{"class":7033},[67,39966,85],{"class":84},[67,39968,33840],{"class":77},[67,39970,2369],{"class":73},[67,39972,32651],{"class":7033},[67,39974,85],{"class":84},[67,39976,2071],{"class":77},[67,39978,2369],{"class":73},[67,39980,32660],{"class":7033},[67,39982,85],{"class":84},[67,39984,2209],{"class":77},[67,39986,39815],{"class":73},[67,39988,39989],{"class":69,"line":764},[67,39990,39820],{"class":73},[67,39992,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017],{"class":69,"line":770},[67,39994,39865],{"class":73},[67,39996,32651],{"class":7033},[67,39998,85],{"class":84},[67,40000,2077],{"class":77},[67,40002,2369],{"class":73},[67,40004,32706],{"class":7033},[67,40006,85],{"class":84},[67,40008,2077],{"class":77},[67,40010,2369],{"class":73},[67,40012,32660],{"class":7033},[67,40014,85],{"class":84},[67,40016,78],{"class":77},[67,40018,829],{"class":73},[67,40020,40021],{"class":69,"line":776},[67,40022,39894],{"class":73},[67,40024,40025],{"class":69,"line":782},[67,40026,40027],{"class":2058},"        # 第三层\n",[67,40029,40030,40032,40035,40037],{"class":69,"line":788},[67,40031,32622],{"class":77},[67,40033,40034],{"class":73},".block3",[67,40036,85],{"class":84},[67,40038,39777],{"class":73},[67,40040,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073],{"class":69,"line":793},[67,40042,39782],{"class":73},[67,40044,32633],{"class":7033},[67,40046,85],{"class":84},[67,40048,33840],{"class":77},[67,40050,2369],{"class":73},[67,40052,32642],{"class":7033},[67,40054,85],{"class":84},[67,40056,36639],{"class":77},[67,40058,2369],{"class":73},[67,40060,32651],{"class":7033},[67,40062,85],{"class":84},[67,40064,2071],{"class":77},[67,40066,2369],{"class":73},[67,40068,32660],{"class":7033},[67,40070,85],{"class":84},[67,40072,2209],{"class":77},[67,40074,39815],{"class":73},[67,40076,40077],{"class":69,"line":798},[67,40078,39820],{"class":73},[67,40080,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113],{"class":69,"line":816},[67,40082,39782],{"class":73},[67,40084,32633],{"class":7033},[67,40086,85],{"class":84},[67,40088,36639],{"class":77},[67,40090,2369],{"class":73},[67,40092,32642],{"class":7033},[67,40094,85],{"class":84},[67,40096,36639],{"class":77},[67,40098,2369],{"class":73},[67,40100,32651],{"class":7033},[67,40102,85],{"class":84},[67,40104,2071],{"class":77},[67,40106,2369],{"class":73},[67,40108,32660],{"class":7033},[67,40110,85],{"class":84},[67,40112,2209],{"class":77},[67,40114,39815],{"class":73},[67,40116,40117],{"class":69,"line":832},[67,40118,39820],{"class":73},[67,40120,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153],{"class":69,"line":843},[67,40122,39782],{"class":73},[67,40124,32633],{"class":7033},[67,40126,85],{"class":84},[67,40128,36639],{"class":77},[67,40130,2369],{"class":73},[67,40132,32642],{"class":7033},[67,40134,85],{"class":84},[67,40136,36639],{"class":77},[67,40138,2369],{"class":73},[67,40140,32651],{"class":7033},[67,40142,85],{"class":84},[67,40144,2071],{"class":77},[67,40146,2369],{"class":73},[67,40148,32660],{"class":7033},[67,40150,85],{"class":84},[67,40152,2209],{"class":77},[67,40154,39815],{"class":73},[67,40156,40157],{"class":69,"line":848},[67,40158,39820],{"class":73},[67,40160,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185],{"class":69,"line":863},[67,40162,39865],{"class":73},[67,40164,32651],{"class":7033},[67,40166,85],{"class":84},[67,40168,2077],{"class":77},[67,40170,2369],{"class":73},[67,40172,32706],{"class":7033},[67,40174,85],{"class":84},[67,40176,2077],{"class":77},[67,40178,2369],{"class":73},[67,40180,32660],{"class":7033},[67,40182,85],{"class":84},[67,40184,78],{"class":77},[67,40186,829],{"class":73},[67,40188,40189],{"class":69,"line":876},[67,40190,39894],{"class":73},[67,40192,40193],{"class":69,"line":889},[67,40194,40195],{"class":2058},"        # 第四层\n",[67,40197,40198,40200,40203,40205],{"class":69,"line":894},[67,40199,32622],{"class":77},[67,40201,40202],{"class":73},".block4",[67,40204,85],{"class":84},[67,40206,39777],{"class":73},[67,40208,40209,40211,40213,40215,40217,40219,40221,40223,40226,40228,40230,40232,40234,40236,40238,40240,40242],{"class":69,"line":911},[67,40210,39782],{"class":73},[67,40212,32633],{"class":7033},[67,40214,85],{"class":84},[67,40216,36639],{"class":77},[67,40218,2369],{"class":73},[67,40220,32642],{"class":7033},[67,40222,85],{"class":84},[67,40224,40225],{"class":77},"512",[67,40227,2369],{"class":73},[67,40229,32651],{"class":7033},[67,40231,85],{"class":84},[67,40233,2071],{"class":77},[67,40235,2369],{"class":73},[67,40237,32660],{"class":7033},[67,40239,85],{"class":84},[67,40241,2209],{"class":77},[67,40243,39815],{"class":73},[67,40245,40246],{"class":69,"line":927},[67,40247,39820],{"class":73},[67,40249,40250,40252,40254,40256,40258,40260,40262,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282],{"class":69,"line":932},[67,40251,39782],{"class":73},[67,40253,32633],{"class":7033},[67,40255,85],{"class":84},[67,40257,40225],{"class":77},[67,40259,2369],{"class":73},[67,40261,32642],{"class":7033},[67,40263,85],{"class":84},[67,40265,40225],{"class":77},[67,40267,2369],{"class":73},[67,40269,32651],{"class":7033},[67,40271,85],{"class":84},[67,40273,2071],{"class":77},[67,40275,2369],{"class":73},[67,40277,32660],{"class":7033},[67,40279,85],{"class":84},[67,40281,2209],{"class":77},[67,40283,39815],{"class":73},[67,40285,40286],{"class":69,"line":955},[67,40287,39820],{"class":73},[67,40289,40290,40292,40294,40296,40298,40300,40302,40304,40306,40308,40310,40312,40314,40316,40318,40320,40322],{"class":69,"line":971},[67,40291,39782],{"class":73},[67,40293,32633],{"class":7033},[67,40295,85],{"class":84},[67,40297,40225],{"class":77},[67,40299,2369],{"class":73},[67,40301,32642],{"class":7033},[67,40303,85],{"class":84},[67,40305,40225],{"class":77},[67,40307,2369],{"class":73},[67,40309,32651],{"class":7033},[67,40311,85],{"class":84},[67,40313,2071],{"class":77},[67,40315,2369],{"class":73},[67,40317,32660],{"class":7033},[67,40319,85],{"class":84},[67,40321,2209],{"class":77},[67,40323,39815],{"class":73},[67,40325,40326],{"class":69,"line":1010},[67,40327,39820],{"class":73},[67,40329,40330,40332,40334,40336,40338,40340,40342,40344,40346,40348,40350,40352,40354],{"class":69,"line":1016},[67,40331,39865],{"class":73},[67,40333,32651],{"class":7033},[67,40335,85],{"class":84},[67,40337,2077],{"class":77},[67,40339,2369],{"class":73},[67,40341,32706],{"class":7033},[67,40343,85],{"class":84},[67,40345,2077],{"class":77},[67,40347,2369],{"class":73},[67,40349,32660],{"class":7033},[67,40351,85],{"class":84},[67,40353,78],{"class":77},[67,40355,829],{"class":73},[67,40357,40358],{"class":69,"line":1021},[67,40359,39894],{"class":73},[67,40361,40362],{"class":69,"line":1034},[67,40363,40364],{"class":2058},"        # 第五层\n",[67,40366,40367,40369,40372,40374],{"class":69,"line":1053},[67,40368,32622],{"class":77},[67,40370,40371],{"class":73},".block5",[67,40373,85],{"class":84},[67,40375,39777],{"class":73},[67,40377,40378,40380,40382,40384,40386,40388,40390,40392,40394,40396,40398,40400,40402,40404,40406,40408,40410],{"class":69,"line":1070},[67,40379,39782],{"class":73},[67,40381,32633],{"class":7033},[67,40383,85],{"class":84},[67,40385,40225],{"class":77},[67,40387,2369],{"class":73},[67,40389,32642],{"class":7033},[67,40391,85],{"class":84},[67,40393,40225],{"class":77},[67,40395,2369],{"class":73},[67,40397,32651],{"class":7033},[67,40399,85],{"class":84},[67,40401,2071],{"class":77},[67,40403,2369],{"class":73},[67,40405,32660],{"class":7033},[67,40407,85],{"class":84},[67,40409,2209],{"class":77},[67,40411,39815],{"class":73},[67,40413,40414],{"class":69,"line":1083},[67,40415,39820],{"class":73},[67,40417,40418,40420,40422,40424,40426,40428,40430,40432,40434,40436,40438,40440,40442,40444,40446,40448,40450],{"class":69,"line":1088},[67,40419,39782],{"class":73},[67,40421,32633],{"class":7033},[67,40423,85],{"class":84},[67,40425,40225],{"class":77},[67,40427,2369],{"class":73},[67,40429,32642],{"class":7033},[67,40431,85],{"class":84},[67,40433,40225],{"class":77},[67,40435,2369],{"class":73},[67,40437,32651],{"class":7033},[67,40439,85],{"class":84},[67,40441,2071],{"class":77},[67,40443,2369],{"class":73},[67,40445,32660],{"class":7033},[67,40447,85],{"class":84},[67,40449,2209],{"class":77},[67,40451,39815],{"class":73},[67,40453,40454],{"class":69,"line":1093},[67,40455,39820],{"class":73},[67,40457,40458,40460,40462,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486,40488,40490],{"class":69,"line":1110},[67,40459,39782],{"class":73},[67,40461,32633],{"class":7033},[67,40463,85],{"class":84},[67,40465,40225],{"class":77},[67,40467,2369],{"class":73},[67,40469,32642],{"class":7033},[67,40471,85],{"class":84},[67,40473,40225],{"class":77},[67,40475,2369],{"class":73},[67,40477,32651],{"class":7033},[67,40479,85],{"class":84},[67,40481,2071],{"class":77},[67,40483,2369],{"class":73},[67,40485,32660],{"class":7033},[67,40487,85],{"class":84},[67,40489,2209],{"class":77},[67,40491,39815],{"class":73},[67,40493,40494],{"class":69,"line":11603},[67,40495,39820],{"class":73},[67,40497,40498,40500,40502,40504,40506,40508,40510,40512,40514,40516,40518,40520,40522],{"class":69,"line":11612},[67,40499,39865],{"class":73},[67,40501,32651],{"class":7033},[67,40503,85],{"class":84},[67,40505,2077],{"class":77},[67,40507,2369],{"class":73},[67,40509,32706],{"class":7033},[67,40511,85],{"class":84},[67,40513,2077],{"class":77},[67,40515,2369],{"class":73},[67,40517,32660],{"class":7033},[67,40519,85],{"class":84},[67,40521,78],{"class":77},[67,40523,829],{"class":73},[67,40525,40526],{"class":69,"line":11617},[67,40527,39894],{"class":73},[67,40529,40530],{"class":69,"line":11623},[67,40531,40532],{"class":2058},"        # 全连接层\n",[67,40534,40535,40537,40540,40542],{"class":69,"line":11644},[67,40536,32622],{"class":77},[67,40538,40539],{"class":73},".block6",[67,40541,85],{"class":84},[67,40543,39777],{"class":73},[67,40545,40546],{"class":69,"line":11650},[67,40547,40548],{"class":2058},"            # 平展操作\n",[67,40550,40551],{"class":69,"line":11664},[67,40552,40553],{"class":2058},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[67,40555,40556],{"class":69,"line":11670},[67,40557,40558],{"class":73},"            nn.Flatten(),\n",[67,40560,40561,40564,40566,40568,40570,40572,40574,40576,40578],{"class":69,"line":11697},[67,40562,40563],{"class":73},"            nn.Linear(",[67,40565,2360],{"class":77},[67,40567,965],{"class":84},[67,40569,2360],{"class":77},[67,40571,965],{"class":84},[67,40573,40225],{"class":77},[67,40575,2369],{"class":73},[67,40577,36639],{"class":77},[67,40579,39815],{"class":73},[67,40581,40582],{"class":69,"line":11706},[67,40583,39820],{"class":73},[67,40585,40586,40588,40590,40592,40594],{"class":69,"line":11712},[67,40587,40563],{"class":73},[67,40589,36639],{"class":77},[67,40591,2369],{"class":73},[67,40593,33840],{"class":77},[67,40595,39815],{"class":73},[67,40597,40598],{"class":69,"line":11720},[67,40599,39820],{"class":73},[67,40601,40602,40604,40606,40608,40610],{"class":69,"line":11725},[67,40603,40563],{"class":73},[67,40605,33840],{"class":77},[67,40607,2369],{"class":73},[67,40609,2437],{"class":77},[67,40611,829],{"class":73},[67,40613,40614],{"class":69,"line":18401},[67,40615,39894],{"class":73},[67,40617,40618],{"class":69,"line":18407},[67,40619,631],{"emptyLinePlaceholder":630},[67,40621,40622],{"class":69,"line":18430},[67,40623,40624],{"class":2058},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[67,40626,40627],{"class":69,"line":18436},[67,40628,40629],{"class":2058},"        # 循环遍历模型\n",[67,40631,40632,40634,40637,40639,40642],{"class":69,"line":18459},[67,40633,5225],{"class":84},[67,40635,40636],{"class":73}," m ",[67,40638,941],{"class":84},[67,40640,40641],{"class":77}," self",[67,40643,40644],{"class":73},".modules():\n",[67,40646,40647],{"class":69,"line":18473},[67,40648,40649],{"class":2058},"            # print(m)\n",[67,40651,40652,40654,40657],{"class":69,"line":18493},[67,40653,6461],{"class":84},[67,40655,40656],{"class":77}," isinstance",[67,40658,40659],{"class":73},"(m,nn.Conv2d):\n",[67,40661,40662],{"class":69,"line":18499},[67,40663,40664],{"class":2058},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[67,40666,40667,40670,40673,40675,40678],{"class":69,"line":18510},[67,40668,40669],{"class":73},"                nn.init.kaiming_normal_(m.weight,",[67,40671,40672],{"class":7033},"nonlinearity",[67,40674,85],{"class":84},[67,40676,40677],{"class":114},"'relu'",[67,40679,829],{"class":73},[67,40681,40682],{"class":69,"line":18533},[67,40683,40684],{"class":2058},"                # 判断b参数是否存在\n",[67,40686,40687,40690,40693,40696,40699,40702],{"class":69,"line":18555},[67,40688,40689],{"class":84},"                if",[67,40691,40692],{"class":73}," m.bias ",[67,40694,40695],{"class":84},"is",[67,40697,40698],{"class":84}," not",[67,40700,40701],{"class":77}," None",[67,40703,813],{"class":73},[67,40705,40706],{"class":69,"line":18560},[67,40707,40708],{"class":2058},"                    # 如果参数不存在的化初始化b=0\n",[67,40710,40711,40714,40716],{"class":69,"line":18566},[67,40712,40713],{"class":73},"                    nn.init.constant_(m.bias,",[67,40715,78],{"class":77},[67,40717,829],{"class":73},[67,40719,40720],{"class":69,"line":18580},[67,40721,40722],{"class":2058},"            # 全连接层初始化\n",[67,40724,40725,40728,40730],{"class":69,"line":18593},[67,40726,40727],{"class":84},"            elif",[67,40729,40656],{"class":77},[67,40731,40732],{"class":73},"(m,nn.Linear):\n",[67,40734,40735],{"class":69,"line":18598},[67,40736,40737],{"class":2058},"                # 这个初始化方法是利用的是正太分布的方式\n",[67,40739,40740],{"class":69,"line":18612},[67,40741,40742],{"class":2058},"                # 均值为0，方差为0.01\n",[67,40744,40745,40748,40750,40752,40755],{"class":69,"line":18617},[67,40746,40747],{"class":73},"                nn.init.normal_(m.weight,",[67,40749,78],{"class":77},[67,40751,2369],{"class":73},[67,40753,40754],{"class":77},"0.01",[67,40756,829],{"class":73},[67,40758,40759],{"class":69,"line":18623},[67,40760,40761],{"class":2058},"                # 初始化b参数\n",[67,40763,40764,40766,40768,40770,40772,40774],{"class":69,"line":18628},[67,40765,40689],{"class":84},[67,40767,40692],{"class":73},[67,40769,40695],{"class":84},[67,40771,40698],{"class":84},[67,40773,40701],{"class":77},[67,40775,813],{"class":73},[67,40777,40778,40780,40782],{"class":69,"line":18642},[67,40779,40713],{"class":73},[67,40781,78],{"class":77},[67,40783,829],{"class":73},[67,40785,40786],{"class":69,"line":18647},[67,40787,631],{"emptyLinePlaceholder":630},[67,40789,40790],{"class":69,"line":18652},[67,40791,36934],{"class":2058},[67,40793,40794,40796,40798],{"class":69,"line":18666},[67,40795,32578],{"class":84},[67,40797,32870],{"class":110},[67,40799,32873],{"class":73},[67,40801,40802,40804,40806,40808],{"class":69,"line":18678},[67,40803,32878],{"class":73},[67,40805,85],{"class":84},[67,40807,32600],{"class":77},[67,40809,40810],{"class":73},".block1(x)\n",[67,40812,40813,40815,40817,40819],{"class":69,"line":18683},[67,40814,32878],{"class":73},[67,40816,85],{"class":84},[67,40818,32600],{"class":77},[67,40820,40821],{"class":73},".block2(x)\n",[67,40823,40824,40826,40828,40830],{"class":69,"line":18696},[67,40825,32878],{"class":73},[67,40827,85],{"class":84},[67,40829,32600],{"class":77},[67,40831,40832],{"class":73},".block3(x)\n",[67,40834,40835,40837,40839,40841],{"class":69,"line":18701},[67,40836,32878],{"class":73},[67,40838,85],{"class":84},[67,40840,32600],{"class":77},[67,40842,40843],{"class":73},".block4(x)\n",[67,40845,40846,40848,40850,40852],{"class":69,"line":18706},[67,40847,32878],{"class":73},[67,40849,85],{"class":84},[67,40851,32600],{"class":77},[67,40853,40854],{"class":73},".block5(x)\n",[67,40856,40857,40859,40861,40863],{"class":69,"line":18711},[67,40858,32878],{"class":73},[67,40860,85],{"class":84},[67,40862,32600],{"class":77},[67,40864,40865],{"class":73},".block6(x)\n",[67,40867,40868,40870],{"class":69,"line":18724},[67,40869,16550],{"class":84},[67,40871,32986],{"class":73},[67,40873,40874],{"class":69,"line":18729},[67,40875,631],{"emptyLinePlaceholder":630},[67,40877,40878],{"class":69,"line":34402},[67,40879,40880],{"class":2058},"# 验证模型\n",[67,40882,40883,40885,40887,40889,40892],{"class":69,"line":34408},[67,40884,1096],{"class":84},[67,40886,1099],{"class":77},[67,40888,4774],{"class":84},[67,40890,40891],{"class":114},"'__main__'",[67,40893,813],{"class":73},[67,40895,40896,40898,40900,40902,40904,40906,40908,40910,40912],{"class":69,"line":34414},[67,40897,33013],{"class":73},[67,40899,85],{"class":84},[67,40901,32230],{"class":73},[67,40903,33020],{"class":114},[67,40905,3547],{"class":84},[67,40907,33025],{"class":73},[67,40909,3544],{"class":84},[67,40911,32255],{"class":114},[67,40913,829],{"class":73},[67,40915,40916,40918],{"class":69,"line":34420},[67,40917,851],{"class":77},[67,40919,32264],{"class":73},[67,40921,40922,40924,40926],{"class":69,"line":34426},[67,40923,33065],{"class":73},[67,40925,85],{"class":84},[67,40927,40928],{"class":73},"VGG16().to(device)\n",[67,40930,40931,40933,40935,40937,40939,40941,40943,40945],{"class":69,"line":34437},[67,40932,851],{"class":77},[67,40934,33077],{"class":73},[67,40936,2209],{"class":77},[67,40938,2369],{"class":73},[67,40940,33273],{"class":77},[67,40942,2369],{"class":73},[67,40944,33273],{"class":77},[67,40946,33090],{"class":73},[26,40948,40949],{"start":191},[29,40950,40951],{},"训练代码",[19,40953,40954],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40956,40957],{},"解决方式:",[19,40959,40960],{},"①权重初始化",[58,40962,40964],{"className":60,"code":40963,"language":62,"meta":63,"style":63},"# 权重初始化,保证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",[32,40965,40966,40971,40976,40988,40993,41001,41006,41019,41024,41038,41043,41052,41057,41066,41071,41076,41089,41094,41108],{"__ignoreMap":63},[67,40967,40968],{"class":69,"line":70},[67,40969,40970],{"class":2058},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[67,40972,40973],{"class":69,"line":191},[67,40974,40975],{"class":2058},"# 循环遍历模型\n",[67,40977,40978,40980,40982,40984,40986],{"class":69,"line":202},[67,40979,1512],{"class":84},[67,40981,40636],{"class":73},[67,40983,941],{"class":84},[67,40985,40641],{"class":77},[67,40987,40644],{"class":73},[67,40989,40990],{"class":69,"line":641},[67,40991,40992],{"class":2058},"    # print(m)\n",[67,40994,40995,40997,40999],{"class":69,"line":655},[67,40996,897],{"class":84},[67,40998,40656],{"class":77},[67,41000,40659],{"class":73},[67,41002,41003],{"class":69,"line":660},[67,41004,41005],{"class":2058},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[67,41007,41008,41011,41013,41015,41017],{"class":69,"line":665},[67,41009,41010],{"class":73},"        nn.init.kaiming_normal_(m.weight,",[67,41012,40672],{"class":7033},[67,41014,85],{"class":84},[67,41016,40677],{"class":114},[67,41018,829],{"class":73},[67,41020,41021],{"class":69,"line":677},[67,41022,41023],{"class":2058},"        # 判断b参数是否存在\n",[67,41025,41026,41028,41030,41032,41034,41036],{"class":69,"line":683},[67,41027,4329],{"class":84},[67,41029,40692],{"class":73},[67,41031,40695],{"class":84},[67,41033,40698],{"class":84},[67,41035,40701],{"class":77},[67,41037,813],{"class":73},[67,41039,41040],{"class":69,"line":689},[67,41041,41042],{"class":2058},"            # 如果参数不存在的化初始化b=0\n",[67,41044,41045,41048,41050],{"class":69,"line":694},[67,41046,41047],{"class":73},"            nn.init.constant_(m.bias,",[67,41049,78],{"class":77},[67,41051,829],{"class":73},[67,41053,41054],{"class":69,"line":700},[67,41055,41056],{"class":2058},"    # 全连接层初始化\n",[67,41058,41059,41062,41064],{"class":69,"line":706},[67,41060,41061],{"class":84},"    elif",[67,41063,40656],{"class":77},[67,41065,40732],{"class":73},[67,41067,41068],{"class":69,"line":712},[67,41069,41070],{"class":2058},"        # 这个初始化方法是利用的是正太分布的方式\n",[67,41072,41073],{"class":69,"line":717},[67,41074,41075],{"class":2058},"        # 均值为0，方差为0.01\n",[67,41077,41078,41081,41083,41085,41087],{"class":69,"line":723},[67,41079,41080],{"class":73},"        nn.init.normal_(m.weight,",[67,41082,78],{"class":77},[67,41084,2369],{"class":73},[67,41086,40754],{"class":77},[67,41088,829],{"class":73},[67,41090,41091],{"class":69,"line":729},[67,41092,41093],{"class":2058},"        # 初始化b参数\n",[67,41095,41096,41098,41100,41102,41104,41106],{"class":69,"line":735},[67,41097,4329],{"class":84},[67,41099,40692],{"class":73},[67,41101,40695],{"class":84},[67,41103,40698],{"class":84},[67,41105,40701],{"class":77},[67,41107,813],{"class":73},[67,41109,41110,41112,41114],{"class":69,"line":741},[67,41111,41047],{"class":73},[67,41113,78],{"class":77},[67,41115,829],{"class":73},[19,41117,41118],{},"②尽可能地增加批次",[19,41120,41121],{},"训练完整代码：",[58,41123,41124],{"className":60,"code":39667,"language":62,"meta":63,"style":63},[32,41125,41126,41132,41142,41152,41162,41166,41182,41190,41208,41212,41216,41226,41262,41266,41302,41306,41334,41338,41342,41352,41388,41392,41428,41432,41460,41464,41468,41478,41514,41518,41554,41558,41594,41598,41626,41630,41634,41644,41680,41684,41720,41724,41760,41764,41792,41796,41800,41810,41846,41850,41886,41890,41926,41930,41958,41962,41966,41976,41980,41984,41988,42008,42012,42024,42028,42040,42044,42048,42052,42056,42068,42072,42080,42084,42096,42100,42114,42118,42126,42130,42138,42142,42146,42158,42162,42176,42184,42188,42192,42200,42210,42220,42230,42240,42250,42260,42266,42270,42274,42286,42306,42312,42320],{"__ignoreMap":63},[67,41127,41128,41130],{"class":69,"line":70},[67,41129,622],{"class":84},[67,41131,32175],{"class":73},[67,41133,41134,41136,41138,41140],{"class":69,"line":191},[67,41135,32515],{"class":84},[67,41137,39682],{"class":73},[67,41139,622],{"class":84},[67,41141,39687],{"class":73},[67,41143,41144,41146,41148,41150],{"class":69,"line":202},[67,41145,32515],{"class":84},[67,41147,32518],{"class":73},[67,41149,622],{"class":84},[67,41151,32523],{"class":73},[67,41153,41154,41156,41158,41160],{"class":69,"line":641},[67,41155,32515],{"class":84},[67,41157,32535],{"class":73},[67,41159,622],{"class":84},[67,41161,32540],{"class":73},[67,41163,41164],{"class":69,"line":655},[67,41165,631],{"emptyLinePlaceholder":630},[67,41167,41168,41170,41172,41174,41176,41178,41180],{"class":69,"line":660},[67,41169,16492],{"class":84},[67,41171,39718],{"class":110},[67,41173,854],{"class":73},[67,41175,32556],{"class":110},[67,41177,2547],{"class":73},[67,41179,32561],{"class":110},[67,41181,952],{"class":73},[67,41183,41184,41186,41188],{"class":69,"line":665},[67,41185,32578],{"class":84},[67,41187,32581],{"class":77},[67,41189,32584],{"class":73},[67,41191,41192,41194,41196,41198,41200,41202,41204,41206],{"class":69,"line":677},[67,41193,32594],{"class":77},[67,41195,854],{"class":73},[67,41197,39745],{"class":77},[67,41199,1868],{"class":73},[67,41201,32600],{"class":77},[67,41203,32603],{"class":73},[67,41205,32606],{"class":77},[67,41207,3809],{"class":73},[67,41209,41210],{"class":69,"line":683},[67,41211,39760],{"class":2058},[67,41213,41214],{"class":69,"line":689},[67,41215,39765],{"class":2058},[67,41217,41218,41220,41222,41224],{"class":69,"line":694},[67,41219,32622],{"class":77},[67,41221,39772],{"class":73},[67,41223,85],{"class":84},[67,41225,39777],{"class":73},[67,41227,41228,41230,41232,41234,41236,41238,41240,41242,41244,41246,41248,41250,41252,41254,41256,41258,41260],{"class":69,"line":700},[67,41229,39782],{"class":73},[67,41231,32633],{"class":7033},[67,41233,85],{"class":84},[67,41235,2209],{"class":77},[67,41237,2369],{"class":73},[67,41239,32642],{"class":7033},[67,41241,85],{"class":84},[67,41243,2195],{"class":77},[67,41245,2369],{"class":73},[67,41247,32651],{"class":7033},[67,41249,85],{"class":84},[67,41251,2071],{"class":77},[67,41253,2369],{"class":73},[67,41255,32660],{"class":7033},[67,41257,85],{"class":84},[67,41259,2209],{"class":77},[67,41261,39815],{"class":73},[67,41263,41264],{"class":69,"line":706},[67,41265,39820],{"class":73},[67,41267,41268,41270,41272,41274,41276,41278,41280,41282,41284,41286,41288,41290,41292,41294,41296,41298,41300],{"class":69,"line":712},[67,41269,39782],{"class":73},[67,41271,32633],{"class":7033},[67,41273,85],{"class":84},[67,41275,2195],{"class":77},[67,41277,2369],{"class":73},[67,41279,32642],{"class":7033},[67,41281,85],{"class":84},[67,41283,2195],{"class":77},[67,41285,2369],{"class":73},[67,41287,32651],{"class":7033},[67,41289,85],{"class":84},[67,41291,2071],{"class":77},[67,41293,2369],{"class":73},[67,41295,32660],{"class":7033},[67,41297,85],{"class":84},[67,41299,2209],{"class":77},[67,41301,39815],{"class":73},[67,41303,41304],{"class":69,"line":717},[67,41305,39820],{"class":73},[67,41307,41308,41310,41312,41314,41316,41318,41320,41322,41324,41326,41328,41330,41332],{"class":69,"line":723},[67,41309,39865],{"class":73},[67,41311,32651],{"class":7033},[67,41313,85],{"class":84},[67,41315,2077],{"class":77},[67,41317,2369],{"class":73},[67,41319,32706],{"class":7033},[67,41321,85],{"class":84},[67,41323,2077],{"class":77},[67,41325,2369],{"class":73},[67,41327,32660],{"class":7033},[67,41329,85],{"class":84},[67,41331,78],{"class":77},[67,41333,829],{"class":73},[67,41335,41336],{"class":69,"line":729},[67,41337,39894],{"class":73},[67,41339,41340],{"class":69,"line":735},[67,41341,39899],{"class":2058},[67,41343,41344,41346,41348,41350],{"class":69,"line":741},[67,41345,32622],{"class":77},[67,41347,39906],{"class":73},[67,41349,85],{"class":84},[67,41351,39777],{"class":73},[67,41353,41354,41356,41358,41360,41362,41364,41366,41368,41370,41372,41374,41376,41378,41380,41382,41384,41386],{"class":69,"line":747},[67,41355,39782],{"class":73},[67,41357,32633],{"class":7033},[67,41359,85],{"class":84},[67,41361,2195],{"class":77},[67,41363,2369],{"class":73},[67,41365,32642],{"class":7033},[67,41367,85],{"class":84},[67,41369,33840],{"class":77},[67,41371,2369],{"class":73},[67,41373,32651],{"class":7033},[67,41375,85],{"class":84},[67,41377,2071],{"class":77},[67,41379,2369],{"class":73},[67,41381,32660],{"class":7033},[67,41383,85],{"class":84},[67,41385,2209],{"class":77},[67,41387,39815],{"class":73},[67,41389,41390],{"class":69,"line":753},[67,41391,39820],{"class":73},[67,41393,41394,41396,41398,41400,41402,41404,41406,41408,41410,41412,41414,41416,41418,41420,41422,41424,41426],{"class":69,"line":758},[67,41395,39782],{"class":73},[67,41397,32633],{"class":7033},[67,41399,85],{"class":84},[67,41401,33840],{"class":77},[67,41403,2369],{"class":73},[67,41405,32642],{"class":7033},[67,41407,85],{"class":84},[67,41409,33840],{"class":77},[67,41411,2369],{"class":73},[67,41413,32651],{"class":7033},[67,41415,85],{"class":84},[67,41417,2071],{"class":77},[67,41419,2369],{"class":73},[67,41421,32660],{"class":7033},[67,41423,85],{"class":84},[67,41425,2209],{"class":77},[67,41427,39815],{"class":73},[67,41429,41430],{"class":69,"line":764},[67,41431,39820],{"class":73},[67,41433,41434,41436,41438,41440,41442,41444,41446,41448,41450,41452,41454,41456,41458],{"class":69,"line":770},[67,41435,39865],{"class":73},[67,41437,32651],{"class":7033},[67,41439,85],{"class":84},[67,41441,2077],{"class":77},[67,41443,2369],{"class":73},[67,41445,32706],{"class":7033},[67,41447,85],{"class":84},[67,41449,2077],{"class":77},[67,41451,2369],{"class":73},[67,41453,32660],{"class":7033},[67,41455,85],{"class":84},[67,41457,78],{"class":77},[67,41459,829],{"class":73},[67,41461,41462],{"class":69,"line":776},[67,41463,39894],{"class":73},[67,41465,41466],{"class":69,"line":782},[67,41467,40027],{"class":2058},[67,41469,41470,41472,41474,41476],{"class":69,"line":788},[67,41471,32622],{"class":77},[67,41473,40034],{"class":73},[67,41475,85],{"class":84},[67,41477,39777],{"class":73},[67,41479,41480,41482,41484,41486,41488,41490,41492,41494,41496,41498,41500,41502,41504,41506,41508,41510,41512],{"class":69,"line":793},[67,41481,39782],{"class":73},[67,41483,32633],{"class":7033},[67,41485,85],{"class":84},[67,41487,33840],{"class":77},[67,41489,2369],{"class":73},[67,41491,32642],{"class":7033},[67,41493,85],{"class":84},[67,41495,36639],{"class":77},[67,41497,2369],{"class":73},[67,41499,32651],{"class":7033},[67,41501,85],{"class":84},[67,41503,2071],{"class":77},[67,41505,2369],{"class":73},[67,41507,32660],{"class":7033},[67,41509,85],{"class":84},[67,41511,2209],{"class":77},[67,41513,39815],{"class":73},[67,41515,41516],{"class":69,"line":798},[67,41517,39820],{"class":73},[67,41519,41520,41522,41524,41526,41528,41530,41532,41534,41536,41538,41540,41542,41544,41546,41548,41550,41552],{"class":69,"line":816},[67,41521,39782],{"class":73},[67,41523,32633],{"class":7033},[67,41525,85],{"class":84},[67,41527,36639],{"class":77},[67,41529,2369],{"class":73},[67,41531,32642],{"class":7033},[67,41533,85],{"class":84},[67,41535,36639],{"class":77},[67,41537,2369],{"class":73},[67,41539,32651],{"class":7033},[67,41541,85],{"class":84},[67,41543,2071],{"class":77},[67,41545,2369],{"class":73},[67,41547,32660],{"class":7033},[67,41549,85],{"class":84},[67,41551,2209],{"class":77},[67,41553,39815],{"class":73},[67,41555,41556],{"class":69,"line":832},[67,41557,39820],{"class":73},[67,41559,41560,41562,41564,41566,41568,41570,41572,41574,41576,41578,41580,41582,41584,41586,41588,41590,41592],{"class":69,"line":843},[67,41561,39782],{"class":73},[67,41563,32633],{"class":7033},[67,41565,85],{"class":84},[67,41567,36639],{"class":77},[67,41569,2369],{"class":73},[67,41571,32642],{"class":7033},[67,41573,85],{"class":84},[67,41575,36639],{"class":77},[67,41577,2369],{"class":73},[67,41579,32651],{"class":7033},[67,41581,85],{"class":84},[67,41583,2071],{"class":77},[67,41585,2369],{"class":73},[67,41587,32660],{"class":7033},[67,41589,85],{"class":84},[67,41591,2209],{"class":77},[67,41593,39815],{"class":73},[67,41595,41596],{"class":69,"line":848},[67,41597,39820],{"class":73},[67,41599,41600,41602,41604,41606,41608,41610,41612,41614,41616,41618,41620,41622,41624],{"class":69,"line":863},[67,41601,39865],{"class":73},[67,41603,32651],{"class":7033},[67,41605,85],{"class":84},[67,41607,2077],{"class":77},[67,41609,2369],{"class":73},[67,41611,32706],{"class":7033},[67,41613,85],{"class":84},[67,41615,2077],{"class":77},[67,41617,2369],{"class":73},[67,41619,32660],{"class":7033},[67,41621,85],{"class":84},[67,41623,78],{"class":77},[67,41625,829],{"class":73},[67,41627,41628],{"class":69,"line":876},[67,41629,39894],{"class":73},[67,41631,41632],{"class":69,"line":889},[67,41633,40195],{"class":2058},[67,41635,41636,41638,41640,41642],{"class":69,"line":894},[67,41637,32622],{"class":77},[67,41639,40202],{"class":73},[67,41641,85],{"class":84},[67,41643,39777],{"class":73},[67,41645,41646,41648,41650,41652,41654,41656,41658,41660,41662,41664,41666,41668,41670,41672,41674,41676,41678],{"class":69,"line":911},[67,41647,39782],{"class":73},[67,41649,32633],{"class":7033},[67,41651,85],{"class":84},[67,41653,36639],{"class":77},[67,41655,2369],{"class":73},[67,41657,32642],{"class":7033},[67,41659,85],{"class":84},[67,41661,40225],{"class":77},[67,41663,2369],{"class":73},[67,41665,32651],{"class":7033},[67,41667,85],{"class":84},[67,41669,2071],{"class":77},[67,41671,2369],{"class":73},[67,41673,32660],{"class":7033},[67,41675,85],{"class":84},[67,41677,2209],{"class":77},[67,41679,39815],{"class":73},[67,41681,41682],{"class":69,"line":927},[67,41683,39820],{"class":73},[67,41685,41686,41688,41690,41692,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718],{"class":69,"line":932},[67,41687,39782],{"class":73},[67,41689,32633],{"class":7033},[67,41691,85],{"class":84},[67,41693,40225],{"class":77},[67,41695,2369],{"class":73},[67,41697,32642],{"class":7033},[67,41699,85],{"class":84},[67,41701,40225],{"class":77},[67,41703,2369],{"class":73},[67,41705,32651],{"class":7033},[67,41707,85],{"class":84},[67,41709,2071],{"class":77},[67,41711,2369],{"class":73},[67,41713,32660],{"class":7033},[67,41715,85],{"class":84},[67,41717,2209],{"class":77},[67,41719,39815],{"class":73},[67,41721,41722],{"class":69,"line":955},[67,41723,39820],{"class":73},[67,41725,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744,41746,41748,41750,41752,41754,41756,41758],{"class":69,"line":971},[67,41727,39782],{"class":73},[67,41729,32633],{"class":7033},[67,41731,85],{"class":84},[67,41733,40225],{"class":77},[67,41735,2369],{"class":73},[67,41737,32642],{"class":7033},[67,41739,85],{"class":84},[67,41741,40225],{"class":77},[67,41743,2369],{"class":73},[67,41745,32651],{"class":7033},[67,41747,85],{"class":84},[67,41749,2071],{"class":77},[67,41751,2369],{"class":73},[67,41753,32660],{"class":7033},[67,41755,85],{"class":84},[67,41757,2209],{"class":77},[67,41759,39815],{"class":73},[67,41761,41762],{"class":69,"line":1010},[67,41763,39820],{"class":73},[67,41765,41766,41768,41770,41772,41774,41776,41778,41780,41782,41784,41786,41788,41790],{"class":69,"line":1016},[67,41767,39865],{"class":73},[67,41769,32651],{"class":7033},[67,41771,85],{"class":84},[67,41773,2077],{"class":77},[67,41775,2369],{"class":73},[67,41777,32706],{"class":7033},[67,41779,85],{"class":84},[67,41781,2077],{"class":77},[67,41783,2369],{"class":73},[67,41785,32660],{"class":7033},[67,41787,85],{"class":84},[67,41789,78],{"class":77},[67,41791,829],{"class":73},[67,41793,41794],{"class":69,"line":1021},[67,41795,39894],{"class":73},[67,41797,41798],{"class":69,"line":1034},[67,41799,40364],{"class":2058},[67,41801,41802,41804,41806,41808],{"class":69,"line":1053},[67,41803,32622],{"class":77},[67,41805,40371],{"class":73},[67,41807,85],{"class":84},[67,41809,39777],{"class":73},[67,41811,41812,41814,41816,41818,41820,41822,41824,41826,41828,41830,41832,41834,41836,41838,41840,41842,41844],{"class":69,"line":1070},[67,41813,39782],{"class":73},[67,41815,32633],{"class":7033},[67,41817,85],{"class":84},[67,41819,40225],{"class":77},[67,41821,2369],{"class":73},[67,41823,32642],{"class":7033},[67,41825,85],{"class":84},[67,41827,40225],{"class":77},[67,41829,2369],{"class":73},[67,41831,32651],{"class":7033},[67,41833,85],{"class":84},[67,41835,2071],{"class":77},[67,41837,2369],{"class":73},[67,41839,32660],{"class":7033},[67,41841,85],{"class":84},[67,41843,2209],{"class":77},[67,41845,39815],{"class":73},[67,41847,41848],{"class":69,"line":1083},[67,41849,39820],{"class":73},[67,41851,41852,41854,41856,41858,41860,41862,41864,41866,41868,41870,41872,41874,41876,41878,41880,41882,41884],{"class":69,"line":1088},[67,41853,39782],{"class":73},[67,41855,32633],{"class":7033},[67,41857,85],{"class":84},[67,41859,40225],{"class":77},[67,41861,2369],{"class":73},[67,41863,32642],{"class":7033},[67,41865,85],{"class":84},[67,41867,40225],{"class":77},[67,41869,2369],{"class":73},[67,41871,32651],{"class":7033},[67,41873,85],{"class":84},[67,41875,2071],{"class":77},[67,41877,2369],{"class":73},[67,41879,32660],{"class":7033},[67,41881,85],{"class":84},[67,41883,2209],{"class":77},[67,41885,39815],{"class":73},[67,41887,41888],{"class":69,"line":1093},[67,41889,39820],{"class":73},[67,41891,41892,41894,41896,41898,41900,41902,41904,41906,41908,41910,41912,41914,41916,41918,41920,41922,41924],{"class":69,"line":1110},[67,41893,39782],{"class":73},[67,41895,32633],{"class":7033},[67,41897,85],{"class":84},[67,41899,40225],{"class":77},[67,41901,2369],{"class":73},[67,41903,32642],{"class":7033},[67,41905,85],{"class":84},[67,41907,40225],{"class":77},[67,41909,2369],{"class":73},[67,41911,32651],{"class":7033},[67,41913,85],{"class":84},[67,41915,2071],{"class":77},[67,41917,2369],{"class":73},[67,41919,32660],{"class":7033},[67,41921,85],{"class":84},[67,41923,2209],{"class":77},[67,41925,39815],{"class":73},[67,41927,41928],{"class":69,"line":11603},[67,41929,39820],{"class":73},[67,41931,41932,41934,41936,41938,41940,41942,41944,41946,41948,41950,41952,41954,41956],{"class":69,"line":11612},[67,41933,39865],{"class":73},[67,41935,32651],{"class":7033},[67,41937,85],{"class":84},[67,41939,2077],{"class":77},[67,41941,2369],{"class":73},[67,41943,32706],{"class":7033},[67,41945,85],{"class":84},[67,41947,2077],{"class":77},[67,41949,2369],{"class":73},[67,41951,32660],{"class":7033},[67,41953,85],{"class":84},[67,41955,78],{"class":77},[67,41957,829],{"class":73},[67,41959,41960],{"class":69,"line":11617},[67,41961,39894],{"class":73},[67,41963,41964],{"class":69,"line":11623},[67,41965,40532],{"class":2058},[67,41967,41968,41970,41972,41974],{"class":69,"line":11644},[67,41969,32622],{"class":77},[67,41971,40539],{"class":73},[67,41973,85],{"class":84},[67,41975,39777],{"class":73},[67,41977,41978],{"class":69,"line":11650},[67,41979,40548],{"class":2058},[67,41981,41982],{"class":69,"line":11664},[67,41983,40553],{"class":2058},[67,41985,41986],{"class":69,"line":11670},[67,41987,40558],{"class":73},[67,41989,41990,41992,41994,41996,41998,42000,42002,42004,42006],{"class":69,"line":11697},[67,41991,40563],{"class":73},[67,41993,2360],{"class":77},[67,41995,965],{"class":84},[67,41997,2360],{"class":77},[67,41999,965],{"class":84},[67,42001,40225],{"class":77},[67,42003,2369],{"class":73},[67,42005,36639],{"class":77},[67,42007,39815],{"class":73},[67,42009,42010],{"class":69,"line":11706},[67,42011,39820],{"class":73},[67,42013,42014,42016,42018,42020,42022],{"class":69,"line":11712},[67,42015,40563],{"class":73},[67,42017,36639],{"class":77},[67,42019,2369],{"class":73},[67,42021,33840],{"class":77},[67,42023,39815],{"class":73},[67,42025,42026],{"class":69,"line":11720},[67,42027,39820],{"class":73},[67,42029,42030,42032,42034,42036,42038],{"class":69,"line":11725},[67,42031,40563],{"class":73},[67,42033,33840],{"class":77},[67,42035,2369],{"class":73},[67,42037,2437],{"class":77},[67,42039,829],{"class":73},[67,42041,42042],{"class":69,"line":18401},[67,42043,39894],{"class":73},[67,42045,42046],{"class":69,"line":18407},[67,42047,631],{"emptyLinePlaceholder":630},[67,42049,42050],{"class":69,"line":18430},[67,42051,40624],{"class":2058},[67,42053,42054],{"class":69,"line":18436},[67,42055,40629],{"class":2058},[67,42057,42058,42060,42062,42064,42066],{"class":69,"line":18459},[67,42059,5225],{"class":84},[67,42061,40636],{"class":73},[67,42063,941],{"class":84},[67,42065,40641],{"class":77},[67,42067,40644],{"class":73},[67,42069,42070],{"class":69,"line":18473},[67,42071,40649],{"class":2058},[67,42073,42074,42076,42078],{"class":69,"line":18493},[67,42075,6461],{"class":84},[67,42077,40656],{"class":77},[67,42079,40659],{"class":73},[67,42081,42082],{"class":69,"line":18499},[67,42083,40664],{"class":2058},[67,42085,42086,42088,42090,42092,42094],{"class":69,"line":18510},[67,42087,40669],{"class":73},[67,42089,40672],{"class":7033},[67,42091,85],{"class":84},[67,42093,40677],{"class":114},[67,42095,829],{"class":73},[67,42097,42098],{"class":69,"line":18533},[67,42099,40684],{"class":2058},[67,42101,42102,42104,42106,42108,42110,42112],{"class":69,"line":18555},[67,42103,40689],{"class":84},[67,42105,40692],{"class":73},[67,42107,40695],{"class":84},[67,42109,40698],{"class":84},[67,42111,40701],{"class":77},[67,42113,813],{"class":73},[67,42115,42116],{"class":69,"line":18560},[67,42117,40708],{"class":2058},[67,42119,42120,42122,42124],{"class":69,"line":18566},[67,42121,40713],{"class":73},[67,42123,78],{"class":77},[67,42125,829],{"class":73},[67,42127,42128],{"class":69,"line":18580},[67,42129,40722],{"class":2058},[67,42131,42132,42134,42136],{"class":69,"line":18593},[67,42133,40727],{"class":84},[67,42135,40656],{"class":77},[67,42137,40732],{"class":73},[67,42139,42140],{"class":69,"line":18598},[67,42141,40737],{"class":2058},[67,42143,42144],{"class":69,"line":18612},[67,42145,40742],{"class":2058},[67,42147,42148,42150,42152,42154,42156],{"class":69,"line":18617},[67,42149,40747],{"class":73},[67,42151,78],{"class":77},[67,42153,2369],{"class":73},[67,42155,40754],{"class":77},[67,42157,829],{"class":73},[67,42159,42160],{"class":69,"line":18623},[67,42161,40761],{"class":2058},[67,42163,42164,42166,42168,42170,42172,42174],{"class":69,"line":18628},[67,42165,40689],{"class":84},[67,42167,40692],{"class":73},[67,42169,40695],{"class":84},[67,42171,40698],{"class":84},[67,42173,40701],{"class":77},[67,42175,813],{"class":73},[67,42177,42178,42180,42182],{"class":69,"line":18642},[67,42179,40713],{"class":73},[67,42181,78],{"class":77},[67,42183,829],{"class":73},[67,42185,42186],{"class":69,"line":18647},[67,42187,631],{"emptyLinePlaceholder":630},[67,42189,42190],{"class":69,"line":18652},[67,42191,36934],{"class":2058},[67,42193,42194,42196,42198],{"class":69,"line":18666},[67,42195,32578],{"class":84},[67,42197,32870],{"class":110},[67,42199,32873],{"class":73},[67,42201,42202,42204,42206,42208],{"class":69,"line":18678},[67,42203,32878],{"class":73},[67,42205,85],{"class":84},[67,42207,32600],{"class":77},[67,42209,40810],{"class":73},[67,42211,42212,42214,42216,42218],{"class":69,"line":18683},[67,42213,32878],{"class":73},[67,42215,85],{"class":84},[67,42217,32600],{"class":77},[67,42219,40821],{"class":73},[67,42221,42222,42224,42226,42228],{"class":69,"line":18696},[67,42223,32878],{"class":73},[67,42225,85],{"class":84},[67,42227,32600],{"class":77},[67,42229,40832],{"class":73},[67,42231,42232,42234,42236,42238],{"class":69,"line":18701},[67,42233,32878],{"class":73},[67,42235,85],{"class":84},[67,42237,32600],{"class":77},[67,42239,40843],{"class":73},[67,42241,42242,42244,42246,42248],{"class":69,"line":18706},[67,42243,32878],{"class":73},[67,42245,85],{"class":84},[67,42247,32600],{"class":77},[67,42249,40854],{"class":73},[67,42251,42252,42254,42256,42258],{"class":69,"line":18711},[67,42253,32878],{"class":73},[67,42255,85],{"class":84},[67,42257,32600],{"class":77},[67,42259,40865],{"class":73},[67,42261,42262,42264],{"class":69,"line":18724},[67,42263,16550],{"class":84},[67,42265,32986],{"class":73},[67,42267,42268],{"class":69,"line":18729},[67,42269,631],{"emptyLinePlaceholder":630},[67,42271,42272],{"class":69,"line":34402},[67,42273,40880],{"class":2058},[67,42275,42276,42278,42280,42282,42284],{"class":69,"line":34408},[67,42277,1096],{"class":84},[67,42279,1099],{"class":77},[67,42281,4774],{"class":84},[67,42283,40891],{"class":114},[67,42285,813],{"class":73},[67,42287,42288,42290,42292,42294,42296,42298,42300,42302,42304],{"class":69,"line":34414},[67,42289,33013],{"class":73},[67,42291,85],{"class":84},[67,42293,32230],{"class":73},[67,42295,33020],{"class":114},[67,42297,3547],{"class":84},[67,42299,33025],{"class":73},[67,42301,3544],{"class":84},[67,42303,32255],{"class":114},[67,42305,829],{"class":73},[67,42307,42308,42310],{"class":69,"line":34420},[67,42309,851],{"class":77},[67,42311,32264],{"class":73},[67,42313,42314,42316,42318],{"class":69,"line":34426},[67,42315,33065],{"class":73},[67,42317,85],{"class":84},[67,42319,40928],{"class":73},[67,42321,42322,42324,42326,42328,42330,42332,42334,42336],{"class":69,"line":34437},[67,42323,851],{"class":77},[67,42325,33077],{"class":73},[67,42327,2209],{"class":77},[67,42329,2369],{"class":73},[67,42331,33273],{"class":77},[67,42333,2369],{"class":73},[67,42335,33273],{"class":77},[67,42337,33090],{"class":73},[26,42339,42340],{"start":202},[29,42341,42342],{},"测试代码",[58,42344,42346],{"className":60,"code":42345,"language":62,"meta":63,"style":63},"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",[32,42347,42348,42354,42364,42374,42378,42388,42399,42403,42407,42411,42419,42435,42445,42461,42471,42485,42489,42499,42509,42519,42525,42529,42533,42541,42545,42561,42569,42573,42577,42585,42593,42597,42601,42605,42609,42615,42619,42629,42637,42645,42649,42653,42657,42665,42669,42685,42689,42693,42697,42709,42713,42725,42729,42733,42745,42749,42759,42763,42767,42779,42783,42792,42796,42800,42808,42812,42820,42824,42828,42832,42836,42840,42856,42864,42868,42872,42920,42926,42930,42940,42948,42956,42960,42964,42968,42972,42980,42984,43000,43004,43012,43020],{"__ignoreMap":63},[67,42349,42350,42352],{"class":69,"line":70},[67,42351,622],{"class":84},[67,42353,32175],{"class":73},[67,42355,42356,42358,42360,42362],{"class":69,"line":191},[67,42357,622],{"class":84},[67,42359,33187],{"class":73},[67,42361,649],{"class":84},[67,42363,33192],{"class":73},[67,42365,42366,42368,42370,42372],{"class":69,"line":202},[67,42367,32515],{"class":84},[67,42369,33170],{"class":73},[67,42371,622],{"class":84},[67,42373,33175],{"class":73},[67,42375,42376],{"class":69,"line":641},[67,42377,35691],{"class":2058},[67,42379,42380,42382,42384,42386],{"class":69,"line":655},[67,42381,32515],{"class":84},[67,42383,33143],{"class":73},[67,42385,622],{"class":84},[67,42387,33148],{"class":73},[67,42389,42390,42392,42394,42396],{"class":69,"line":660},[67,42391,32515],{"class":84},[67,42393,33685],{"class":73},[67,42395,622],{"class":84},[67,42397,42398],{"class":77}," VGG16\n",[67,42400,42401],{"class":69,"line":665},[67,42402,631],{"emptyLinePlaceholder":630},[67,42404,42405],{"class":69,"line":677},[67,42406,631],{"emptyLinePlaceholder":630},[67,42408,42409],{"class":69,"line":683},[67,42410,35720],{"class":2058},[67,42412,42413,42415,42417],{"class":69,"line":689},[67,42414,801],{"class":84},[67,42416,35727],{"class":110},[67,42418,33723],{"class":73},[67,42420,42421,42423,42425,42427,42429,42431,42433],{"class":69,"line":694},[67,42422,35734],{"class":73},[67,42424,85],{"class":84},[67,42426,33227],{"class":73},[67,42428,33230],{"class":7033},[67,42430,85],{"class":84},[67,42432,33235],{"class":114},[67,42434,33238],{"class":73},[67,42436,42437,42439,42441,42443],{"class":69,"line":700},[67,42438,35751],{"class":7033},[67,42440,85],{"class":84},[67,42442,35756],{"class":77},[67,42444,33238],{"class":73},[67,42446,42447,42449,42451,42453,42455,42457,42459],{"class":69,"line":706},[67,42448,35763],{"class":7033},[67,42450,85],{"class":84},[67,42452,33265],{"class":73},[67,42454,33268],{"class":7033},[67,42456,85],{"class":84},[67,42458,33273],{"class":77},[67,42460,33276],{"class":73},[67,42462,42463,42465,42467,42469],{"class":69,"line":712},[67,42464,35780],{"class":7033},[67,42466,85],{"class":84},[67,42468,33248],{"class":77},[67,42470,829],{"class":73},[67,42472,42473,42475,42477,42479,42481,42483],{"class":69,"line":717},[67,42474,35791],{"class":73},[67,42476,85],{"class":84},[67,42478,33306],{"class":73},[67,42480,33309],{"class":7033},[67,42482,85],{"class":84},[67,42484,35802],{"class":73},[67,42486,42487],{"class":69,"line":723},[67,42488,35807],{"class":2058},[67,42490,42491,42493,42495,42497],{"class":69,"line":729},[67,42492,35812],{"class":7033},[67,42494,85],{"class":84},[67,42496,2209],{"class":77},[67,42498,33238],{"class":73},[67,42500,42501,42503,42505,42507],{"class":69,"line":735},[67,42502,35823],{"class":7033},[67,42504,85],{"class":84},[67,42506,33248],{"class":77},[67,42508,33238],{"class":73},[67,42510,42511,42513,42515,42517],{"class":69,"line":741},[67,42512,35834],{"class":7033},[67,42514,85],{"class":84},[67,42516,78],{"class":77},[67,42518,829],{"class":73},[67,42520,42521,42523],{"class":69,"line":747},[67,42522,5910],{"class":84},[67,42524,35847],{"class":73},[67,42526,42527],{"class":69,"line":753},[67,42528,631],{"emptyLinePlaceholder":630},[67,42530,42531],{"class":69,"line":758},[67,42532,35856],{"class":2058},[67,42534,42535,42537,42539],{"class":69,"line":764},[67,42536,801],{"class":84},[67,42538,35863],{"class":110},[67,42540,35866],{"class":73},[67,42542,42543],{"class":69,"line":770},[67,42544,35871],{"class":2058},[67,42546,42547,42549,42551,42553,42555,42557,42559],{"class":69,"line":776},[67,42548,33013],{"class":73},[67,42550,85],{"class":84},[67,42552,33020],{"class":114},[67,42554,3547],{"class":84},[67,42556,33025],{"class":73},[67,42558,3544],{"class":84},[67,42560,35888],{"class":114},[67,42562,42563,42565,42567],{"class":69,"line":782},[67,42564,33065],{"class":73},[67,42566,85],{"class":84},[67,42568,34059],{"class":73},[67,42570,42571],{"class":69,"line":788},[67,42572,631],{"emptyLinePlaceholder":630},[67,42574,42575],{"class":69,"line":793},[67,42576,35905],{"class":2058},[67,42578,42579,42581,42583],{"class":69,"line":798},[67,42580,35910],{"class":73},[67,42582,85],{"class":84},[67,42584,34112],{"class":77},[67,42586,42587,42589,42591],{"class":69,"line":816},[67,42588,35919],{"class":73},[67,42590,85],{"class":84},[67,42592,4909],{"class":77},[67,42594,42595],{"class":69,"line":832},[67,42596,631],{"emptyLinePlaceholder":630},[67,42598,42599],{"class":69,"line":843},[67,42600,35932],{"class":2058},[67,42602,42603],{"class":69,"line":848},[67,42604,35937],{"class":2058},[67,42606,42607],{"class":69,"line":863},[67,42608,35942],{"class":2058},[67,42610,42611,42613],{"class":69,"line":876},[67,42612,35947],{"class":84},[67,42614,34653],{"class":73},[67,42616,42617],{"class":69,"line":889},[67,42618,35954],{"class":2058},[67,42620,42621,42623,42625,42627],{"class":69,"line":894},[67,42622,5225],{"class":84},[67,42624,35961],{"class":73},[67,42626,941],{"class":84},[67,42628,35966],{"class":73},[67,42630,42631,42633,42635],{"class":69,"line":911},[67,42632,35971],{"class":73},[67,42634,85],{"class":84},[67,42636,35976],{"class":73},[67,42638,42639,42641,42643],{"class":69,"line":927},[67,42640,35981],{"class":73},[67,42642,85],{"class":84},[67,42644,35986],{"class":73},[67,42646,42647],{"class":69,"line":932},[67,42648,35991],{"class":2058},[67,42650,42651],{"class":69,"line":955},[67,42652,34644],{"class":73},[67,42654,42655],{"class":69,"line":971},[67,42656,36000],{"class":2058},[67,42658,42659,42661,42663],{"class":69,"line":1010},[67,42660,34429],{"class":73},[67,42662,85],{"class":84},[67,42664,36009],{"class":73},[67,42666,42667],{"class":69,"line":1016},[67,42668,36014],{"class":2058},[67,42670,42671,42673,42675,42677,42679,42681,42683],{"class":69,"line":1021},[67,42672,34446],{"class":73},[67,42674,85],{"class":84},[67,42676,34451],{"class":73},[67,42678,34454],{"class":7033},[67,42680,85],{"class":84},[67,42682,2209],{"class":77},[67,42684,829],{"class":73},[67,42686,42687],{"class":69,"line":1034},[67,42688,36035],{"class":2058},[67,42690,42691],{"class":69,"line":1053},[67,42692,36040],{"class":2058},[67,42694,42695],{"class":69,"line":1070},[67,42696,36045],{"class":2058},[67,42698,42699,42701,42703,42705,42707],{"class":69,"line":1083},[67,42700,36050],{"class":73},[67,42702,11283],{"class":84},[67,42704,34556],{"class":73},[67,42706,4774],{"class":84},[67,42708,36059],{"class":73},[67,42710,42711],{"class":69,"line":1088},[67,42712,36064],{"class":2058},[67,42714,42715,42717,42719,42721,42723],{"class":69,"line":1093},[67,42716,36069],{"class":73},[67,42718,11283],{"class":84},[67,42720,36074],{"class":73},[67,42722,78],{"class":77},[67,42724,829],{"class":73},[67,42726,42727],{"class":69,"line":1110},[67,42728,631],{"emptyLinePlaceholder":630},[67,42730,42731],{"class":69,"line":11603},[67,42732,36087],{"class":2058},[67,42734,42735,42737,42739,42741,42743],{"class":69,"line":11612},[67,42736,36092],{"class":73},[67,42738,85],{"class":84},[67,42740,36097],{"class":73},[67,42742,2573],{"class":84},[67,42744,36102],{"class":73},[67,42746,42747],{"class":69,"line":11617},[67,42748,36107],{"class":2058},[67,42750,42751,42753,42755,42757],{"class":69,"line":11623},[67,42752,34220],{"class":77},[67,42754,854],{"class":73},[67,42756,36116],{"class":114},[67,42758,36119],{"class":73},[67,42760,42761],{"class":69,"line":11644},[67,42762,631],{"emptyLinePlaceholder":630},[67,42764,42765],{"class":69,"line":11650},[67,42766,36128],{"class":2058},[67,42768,42769,42771,42773,42775,42777],{"class":69,"line":11664},[67,42770,1096],{"class":84},[67,42772,1099],{"class":77},[67,42774,4774],{"class":84},[67,42776,33001],{"class":114},[67,42778,813],{"class":73},[67,42780,42781],{"class":69,"line":11670},[67,42782,36145],{"class":2058},[67,42784,42785,42787,42789],{"class":69,"line":11697},[67,42786,33065],{"class":73},[67,42788,85],{"class":84},[67,42790,42791],{"class":73},"VGG16()\n",[67,42793,42794],{"class":69,"line":11706},[67,42795,36158],{"class":2058},[67,42797,42798],{"class":69,"line":11712},[67,42799,36163],{"class":2058},[67,42801,42802,42804,42806],{"class":69,"line":11720},[67,42803,36168],{"class":73},[67,42805,36171],{"class":114},[67,42807,1050],{"class":73},[67,42809,42810],{"class":69,"line":11725},[67,42811,36178],{"class":2058},[67,42813,42814,42816,42818],{"class":69,"line":18401},[67,42815,35791],{"class":73},[67,42817,85],{"class":84},[67,42819,36187],{"class":73},[67,42821,42822],{"class":69,"line":18407},[67,42823,36192],{"class":2058},[67,42825,42826],{"class":69,"line":18430},[67,42827,36197],{"class":73},[67,42829,42830],{"class":69,"line":18436},[67,42831,631],{"emptyLinePlaceholder":630},[67,42833,42834],{"class":69,"line":18459},[67,42835,36206],{"class":2058},[67,42837,42838],{"class":69,"line":18473},[67,42839,36211],{"class":2058},[67,42841,42842,42844,42846,42848,42850,42852,42854],{"class":69,"line":18493},[67,42843,33013],{"class":73},[67,42845,85],{"class":84},[67,42847,33020],{"class":114},[67,42849,3547],{"class":84},[67,42851,33025],{"class":73},[67,42853,3544],{"class":84},[67,42855,35888],{"class":114},[67,42857,42858,42860,42862],{"class":69,"line":18499},[67,42859,33065],{"class":73},[67,42861,85],{"class":84},[67,42863,34059],{"class":73},[67,42865,42866],{"class":69,"line":18510},[67,42867,36240],{"class":2058},[67,42869,42870],{"class":69,"line":18533},[67,42871,36245],{"class":2058},[67,42873,42874,42876,42878,42880,42882,42884,42886,42888,42890,42892,42894,42896,42898,42900,42902,42904,42906,42908,42910,42912,42914,42916,42918],{"class":69,"line":18555},[67,42875,36250],{"class":73},[67,42877,85],{"class":84},[67,42879,2879],{"class":73},[67,42881,36257],{"class":114},[67,42883,2369],{"class":73},[67,42885,36262],{"class":114},[67,42887,2369],{"class":73},[67,42889,36267],{"class":114},[67,42891,2369],{"class":73},[67,42893,36272],{"class":114},[67,42895,2369],{"class":73},[67,42897,36277],{"class":114},[67,42899,2369],{"class":73},[67,42901,36282],{"class":114},[67,42903,2369],{"class":73},[67,42905,36287],{"class":114},[67,42907,2369],{"class":73},[67,42909,36292],{"class":114},[67,42911,2369],{"class":73},[67,42913,36297],{"class":114},[67,42915,2369],{"class":73},[67,42917,36302],{"class":114},[67,42919,35015],{"class":73},[67,42921,42922,42924],{"class":69,"line":18560},[67,42923,35947],{"class":84},[67,42925,34653],{"class":73},[67,42927,42928],{"class":69,"line":18566},[67,42929,36315],{"class":2058},[67,42931,42932,42934,42936,42938],{"class":69,"line":18580},[67,42933,5225],{"class":84},[67,42935,36322],{"class":73},[67,42937,941],{"class":84},[67,42939,35966],{"class":73},[67,42941,42942,42944,42946],{"class":69,"line":18593},[67,42943,34379],{"class":73},[67,42945,85],{"class":84},[67,42947,34384],{"class":73},[67,42949,42950,42952,42954],{"class":69,"line":18598},[67,42951,34394],{"class":73},[67,42953,85],{"class":84},[67,42955,34399],{"class":73},[67,42957,42958],{"class":69,"line":18612},[67,42959,631],{"emptyLinePlaceholder":630},[67,42961,42962],{"class":69,"line":18617},[67,42963,36351],{"class":2058},[67,42965,42966],{"class":69,"line":18623},[67,42967,34644],{"class":73},[67,42969,42970],{"class":69,"line":18628},[67,42971,36360],{"class":2058},[67,42973,42974,42976,42978],{"class":69,"line":18642},[67,42975,34429],{"class":73},[67,42977,85],{"class":84},[67,42979,34434],{"class":73},[67,42981,42982],{"class":69,"line":18647},[67,42983,36373],{"class":2058},[67,42985,42986,42988,42990,42992,42994,42996,42998],{"class":69,"line":18652},[67,42987,34446],{"class":73},[67,42989,85],{"class":84},[67,42991,34451],{"class":73},[67,42993,34454],{"class":7033},[67,42995,85],{"class":84},[67,42997,2209],{"class":77},[67,42999,829],{"class":73},[67,43001,43002],{"class":69,"line":18666},[67,43003,36394],{"class":2058},[67,43005,43006,43008,43010],{"class":69,"line":18678},[67,43007,36399],{"class":73},[67,43009,85],{"class":84},[67,43011,36404],{"class":73},[67,43013,43014,43016,43018],{"class":69,"line":18683},[67,43015,36409],{"class":73},[67,43017,85],{"class":84},[67,43019,36414],{"class":73},[67,43021,43022,43024,43026,43028,43030,43032,43034,43036],{"class":69,"line":18696},[67,43023,36419],{"class":77},[67,43025,854],{"class":73},[67,43027,36424],{"class":114},[67,43029,36427],{"class":73},[67,43031,36430],{"class":114},[67,43033,2369],{"class":73},[67,43035,36435],{"class":114},[67,43037,36438],{"class":73},[391,43039,43041],{"id":43040},"_23googlenet","2.3.GoogLeNet",[23794,43043,43045],{"id":43044},"_231原理","2.3.1.原理",[26,43047,43048],{},[29,43049,43050],{},"网络结构",[19,43052,43053],{},[3317,43054],{"alt":63,"src":43055},"\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,43057,43058],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43060,43061],{},[3317,43062],{"alt":63,"src":43063},"\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,43065,43066],{},[3317,43067],{"alt":63,"src":43068},"\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,43070,43071],{},[3317,43072],{"alt":63,"src":43073},"\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,43075,43076],{"start":191},[29,43077,43078],{},"1x1卷积的优点",[19,43080,43081],{},[3317,43082],{"alt":63,"src":43083},"\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,43085,43086],{"start":202},[29,43087,43088],{},"全局平均池化层优点",[19,43090,43091],{},[3317,43092],{"alt":63,"src":43093},"\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,43095,43096],{},[3317,43097],{"alt":63,"src":43098},"\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,43100,43101],{"start":641},[29,43102,43103],{},"参数详细描述",[19,43105,43106],{},[3317,43107],{"alt":63,"src":43108},"\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,43110,43111],{},[3317,43112],{"alt":63,"src":43113},"\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,43115,43116],{},[3317,43117],{"alt":63,"src":43118},"\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,43120,43121],{},[3317,43122],{"alt":63,"src":43123},"\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,43125,43126],{},[3317,43127],{"alt":63,"src":43128},"\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,43130,43131],{},[3317,43132],{"alt":63,"src":43133},"\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,43135,43136],{},[3317,43137],{"alt":63,"src":43138},"\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,43140,43141],{},[3317,43142],{"alt":63,"src":43143},"\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,43145,43146],{},[3317,43147],{"alt":63,"src":43148},"\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,43150,43151],{},[3317,43152],{"alt":63,"src":43153},"\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,43155,43156],{},[3317,43157],{"alt":63,"src":43158},"\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,43160,43161],{},[3317,43162],{"alt":63,"src":43163},"\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,43165,43166],{},[3317,43167],{"alt":63,"src":43168},"\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,43170,43171],{},[3317,43172],{"alt":63,"src":43173},"\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,43175,43176],{},[3317,43177],{"alt":63,"src":43178},"\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,43180,43181],{},[3317,43182],{"alt":63,"src":43183},"\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,43185,43186],{},[3317,43187],{"alt":63,"src":43188},"\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,43190,43191],{},[3317,43192],{"alt":63,"src":43193},"\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,43195,43196],{},[3317,43197],{"alt":63,"src":43198},"\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,43200,43201],{},[3317,43202],{"alt":63,"src":43203},"\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,43205,43206],{},[3317,43207],{"alt":63,"src":43208},"\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",[23794,43210,43212],{"id":43211},"_232代码实现","2.3.2.代码实现",[26,43214,43215],{},[29,43216,32489],{},[19,43218,43219],{},"根据原理一步一步搭建即可",[58,43221,43223],{"className":60,"code":43222,"language":62,"meta":63,"style":63},"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",[32,43224,43225,43231,43241,43251,43255,43272,43281,43296,43306,43311,43344,43349,43386,43433,43438,43474,43521,43526,43531,43566,43598,43602,43610,43626,43650,43675,43696,43701,43716,43720,43724,43729,43746,43751,43760,43775,43786,43830,43834,43862,43866,43877,43905,43909,43946,43950,43978,43982,43993,44029,44061,44089,44093,44104,44138,44170,44202,44235,44269,44297,44301,44312,44345,44377,44391,44395,44408,44412,44417,44429,44437,44459,44464,44469,44474,44479,44484,44489,44503,44511,44520,44533,44548,44557,44561,44569,44580,44591,44602,44613,44624,44630,44634,44639,44651,44671,44680],{"__ignoreMap":63},[67,43226,43227,43229],{"class":69,"line":70},[67,43228,622],{"class":84},[67,43230,32175],{"class":73},[67,43232,43233,43235,43237,43239],{"class":69,"line":191},[67,43234,32515],{"class":84},[67,43236,32518],{"class":73},[67,43238,622],{"class":84},[67,43240,32523],{"class":73},[67,43242,43243,43245,43247,43249],{"class":69,"line":202},[67,43244,32515],{"class":84},[67,43246,32535],{"class":73},[67,43248,622],{"class":84},[67,43250,32540],{"class":73},[67,43252,43253],{"class":69,"line":641},[67,43254,631],{"emptyLinePlaceholder":630},[67,43256,43257,43259,43262,43264,43266,43268,43270],{"class":69,"line":655},[67,43258,16492],{"class":84},[67,43260,43261],{"class":110}," Inception",[67,43263,854],{"class":73},[67,43265,32556],{"class":110},[67,43267,2547],{"class":73},[67,43269,32561],{"class":110},[67,43271,952],{"class":73},[67,43273,43274,43276,43278],{"class":69,"line":660},[67,43275,32578],{"class":84},[67,43277,32581],{"class":77},[67,43279,43280],{"class":73},"(self,in_channels,c1,c2,c3,c4):\n",[67,43282,43283,43285,43288,43290,43292,43294],{"class":69,"line":665},[67,43284,32594],{"class":77},[67,43286,43287],{"class":73},"(Inception,",[67,43289,32600],{"class":77},[67,43291,32603],{"class":73},[67,43293,32606],{"class":77},[67,43295,3809],{"class":73},[67,43297,43298,43300,43302,43304],{"class":69,"line":677},[67,43299,32622],{"class":77},[67,43301,36540],{"class":73},[67,43303,85],{"class":84},[67,43305,36545],{"class":73},[67,43307,43308],{"class":69,"line":683},[67,43309,43310],{"class":2058},"        # 路线1：定义1*1卷积\n",[67,43312,43313,43315,43318,43320,43322,43324,43326,43329,43331,43333,43336,43338,43340,43342],{"class":69,"line":689},[67,43314,32622],{"class":77},[67,43316,43317],{"class":73},".p1_1",[67,43319,85],{"class":84},[67,43321,32630],{"class":73},[67,43323,32633],{"class":7033},[67,43325,85],{"class":84},[67,43327,43328],{"class":73},"in_channels,",[67,43330,32642],{"class":7033},[67,43332,85],{"class":84},[67,43334,43335],{"class":73},"c1,",[67,43337,32651],{"class":7033},[67,43339,85],{"class":84},[67,43341,2209],{"class":77},[67,43343,829],{"class":73},[67,43345,43346],{"class":69,"line":694},[67,43347,43348],{"class":2058},"        # 路线2：定义1*1卷积和3*3\n",[67,43350,43351,43353,43356,43358,43360,43362,43364,43366,43368,43370,43373,43375,43378,43380,43382,43384],{"class":69,"line":700},[67,43352,32622],{"class":77},[67,43354,43355],{"class":73},".p2_1",[67,43357,85],{"class":84},[67,43359,32630],{"class":73},[67,43361,32633],{"class":7033},[67,43363,85],{"class":84},[67,43365,43328],{"class":73},[67,43367,32642],{"class":7033},[67,43369,85],{"class":84},[67,43371,43372],{"class":73},"c2[",[67,43374,78],{"class":77},[67,43376,43377],{"class":73},"],",[67,43379,32651],{"class":7033},[67,43381,85],{"class":84},[67,43383,2209],{"class":77},[67,43385,829],{"class":73},[67,43387,43388,43390,43393,43395,43397,43399,43401,43403,43405,43407,43409,43411,43413,43415,43417,43419,43421,43423,43425,43427,43429,43431],{"class":69,"line":706},[67,43389,32622],{"class":77},[67,43391,43392],{"class":73},".p2_2",[67,43394,85],{"class":84},[67,43396,32630],{"class":73},[67,43398,32633],{"class":7033},[67,43400,85],{"class":84},[67,43402,43372],{"class":73},[67,43404,78],{"class":77},[67,43406,43377],{"class":73},[67,43408,32642],{"class":7033},[67,43410,85],{"class":84},[67,43412,43372],{"class":73},[67,43414,2209],{"class":77},[67,43416,43377],{"class":73},[67,43418,32651],{"class":7033},[67,43420,85],{"class":84},[67,43422,2071],{"class":77},[67,43424,2369],{"class":73},[67,43426,32660],{"class":7033},[67,43428,85],{"class":84},[67,43430,2209],{"class":77},[67,43432,829],{"class":73},[67,43434,43435],{"class":69,"line":712},[67,43436,43437],{"class":2058},"        # 路线3：定义1*1卷积和5*5\n",[67,43439,43440,43442,43445,43447,43449,43451,43453,43455,43457,43459,43462,43464,43466,43468,43470,43472],{"class":69,"line":717},[67,43441,32622],{"class":77},[67,43443,43444],{"class":73},".p3_1",[67,43446,85],{"class":84},[67,43448,32630],{"class":73},[67,43450,32633],{"class":7033},[67,43452,85],{"class":84},[67,43454,43328],{"class":73},[67,43456,32642],{"class":7033},[67,43458,85],{"class":84},[67,43460,43461],{"class":73},"c3[",[67,43463,78],{"class":77},[67,43465,43377],{"class":73},[67,43467,32651],{"class":7033},[67,43469,85],{"class":84},[67,43471,2209],{"class":77},[67,43473,829],{"class":73},[67,43475,43476,43478,43481,43483,43485,43487,43489,43491,43493,43495,43497,43499,43501,43503,43505,43507,43509,43511,43513,43515,43517,43519],{"class":69,"line":723},[67,43477,32622],{"class":77},[67,43479,43480],{"class":73},".p3_2",[67,43482,85],{"class":84},[67,43484,32630],{"class":73},[67,43486,32633],{"class":7033},[67,43488,85],{"class":84},[67,43490,43461],{"class":73},[67,43492,78],{"class":77},[67,43494,43377],{"class":73},[67,43496,32642],{"class":7033},[67,43498,85],{"class":84},[67,43500,43461],{"class":73},[67,43502,2209],{"class":77},[67,43504,43377],{"class":73},[67,43506,32651],{"class":7033},[67,43508,85],{"class":84},[67,43510,2310],{"class":77},[67,43512,2369],{"class":73},[67,43514,32660],{"class":7033},[67,43516,85],{"class":84},[67,43518,2077],{"class":77},[67,43520,829],{"class":73},[67,43522,43523],{"class":69,"line":729},[67,43524,43525],{"class":2058},"        # 路线4：定义3*3最大池化和1*1卷积\n",[67,43527,43528],{"class":69,"line":735},[67,43529,43530],{"class":2058},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[67,43532,43533,43535,43538,43540,43542,43544,43546,43548,43550,43552,43554,43556,43558,43560,43562,43564],{"class":69,"line":741},[67,43534,32622],{"class":77},[67,43536,43537],{"class":73},".p4_1",[67,43539,85],{"class":84},[67,43541,36598],{"class":73},[67,43543,32651],{"class":7033},[67,43545,85],{"class":84},[67,43547,2071],{"class":77},[67,43549,2369],{"class":73},[67,43551,32706],{"class":7033},[67,43553,85],{"class":84},[67,43555,2209],{"class":77},[67,43557,2369],{"class":73},[67,43559,32660],{"class":7033},[67,43561,85],{"class":84},[67,43563,2209],{"class":77},[67,43565,829],{"class":73},[67,43567,43568,43570,43573,43575,43577,43579,43581,43583,43585,43587,43590,43592,43594,43596],{"class":69,"line":747},[67,43569,32622],{"class":77},[67,43571,43572],{"class":73},".p4_2",[67,43574,85],{"class":84},[67,43576,32630],{"class":73},[67,43578,32633],{"class":7033},[67,43580,85],{"class":84},[67,43582,43328],{"class":73},[67,43584,32642],{"class":7033},[67,43586,85],{"class":84},[67,43588,43589],{"class":73},"c4,",[67,43591,32651],{"class":7033},[67,43593,85],{"class":84},[67,43595,2209],{"class":77},[67,43597,829],{"class":73},[67,43599,43600],{"class":69,"line":753},[67,43601,631],{"emptyLinePlaceholder":630},[67,43603,43604,43606,43608],{"class":69,"line":758},[67,43605,32578],{"class":84},[67,43607,32870],{"class":110},[67,43609,32873],{"class":73},[67,43611,43612,43615,43617,43619,43621,43623],{"class":69,"line":764},[67,43613,43614],{"class":73},"        p1",[67,43616,85],{"class":84},[67,43618,32600],{"class":77},[67,43620,36953],{"class":73},[67,43622,32600],{"class":77},[67,43624,43625],{"class":73},".p1_1(x))\n",[67,43627,43628,43630,43632,43634,43636,43638,43641,43643,43645,43647],{"class":69,"line":770},[67,43629,8901],{"class":73},[67,43631,85],{"class":84},[67,43633,32600],{"class":77},[67,43635,36953],{"class":73},[67,43637,32600],{"class":77},[67,43639,43640],{"class":73},".p2_2(",[67,43642,32600],{"class":77},[67,43644,36953],{"class":73},[67,43646,32600],{"class":77},[67,43648,43649],{"class":73},".p2_1(x))))\n",[67,43651,43652,43655,43657,43659,43661,43663,43666,43668,43670,43672],{"class":69,"line":776},[67,43653,43654],{"class":73},"        p3",[67,43656,85],{"class":84},[67,43658,32600],{"class":77},[67,43660,36953],{"class":73},[67,43662,32600],{"class":77},[67,43664,43665],{"class":73},".p3_2(",[67,43667,32600],{"class":77},[67,43669,36953],{"class":73},[67,43671,32600],{"class":77},[67,43673,43674],{"class":73},".p3_1(x))))\n",[67,43676,43677,43680,43682,43684,43686,43688,43691,43693],{"class":69,"line":782},[67,43678,43679],{"class":73},"        p4",[67,43681,85],{"class":84},[67,43683,32600],{"class":77},[67,43685,36953],{"class":73},[67,43687,32600],{"class":77},[67,43689,43690],{"class":73},".p4_2(",[67,43692,32600],{"class":77},[67,43694,43695],{"class":73},".p4_1(x)))\n",[67,43697,43698],{"class":69,"line":788},[67,43699,43700],{"class":2058},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[67,43702,43703,43705,43708,43710,43712,43714],{"class":69,"line":793},[67,43704,16550],{"class":84},[67,43706,43707],{"class":73}," torch.cat((p1,p2,p3,p4),",[67,43709,34454],{"class":7033},[67,43711,85],{"class":84},[67,43713,2209],{"class":77},[67,43715,829],{"class":73},[67,43717,43718],{"class":69,"line":798},[67,43719,631],{"emptyLinePlaceholder":630},[67,43721,43722],{"class":69,"line":816},[67,43723,631],{"emptyLinePlaceholder":630},[67,43725,43726],{"class":69,"line":832},[67,43727,43728],{"class":2058},"# 搭建GoogLeNet网络\n",[67,43730,43731,43733,43736,43738,43740,43742,43744],{"class":69,"line":843},[67,43732,16492],{"class":84},[67,43734,43735],{"class":110}," GoogLeNet",[67,43737,854],{"class":73},[67,43739,32556],{"class":110},[67,43741,2547],{"class":73},[67,43743,32561],{"class":110},[67,43745,952],{"class":73},[67,43747,43748],{"class":69,"line":848},[67,43749,43750],{"class":2058},"    # 必须把Inception导入到里边\n",[67,43752,43753,43755,43757],{"class":69,"line":863},[67,43754,32578],{"class":84},[67,43756,32581],{"class":77},[67,43758,43759],{"class":73},"(self,Inception):\n",[67,43761,43762,43764,43767,43769,43771,43773],{"class":69,"line":876},[67,43763,32594],{"class":77},[67,43765,43766],{"class":73},"(GoogLeNet,",[67,43768,32600],{"class":77},[67,43770,32603],{"class":73},[67,43772,32606],{"class":77},[67,43774,3809],{"class":73},[67,43776,43777,43779,43782,43784],{"class":69,"line":889},[67,43778,32622],{"class":77},[67,43780,43781],{"class":73},".b1",[67,43783,85],{"class":84},[67,43785,39777],{"class":73},[67,43787,43788,43790,43792,43794,43796,43798,43800,43802,43804,43806,43808,43810,43812,43814,43816,43818,43820,43822,43824,43826,43828],{"class":69,"line":894},[67,43789,39782],{"class":73},[67,43791,32633],{"class":7033},[67,43793,85],{"class":84},[67,43795,2209],{"class":77},[67,43797,2369],{"class":73},[67,43799,32642],{"class":7033},[67,43801,85],{"class":84},[67,43803,2195],{"class":77},[67,43805,2369],{"class":73},[67,43807,32651],{"class":7033},[67,43809,85],{"class":84},[67,43811,2360],{"class":77},[67,43813,2369],{"class":73},[67,43815,32706],{"class":7033},[67,43817,85],{"class":84},[67,43819,2077],{"class":77},[67,43821,2369],{"class":73},[67,43823,32660],{"class":7033},[67,43825,85],{"class":84},[67,43827,2071],{"class":77},[67,43829,39815],{"class":73},[67,43831,43832],{"class":69,"line":911},[67,43833,39820],{"class":73},[67,43835,43836,43838,43840,43842,43844,43846,43848,43850,43852,43854,43856,43858,43860],{"class":69,"line":927},[67,43837,39865],{"class":73},[67,43839,32651],{"class":7033},[67,43841,85],{"class":84},[67,43843,2071],{"class":77},[67,43845,2369],{"class":73},[67,43847,32706],{"class":7033},[67,43849,85],{"class":84},[67,43851,2077],{"class":77},[67,43853,2369],{"class":73},[67,43855,32660],{"class":7033},[67,43857,85],{"class":84},[67,43859,2209],{"class":77},[67,43861,829],{"class":73},[67,43863,43864],{"class":69,"line":932},[67,43865,39894],{"class":73},[67,43867,43868,43870,43873,43875],{"class":69,"line":955},[67,43869,32622],{"class":77},[67,43871,43872],{"class":73},".b2",[67,43874,85],{"class":84},[67,43876,39777],{"class":73},[67,43878,43879,43881,43883,43885,43887,43889,43891,43893,43895,43897,43899,43901,43903],{"class":69,"line":971},[67,43880,39782],{"class":73},[67,43882,32633],{"class":7033},[67,43884,85],{"class":84},[67,43886,2195],{"class":77},[67,43888,2369],{"class":73},[67,43890,32642],{"class":7033},[67,43892,85],{"class":84},[67,43894,2195],{"class":77},[67,43896,2369],{"class":73},[67,43898,32651],{"class":7033},[67,43900,85],{"class":84},[67,43902,2209],{"class":77},[67,43904,39815],{"class":73},[67,43906,43907],{"class":69,"line":1010},[67,43908,39820],{"class":73},[67,43910,43911,43913,43915,43917,43919,43921,43923,43925,43928,43930,43932,43934,43936,43938,43940,43942,43944],{"class":69,"line":1016},[67,43912,39782],{"class":73},[67,43914,32633],{"class":7033},[67,43916,85],{"class":84},[67,43918,2195],{"class":77},[67,43920,2369],{"class":73},[67,43922,32642],{"class":7033},[67,43924,85],{"class":84},[67,43926,43927],{"class":77},"192",[67,43929,2369],{"class":73},[67,43931,32651],{"class":7033},[67,43933,85],{"class":84},[67,43935,2071],{"class":77},[67,43937,2369],{"class":73},[67,43939,32660],{"class":7033},[67,43941,85],{"class":84},[67,43943,2209],{"class":77},[67,43945,39815],{"class":73},[67,43947,43948],{"class":69,"line":1021},[67,43949,39820],{"class":73},[67,43951,43952,43954,43956,43958,43960,43962,43964,43966,43968,43970,43972,43974,43976],{"class":69,"line":1034},[67,43953,39865],{"class":73},[67,43955,32651],{"class":7033},[67,43957,85],{"class":84},[67,43959,2071],{"class":77},[67,43961,2369],{"class":73},[67,43963,32706],{"class":7033},[67,43965,85],{"class":84},[67,43967,2077],{"class":77},[67,43969,2369],{"class":73},[67,43971,32660],{"class":7033},[67,43973,85],{"class":84},[67,43975,2209],{"class":77},[67,43977,829],{"class":73},[67,43979,43980],{"class":69,"line":1053},[67,43981,39894],{"class":73},[67,43983,43984,43986,43989,43991],{"class":69,"line":1070},[67,43985,32622],{"class":77},[67,43987,43988],{"class":73},".b3",[67,43990,85],{"class":84},[67,43992,39777],{"class":73},[67,43994,43995,43998,44000,44002,44004,44007,44009,44011,44013,44016,44018,44020,44022,44025,44027],{"class":69,"line":1083},[67,43996,43997],{"class":73},"            Inception(",[67,43999,43927],{"class":77},[67,44001,2369],{"class":73},[67,44003,2195],{"class":77},[67,44005,44006],{"class":73},",(",[67,44008,2201],{"class":77},[67,44010,2369],{"class":73},[67,44012,33840],{"class":77},[67,44014,44015],{"class":73},"),(",[67,44017,2590],{"class":77},[67,44019,2369],{"class":73},[67,44021,2189],{"class":77},[67,44023,44024],{"class":73},"),",[67,44026,2189],{"class":77},[67,44028,39815],{"class":73},[67,44030,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059],{"class":69,"line":1088},[67,44032,43997],{"class":73},[67,44034,36639],{"class":77},[67,44036,2369],{"class":73},[67,44038,33840],{"class":77},[67,44040,44006],{"class":73},[67,44042,33840],{"class":77},[67,44044,2369],{"class":73},[67,44046,43927],{"class":77},[67,44048,44015],{"class":73},[67,44050,2189],{"class":77},[67,44052,2369],{"class":73},[67,44054,2201],{"class":77},[67,44056,44024],{"class":73},[67,44058,2195],{"class":77},[67,44060,39815],{"class":73},[67,44062,44063,44065,44067,44069,44071,44073,44075,44077,44079,44081,44083,44085,44087],{"class":69,"line":1093},[67,44064,39865],{"class":73},[67,44066,32651],{"class":7033},[67,44068,85],{"class":84},[67,44070,2071],{"class":77},[67,44072,2369],{"class":73},[67,44074,32706],{"class":7033},[67,44076,85],{"class":84},[67,44078,2077],{"class":77},[67,44080,2369],{"class":73},[67,44082,32660],{"class":7033},[67,44084,85],{"class":84},[67,44086,2209],{"class":77},[67,44088,829],{"class":73},[67,44090,44091],{"class":69,"line":1110},[67,44092,39894],{"class":73},[67,44094,44095,44097,44100,44102],{"class":69,"line":11603},[67,44096,32622],{"class":77},[67,44098,44099],{"class":73},".b4",[67,44101,85],{"class":84},[67,44103,39777],{"class":73},[67,44105,44106,44108,44111,44113,44115,44117,44119,44121,44124,44126,44128,44130,44132,44134,44136],{"class":69,"line":11612},[67,44107,43997],{"class":73},[67,44109,44110],{"class":77},"480",[67,44112,2369],{"class":73},[67,44114,43927],{"class":77},[67,44116,44006],{"class":73},[67,44118,2201],{"class":77},[67,44120,2369],{"class":73},[67,44122,44123],{"class":77},"208",[67,44125,44015],{"class":73},[67,44127,2590],{"class":77},[67,44129,2369],{"class":73},[67,44131,2596],{"class":77},[67,44133,44024],{"class":73},[67,44135,2195],{"class":77},[67,44137,39815],{"class":73},[67,44139,44140,44142,44144,44146,44148,44150,44152,44154,44156,44158,44160,44162,44164,44166,44168],{"class":69,"line":11617},[67,44141,43997],{"class":73},[67,44143,40225],{"class":77},[67,44145,2369],{"class":73},[67,44147,22844],{"class":77},[67,44149,44006],{"class":73},[67,44151,2607],{"class":77},[67,44153,2369],{"class":73},[67,44155,33273],{"class":77},[67,44157,44015],{"class":73},[67,44159,2789],{"class":77},[67,44161,2369],{"class":73},[67,44163,2195],{"class":77},[67,44165,44024],{"class":73},[67,44167,2195],{"class":77},[67,44169,39815],{"class":73},[67,44171,44172,44174,44176,44178,44180,44182,44184,44186,44188,44190,44192,44194,44196,44198,44200],{"class":69,"line":11623},[67,44173,43997],{"class":73},[67,44175,40225],{"class":77},[67,44177,2369],{"class":73},[67,44179,33840],{"class":77},[67,44181,44006],{"class":73},[67,44183,33840],{"class":77},[67,44185,2369],{"class":73},[67,44187,36639],{"class":77},[67,44189,44015],{"class":73},[67,44191,2789],{"class":77},[67,44193,2369],{"class":73},[67,44195,2195],{"class":77},[67,44197,44024],{"class":73},[67,44199,2195],{"class":77},[67,44201,39815],{"class":73},[67,44203,44204,44206,44208,44210,44212,44214,44216,44218,44221,44223,44225,44227,44229,44231,44233],{"class":69,"line":11644},[67,44205,43997],{"class":73},[67,44207,40225],{"class":77},[67,44209,2369],{"class":73},[67,44211,2607],{"class":77},[67,44213,44006],{"class":73},[67,44215,33840],{"class":77},[67,44217,2369],{"class":73},[67,44219,44220],{"class":77},"288",[67,44222,44015],{"class":73},[67,44224,2189],{"class":77},[67,44226,2369],{"class":73},[67,44228,2195],{"class":77},[67,44230,44024],{"class":73},[67,44232,2195],{"class":77},[67,44234,39815],{"class":73},[67,44236,44237,44239,44242,44244,44246,44248,44250,44252,44255,44257,44259,44261,44263,44265,44267],{"class":69,"line":11650},[67,44238,43997],{"class":73},[67,44240,44241],{"class":77},"528",[67,44243,2369],{"class":73},[67,44245,36639],{"class":77},[67,44247,44006],{"class":73},[67,44249,22844],{"class":77},[67,44251,2369],{"class":73},[67,44253,44254],{"class":77},"320",[67,44256,44015],{"class":73},[67,44258,2189],{"class":77},[67,44260,2369],{"class":73},[67,44262,33840],{"class":77},[67,44264,44024],{"class":73},[67,44266,33840],{"class":77},[67,44268,39815],{"class":73},[67,44270,44271,44273,44275,44277,44279,44281,44283,44285,44287,44289,44291,44293,44295],{"class":69,"line":11664},[67,44272,39865],{"class":73},[67,44274,32651],{"class":7033},[67,44276,85],{"class":84},[67,44278,2071],{"class":77},[67,44280,2369],{"class":73},[67,44282,32706],{"class":7033},[67,44284,85],{"class":84},[67,44286,2077],{"class":77},[67,44288,2369],{"class":73},[67,44290,32660],{"class":7033},[67,44292,85],{"class":84},[67,44294,2209],{"class":77},[67,44296,829],{"class":73},[67,44298,44299],{"class":69,"line":11670},[67,44300,39894],{"class":73},[67,44302,44303,44305,44308,44310],{"class":69,"line":11697},[67,44304,32622],{"class":77},[67,44306,44307],{"class":73},".b5",[67,44309,85],{"class":84},[67,44311,39777],{"class":73},[67,44313,44314,44316,44319,44321,44323,44325,44327,44329,44331,44333,44335,44337,44339,44341,44343],{"class":69,"line":11706},[67,44315,43997],{"class":73},[67,44317,44318],{"class":77},"832",[67,44320,2369],{"class":73},[67,44322,36639],{"class":77},[67,44324,44006],{"class":73},[67,44326,22844],{"class":77},[67,44328,2369],{"class":73},[67,44330,44254],{"class":77},[67,44332,44015],{"class":73},[67,44334,2189],{"class":77},[67,44336,2369],{"class":73},[67,44338,33840],{"class":77},[67,44340,44024],{"class":73},[67,44342,33840],{"class":77},[67,44344,39815],{"class":73},[67,44346,44347,44349,44351,44353,44355,44357,44359,44361,44363,44365,44367,44369,44371,44373,44375],{"class":69,"line":11712},[67,44348,43997],{"class":73},[67,44350,44318],{"class":77},[67,44352,2369],{"class":73},[67,44354,36709],{"class":77},[67,44356,44006],{"class":73},[67,44358,43927],{"class":77},[67,44360,2369],{"class":73},[67,44362,36709],{"class":77},[67,44364,44015],{"class":73},[67,44366,2596],{"class":77},[67,44368,2369],{"class":73},[67,44370,33840],{"class":77},[67,44372,44024],{"class":73},[67,44374,33840],{"class":77},[67,44376,39815],{"class":73},[67,44378,44379,44382,44384,44386,44388],{"class":69,"line":11720},[67,44380,44381],{"class":73},"            nn.AdaptiveAvgPool2d((",[67,44383,2209],{"class":77},[67,44385,2369],{"class":73},[67,44387,2209],{"class":77},[67,44389,44390],{"class":73},")),\n",[67,44392,44393],{"class":69,"line":11725},[67,44394,40558],{"class":73},[67,44396,44397,44399,44402,44404,44406],{"class":69,"line":18401},[67,44398,40563],{"class":73},[67,44400,44401],{"class":77},"1024",[67,44403,2369],{"class":73},[67,44405,2437],{"class":77},[67,44407,829],{"class":73},[67,44409,44410],{"class":69,"line":18407},[67,44411,39894],{"class":73},[67,44413,44414],{"class":69,"line":18430},[67,44415,44416],{"class":2058},"        # 对模型参数初始化\n",[67,44418,44419,44421,44423,44425,44427],{"class":69,"line":18436},[67,44420,5225],{"class":84},[67,44422,40636],{"class":73},[67,44424,941],{"class":84},[67,44426,40641],{"class":77},[67,44428,40644],{"class":73},[67,44430,44431,44433,44435],{"class":69,"line":18459},[67,44432,6461],{"class":84},[67,44434,40656],{"class":77},[67,44436,40659],{"class":73},[67,44438,44439,44441,44444,44446,44449,44451,44453,44455,44457],{"class":69,"line":18473},[67,44440,40669],{"class":73},[67,44442,44443],{"class":7033},"mode",[67,44445,85],{"class":84},[67,44447,44448],{"class":114},"'fan_out'",[67,44450,2369],{"class":73},[67,44452,40672],{"class":7033},[67,44454,85],{"class":84},[67,44456,40677],{"class":114},[67,44458,829],{"class":73},[67,44460,44461],{"class":69,"line":18493},[67,44462,44463],{"class":2058},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[67,44465,44466],{"class":69,"line":18499},[67,44467,44468],{"class":2058},"                # ② mode = 'fan_out'决定使用的fan值：\n",[67,44470,44471],{"class":69,"line":18510},[67,44472,44473],{"class":2058},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[67,44475,44476],{"class":69,"line":18533},[67,44477,44478],{"class":2058},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[67,44480,44481],{"class":69,"line":18555},[67,44482,44483],{"class":2058},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[67,44485,44486],{"class":69,"line":18560},[67,44487,44488],{"class":2058},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[67,44490,44491,44493,44495,44497,44499,44501],{"class":69,"line":18566},[67,44492,40689],{"class":84},[67,44494,40692],{"class":73},[67,44496,40695],{"class":84},[67,44498,40698],{"class":84},[67,44500,40701],{"class":77},[67,44502,813],{"class":73},[67,44504,44505,44507,44509],{"class":69,"line":18580},[67,44506,40713],{"class":73},[67,44508,78],{"class":77},[67,44510,829],{"class":73},[67,44512,44513,44516,44518],{"class":69,"line":18593},[67,44514,44515],{"class":84},"                elif",[67,44517,40656],{"class":77},[67,44519,40732],{"class":73},[67,44521,44522,44525,44527,44529,44531],{"class":69,"line":18598},[67,44523,44524],{"class":73},"                    nn.init.normal_(m.weight,",[67,44526,78],{"class":77},[67,44528,2369],{"class":73},[67,44530,40754],{"class":77},[67,44532,829],{"class":73},[67,44534,44535,44538,44540,44542,44544,44546],{"class":69,"line":18612},[67,44536,44537],{"class":84},"                    if",[67,44539,40692],{"class":73},[67,44541,40695],{"class":84},[67,44543,40698],{"class":84},[67,44545,40701],{"class":77},[67,44547,813],{"class":73},[67,44549,44550,44553,44555],{"class":69,"line":18617},[67,44551,44552],{"class":73},"                        nn.init.constant_(m.bias,",[67,44554,78],{"class":77},[67,44556,829],{"class":73},[67,44558,44559],{"class":69,"line":18623},[67,44560,36934],{"class":2058},[67,44562,44563,44565,44567],{"class":69,"line":18628},[67,44564,32578],{"class":84},[67,44566,32870],{"class":110},[67,44568,32873],{"class":73},[67,44570,44571,44573,44575,44577],{"class":69,"line":18642},[67,44572,32878],{"class":73},[67,44574,85],{"class":84},[67,44576,32600],{"class":77},[67,44578,44579],{"class":73},".b1(x)\n",[67,44581,44582,44584,44586,44588],{"class":69,"line":18647},[67,44583,32878],{"class":73},[67,44585,85],{"class":84},[67,44587,32600],{"class":77},[67,44589,44590],{"class":73},".b2(x)\n",[67,44592,44593,44595,44597,44599],{"class":69,"line":18652},[67,44594,32878],{"class":73},[67,44596,85],{"class":84},[67,44598,32600],{"class":77},[67,44600,44601],{"class":73},".b3(x)\n",[67,44603,44604,44606,44608,44610],{"class":69,"line":18666},[67,44605,32878],{"class":73},[67,44607,85],{"class":84},[67,44609,32600],{"class":77},[67,44611,44612],{"class":73},".b4(x)\n",[67,44614,44615,44617,44619,44621],{"class":69,"line":18678},[67,44616,32878],{"class":73},[67,44618,85],{"class":84},[67,44620,32600],{"class":77},[67,44622,44623],{"class":73},".b5(x)\n",[67,44625,44626,44628],{"class":69,"line":18683},[67,44627,16550],{"class":84},[67,44629,32986],{"class":73},[67,44631,44632],{"class":69,"line":18696},[67,44633,631],{"emptyLinePlaceholder":630},[67,44635,44636],{"class":69,"line":18701},[67,44637,44638],{"class":2058},"# 模型展示\n",[67,44640,44641,44643,44645,44647,44649],{"class":69,"line":18706},[67,44642,1096],{"class":84},[67,44644,1099],{"class":77},[67,44646,4774],{"class":84},[67,44648,33001],{"class":114},[67,44650,813],{"class":73},[67,44652,44653,44655,44657,44659,44661,44663,44665,44667,44669],{"class":69,"line":18711},[67,44654,33013],{"class":73},[67,44656,85],{"class":84},[67,44658,32230],{"class":73},[67,44660,33020],{"class":114},[67,44662,3547],{"class":84},[67,44664,33025],{"class":73},[67,44666,3544],{"class":84},[67,44668,32255],{"class":114},[67,44670,829],{"class":73},[67,44672,44673,44675,44677],{"class":69,"line":18724},[67,44674,33065],{"class":73},[67,44676,85],{"class":84},[67,44678,44679],{"class":73},"GoogLeNet(Inception).to(device)\n",[67,44681,44682,44684,44686,44688,44690,44692,44694,44696],{"class":69,"line":18729},[67,44683,851],{"class":77},[67,44685,33077],{"class":73},[67,44687,2209],{"class":77},[67,44689,2369],{"class":73},[67,44691,33273],{"class":77},[67,44693,2369],{"class":73},[67,44695,33273],{"class":77},[67,44697,33090],{"class":73},[26,44699,44700],{"start":191},[29,44701,40951],{},[58,44703,44705],{"className":60,"code":44704,"language":62,"meta":63,"style":63},"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",[32,44706,44707,44713,44719,44729,44735,44745,44755,44765,44775,44785,44789,44800,44810,44814,44818,44822,44830,44842,44852,44868,44878,44910,44924,44934,44944,44948,44958,44972,44982,44992,45002,45008,45012,45016,45020,45024,45028,45036,45056,45060,45064,45068,45072,45076,45092,45096,45100,45108,45112,45116,45124,45128,45132,45136,45144,45148,45152,45156,45160,45168,45172,45180,45184,45192,45196,45204,45208,45216,45220,45224,45232,45236,45240,45244,45256,45280,45294,45298,45302,45306,45314,45318,45326,45330,45338,45342,45350,45354,45362,45366,45374,45378,45390,45394,45402,45406,45414,45418,45422,45426,45430,45438,45442,45458,45462,45470,45474,45478,45482,45486,45490,45494,45498,45514,45518,45530,45534,45546,45550,45562,45566,45574,45578,45586,45590,45594,45598,45604,45608,45616,45620,45636,45640,45648,45652,45668,45680,45684,45696,45700,45704,45712,45716,45720,45728,45732,45740,45744,45752,45756,45760,45802,45844,45848,45852,45868,45872,45888,45892,45896,45904,45908,45912,45924,45962,45966,45970,45978,45982,45996,46006,46012,46018,46024,46030,46034,46038,46044,46048,46052,46060,46064,46082,46086,46090,46094,46110,46114,46118,46122,46126,46130,46150,46170,46174,46178,46182,46190,46198,46202,46218,46238,46258,46262,46266,46274,46282,46286,46290,46294,46306,46310,46320,46328,46345],{"__ignoreMap":63},[67,44708,44709,44711],{"class":69,"line":70},[67,44710,622],{"class":84},[67,44712,33593],{"class":73},[67,44714,44715,44717],{"class":69,"line":191},[67,44716,622],{"class":84},[67,44718,33600],{"class":73},[67,44720,44721,44723,44725,44727],{"class":69,"line":202},[67,44722,622],{"class":84},[67,44724,33611],{"class":73},[67,44726,649],{"class":84},[67,44728,33616],{"class":73},[67,44730,44731,44733],{"class":69,"line":641},[67,44732,622],{"class":84},[67,44734,32175],{"class":73},[67,44736,44737,44739,44741,44743],{"class":69,"line":655},[67,44738,32515],{"class":84},[67,44740,33187],{"class":73},[67,44742,622],{"class":84},[67,44744,33633],{"class":73},[67,44746,44747,44749,44751,44753],{"class":69,"line":660},[67,44748,32515],{"class":84},[67,44750,33143],{"class":73},[67,44752,622],{"class":84},[67,44754,33148],{"class":73},[67,44756,44757,44759,44761,44763],{"class":69,"line":665},[67,44758,32515],{"class":84},[67,44760,33170],{"class":73},[67,44762,622],{"class":84},[67,44764,33175],{"class":73},[67,44766,44767,44769,44771,44773],{"class":69,"line":677},[67,44768,622],{"class":84},[67,44770,33187],{"class":73},[67,44772,649],{"class":84},[67,44774,33192],{"class":73},[67,44776,44777,44779,44781,44783],{"class":69,"line":683},[67,44778,622],{"class":84},[67,44780,33204],{"class":73},[67,44782,649],{"class":84},[67,44784,33209],{"class":73},[67,44786,44787],{"class":69,"line":689},[67,44788,33678],{"class":2058},[67,44790,44791,44793,44795,44797],{"class":69,"line":694},[67,44792,32515],{"class":84},[67,44794,33685],{"class":73},[67,44796,622],{"class":84},[67,44798,44799],{"class":73}," GoogLeNet, Inception\n",[67,44801,44802,44804,44806,44808],{"class":69,"line":700},[67,44803,32515],{"class":84},[67,44805,32518],{"class":73},[67,44807,622],{"class":84},[67,44809,32523],{"class":73},[67,44811,44812],{"class":69,"line":706},[67,44813,631],{"emptyLinePlaceholder":630},[67,44815,44816],{"class":69,"line":712},[67,44817,631],{"emptyLinePlaceholder":630},[67,44819,44820],{"class":69,"line":717},[67,44821,33713],{"class":2058},[67,44823,44824,44826,44828],{"class":69,"line":723},[67,44825,801],{"class":84},[67,44827,33720],{"class":110},[67,44829,33723],{"class":73},[67,44831,44832,44834,44836,44838,44840],{"class":69,"line":729},[67,44833,33728],{"class":73},[67,44835,85],{"class":84},[67,44837,33227],{"class":73},[67,44839,33235],{"class":114},[67,44841,33238],{"class":73},[67,44843,44844,44846,44848,44850],{"class":69,"line":735},[67,44845,33741],{"class":7033},[67,44847,85],{"class":84},[67,44849,33248],{"class":77},[67,44851,33238],{"class":73},[67,44853,44854,44856,44858,44860,44862,44864,44866],{"class":69,"line":741},[67,44855,33752],{"class":7033},[67,44857,85],{"class":84},[67,44859,33265],{"class":73},[67,44861,33268],{"class":7033},[67,44863,85],{"class":84},[67,44865,37217],{"class":77},[67,44867,33276],{"class":73},[67,44869,44870,44872,44874,44876],{"class":69,"line":747},[67,44871,33769],{"class":7033},[67,44873,85],{"class":84},[67,44875,33248],{"class":77},[67,44877,829],{"class":73},[67,44879,44880,44882,44884,44886,44888,44890,44892,44894,44896,44898,44900,44902,44904,44906,44908],{"class":69,"line":753},[67,44881,33780],{"class":73},[67,44883,85],{"class":84},[67,44885,33785],{"class":73},[67,44887,33788],{"class":77},[67,44889,854],{"class":73},[67,44891,33793],{"class":77},[67,44893,965],{"class":84},[67,44895,9174],{"class":77},[67,44897,33800],{"class":73},[67,44899,33788],{"class":77},[67,44901,854],{"class":73},[67,44903,33807],{"class":77},[67,44905,965],{"class":84},[67,44907,9174],{"class":77},[67,44909,33814],{"class":73},[67,44911,44912,44914,44916,44918,44920,44922],{"class":69,"line":758},[67,44913,33819],{"class":73},[67,44915,85],{"class":84},[67,44917,33824],{"class":73},[67,44919,33309],{"class":7033},[67,44921,85],{"class":84},[67,44923,33314],{"class":73},[67,44925,44926,44928,44930,44932],{"class":69,"line":764},[67,44927,33835],{"class":7033},[67,44929,85],{"class":84},[67,44931,2189],{"class":77},[67,44933,33238],{"class":73},[67,44935,44936,44938,44940,44942],{"class":69,"line":770},[67,44937,33847],{"class":7033},[67,44939,85],{"class":84},[67,44941,33248],{"class":77},[67,44943,33238],{"class":73},[67,44945,44946],{"class":69,"line":776},[67,44947,33858],{"class":2058},[67,44949,44950,44952,44954,44956],{"class":69,"line":782},[67,44951,33863],{"class":7033},[67,44953,85],{"class":84},[67,44955,2386],{"class":77},[67,44957,829],{"class":73},[67,44959,44960,44962,44964,44966,44968,44970],{"class":69,"line":788},[67,44961,33874],{"class":73},[67,44963,85],{"class":84},[67,44965,33306],{"class":73},[67,44967,33309],{"class":7033},[67,44969,85],{"class":84},[67,44971,33885],{"class":73},[67,44973,44974,44976,44978,44980],{"class":69,"line":793},[67,44975,33890],{"class":7033},[67,44977,85],{"class":84},[67,44979,2189],{"class":77},[67,44981,33238],{"class":73},[67,44983,44984,44986,44988,44990],{"class":69,"line":798},[67,44985,33901],{"class":7033},[67,44987,85],{"class":84},[67,44989,33248],{"class":77},[67,44991,33238],{"class":73},[67,44993,44994,44996,44998,45000],{"class":69,"line":816},[67,44995,33912],{"class":7033},[67,44997,85],{"class":84},[67,44999,2386],{"class":77},[67,45001,829],{"class":73},[67,45003,45004,45006],{"class":69,"line":832},[67,45005,5910],{"class":84},[67,45007,33925],{"class":73},[67,45009,45010],{"class":69,"line":843},[67,45011,631],{"emptyLinePlaceholder":630},[67,45013,45014],{"class":69,"line":848},[67,45015,33934],{"class":2058},[67,45017,45018],{"class":69,"line":863},[67,45019,33939],{"class":2058},[67,45021,45022],{"class":69,"line":876},[67,45023,631],{"emptyLinePlaceholder":630},[67,45025,45026],{"class":69,"line":889},[67,45027,33948],{"class":2058},[67,45029,45030,45032,45034],{"class":69,"line":894},[67,45031,801],{"class":84},[67,45033,33955],{"class":110},[67,45035,33958],{"class":73},[67,45037,45038,45040,45042,45044,45046,45048,45050,45052,45054],{"class":69,"line":911},[67,45039,33013],{"class":73},[67,45041,85],{"class":84},[67,45043,32230],{"class":73},[67,45045,33020],{"class":114},[67,45047,3547],{"class":84},[67,45049,33025],{"class":73},[67,45051,3544],{"class":84},[67,45053,33977],{"class":114},[67,45055,829],{"class":73},[67,45057,45058],{"class":69,"line":927},[67,45059,631],{"emptyLinePlaceholder":630},[67,45061,45062],{"class":69,"line":932},[67,45063,631],{"emptyLinePlaceholder":630},[67,45065,45066],{"class":69,"line":955},[67,45067,33992],{"class":2058},[67,45069,45070],{"class":69,"line":971},[67,45071,33997],{"class":2058},[67,45073,45074],{"class":69,"line":1010},[67,45075,34002],{"class":2058},[67,45077,45078,45080,45082,45084,45086,45088,45090],{"class":69,"line":1016},[67,45079,34007],{"class":73},[67,45081,85],{"class":84},[67,45083,34012],{"class":73},[67,45085,34015],{"class":7033},[67,45087,85],{"class":84},[67,45089,34020],{"class":77},[67,45091,829],{"class":73},[67,45093,45094],{"class":69,"line":1021},[67,45095,631],{"emptyLinePlaceholder":630},[67,45097,45098],{"class":69,"line":1034},[67,45099,34031],{"class":2058},[67,45101,45102,45104,45106],{"class":69,"line":1053},[67,45103,34036],{"class":73},[67,45105,85],{"class":84},[67,45107,34041],{"class":73},[67,45109,45110],{"class":69,"line":1070},[67,45111,631],{"emptyLinePlaceholder":630},[67,45113,45114],{"class":69,"line":1083},[67,45115,34050],{"class":2058},[67,45117,45118,45120,45122],{"class":69,"line":1088},[67,45119,33065],{"class":73},[67,45121,85],{"class":84},[67,45123,34059],{"class":73},[67,45125,45126],{"class":69,"line":1093},[67,45127,34064],{"class":2058},[67,45129,45130],{"class":69,"line":1110},[67,45131,34069],{"class":2058},[67,45133,45134],{"class":69,"line":11603},[67,45135,34074],{"class":2058},[67,45137,45138,45140,45142],{"class":69,"line":11612},[67,45139,34079],{"class":73},[67,45141,85],{"class":84},[67,45143,34084],{"class":73},[67,45145,45146],{"class":69,"line":11617},[67,45147,631],{"emptyLinePlaceholder":630},[67,45149,45150],{"class":69,"line":11623},[67,45151,631],{"emptyLinePlaceholder":630},[67,45153,45154],{"class":69,"line":11644},[67,45155,34097],{"class":2058},[67,45157,45158],{"class":69,"line":11650},[67,45159,34102],{"class":2058},[67,45161,45162,45164,45166],{"class":69,"line":11664},[67,45163,34107],{"class":73},[67,45165,85],{"class":84},[67,45167,34112],{"class":77},[67,45169,45170],{"class":69,"line":11670},[67,45171,34117],{"class":2058},[67,45173,45174,45176,45178],{"class":69,"line":11697},[67,45175,34122],{"class":73},[67,45177,85],{"class":84},[67,45179,34127],{"class":73},[67,45181,45182],{"class":69,"line":11706},[67,45183,34132],{"class":2058},[67,45185,45186,45188,45190],{"class":69,"line":11712},[67,45187,34137],{"class":73},[67,45189,85],{"class":84},[67,45191,34127],{"class":73},[67,45193,45194],{"class":69,"line":11720},[67,45195,34146],{"class":2058},[67,45197,45198,45200,45202],{"class":69,"line":11725},[67,45199,34151],{"class":73},[67,45201,85],{"class":84},[67,45203,34127],{"class":73},[67,45205,45206],{"class":69,"line":18401},[67,45207,34160],{"class":2058},[67,45209,45210,45212,45214],{"class":69,"line":18407},[67,45211,34165],{"class":73},[67,45213,85],{"class":84},[67,45215,34127],{"class":73},[67,45217,45218],{"class":69,"line":18430},[67,45219,631],{"emptyLinePlaceholder":630},[67,45221,45222],{"class":69,"line":18436},[67,45223,34178],{"class":2058},[67,45225,45226,45228,45230],{"class":69,"line":18459},[67,45227,34183],{"class":73},[67,45229,85],{"class":84},[67,45231,34188],{"class":73},[67,45233,45234],{"class":69,"line":18473},[67,45235,631],{"emptyLinePlaceholder":630},[67,45237,45238],{"class":69,"line":18493},[67,45239,631],{"emptyLinePlaceholder":630},[67,45241,45242],{"class":69,"line":18499},[67,45243,34201],{"class":2058},[67,45245,45246,45248,45250,45252,45254],{"class":69,"line":18510},[67,45247,935],{"class":84},[67,45249,34208],{"class":73},[67,45251,941],{"class":84},[67,45253,944],{"class":77},[67,45255,34215],{"class":73},[67,45257,45258,45260,45262,45264,45266,45268,45270,45272,45274,45276,45278],{"class":69,"line":18533},[67,45259,34220],{"class":77},[67,45261,854],{"class":73},[67,45263,34225],{"class":114},[67,45265,34228],{"class":77},[67,45267,2573],{"class":114},[67,45269,34228],{"class":77},[67,45271,2243],{"class":114},[67,45273,34237],{"class":73},[67,45275,1863],{"class":84},[67,45277,2209],{"class":77},[67,45279,1050],{"class":73},[67,45281,45282,45284,45286,45288,45290,45292],{"class":69,"line":18555},[67,45283,34220],{"class":77},[67,45285,854],{"class":73},[67,45287,34252],{"class":114},[67,45289,965],{"class":84},[67,45291,2437],{"class":77},[67,45293,829],{"class":73},[67,45295,45296],{"class":69,"line":18560},[67,45297,631],{"emptyLinePlaceholder":630},[67,45299,45300],{"class":69,"line":18566},[67,45301,34267],{"class":2058},[67,45303,45304],{"class":69,"line":18580},[67,45305,34272],{"class":2058},[67,45307,45308,45310,45312],{"class":69,"line":18593},[67,45309,34277],{"class":73},[67,45311,85],{"class":84},[67,45313,34112],{"class":77},[67,45315,45316],{"class":69,"line":18598},[67,45317,34286],{"class":2058},[67,45319,45320,45322,45324],{"class":69,"line":18612},[67,45321,34291],{"class":73},[67,45323,85],{"class":84},[67,45325,4909],{"class":77},[67,45327,45328],{"class":69,"line":18617},[67,45329,34300],{"class":2058},[67,45331,45332,45334,45336],{"class":69,"line":18623},[67,45333,34305],{"class":73},[67,45335,85],{"class":84},[67,45337,34112],{"class":77},[67,45339,45340],{"class":69,"line":18628},[67,45341,34314],{"class":2058},[67,45343,45344,45346,45348],{"class":69,"line":18642},[67,45345,34319],{"class":73},[67,45347,85],{"class":84},[67,45349,4909],{"class":77},[67,45351,45352],{"class":69,"line":18647},[67,45353,34328],{"class":2058},[67,45355,45356,45358,45360],{"class":69,"line":18652},[67,45357,34333],{"class":73},[67,45359,85],{"class":84},[67,45361,4909],{"class":77},[67,45363,45364],{"class":69,"line":18666},[67,45365,34342],{"class":2058},[67,45367,45368,45370,45372],{"class":69,"line":18678},[67,45369,34347],{"class":73},[67,45371,85],{"class":84},[67,45373,4909],{"class":77},[67,45375,45376],{"class":69,"line":18683},[67,45377,34356],{"class":2058},[67,45379,45380,45382,45384,45386,45388],{"class":69,"line":18696},[67,45381,5225],{"class":84},[67,45383,33373],{"class":73},[67,45385,941],{"class":84},[67,45387,33378],{"class":77},[67,45389,34369],{"class":73},[67,45391,45392],{"class":69,"line":18701},[67,45393,34374],{"class":2058},[67,45395,45396,45398,45400],{"class":69,"line":18706},[67,45397,34379],{"class":73},[67,45399,85],{"class":84},[67,45401,34384],{"class":73},[67,45403,45404],{"class":69,"line":18711},[67,45405,34389],{"class":2058},[67,45407,45408,45410,45412],{"class":69,"line":18724},[67,45409,34394],{"class":73},[67,45411,85],{"class":84},[67,45413,34399],{"class":73},[67,45415,45416],{"class":69,"line":18729},[67,45417,34405],{"class":2058},[67,45419,45420],{"class":69,"line":34402},[67,45421,34411],{"class":73},[67,45423,45424],{"class":69,"line":34408},[67,45425,34417],{"class":2058},[67,45427,45428],{"class":69,"line":34414},[67,45429,34423],{"class":2058},[67,45431,45432,45434,45436],{"class":69,"line":34420},[67,45433,34429],{"class":73},[67,45435,85],{"class":84},[67,45437,34434],{"class":73},[67,45439,45440],{"class":69,"line":34426},[67,45441,34440],{"class":2058},[67,45443,45444,45446,45448,45450,45452,45454,45456],{"class":69,"line":34437},[67,45445,34446],{"class":73},[67,45447,85],{"class":84},[67,45449,34451],{"class":73},[67,45451,34454],{"class":7033},[67,45453,85],{"class":84},[67,45455,2209],{"class":77},[67,45457,829],{"class":73},[67,45459,45460],{"class":69,"line":34443},[67,45461,34466],{"class":2058},[67,45463,45464,45466,45468],{"class":69,"line":34463},[67,45465,34472],{"class":73},[67,45467,85],{"class":84},[67,45469,34477],{"class":73},[67,45471,45472],{"class":69,"line":34469},[67,45473,34483],{"class":2058},[67,45475,45476],{"class":69,"line":34480},[67,45477,34489],{"class":73},[67,45479,45480],{"class":69,"line":34486},[67,45481,34495],{"class":2058},[67,45483,45484],{"class":69,"line":34492},[67,45485,34501],{"class":73},[67,45487,45488],{"class":69,"line":34498},[67,45489,34507],{"class":2058},[67,45491,45492],{"class":69,"line":34504},[67,45493,34513],{"class":73},[67,45495,45496],{"class":69,"line":34510},[67,45497,34519],{"class":2058},[67,45499,45500,45502,45504,45506,45508,45510,45512],{"class":69,"line":34516},[67,45501,34525],{"class":73},[67,45503,11283],{"class":84},[67,45505,34530],{"class":73},[67,45507,965],{"class":84},[67,45509,34535],{"class":73},[67,45511,78],{"class":77},[67,45513,829],{"class":73},[67,45515,45516],{"class":69,"line":34522},[67,45517,34545],{"class":2058},[67,45519,45520,45522,45524,45526,45528],{"class":69,"line":34542},[67,45521,34551],{"class":73},[67,45523,11283],{"class":84},[67,45525,34556],{"class":73},[67,45527,4774],{"class":84},[67,45529,34561],{"class":73},[67,45531,45532],{"class":69,"line":34548},[67,45533,34567],{"class":2058},[67,45535,45536,45538,45540,45542,45544],{"class":69,"line":34564},[67,45537,34573],{"class":73},[67,45539,11283],{"class":84},[67,45541,34535],{"class":73},[67,45543,78],{"class":77},[67,45545,829],{"class":73},[67,45547,45548],{"class":69,"line":34570},[67,45549,34587],{"class":2058},[67,45551,45552,45554,45556,45558,45560],{"class":69,"line":34584},[67,45553,5225],{"class":84},[67,45555,34595],{"class":73},[67,45557,941],{"class":84},[67,45559,33378],{"class":77},[67,45561,34602],{"class":73},[67,45563,45564],{"class":69,"line":34590},[67,45565,34608],{"class":2058},[67,45567,45568,45570,45572],{"class":69,"line":34605},[67,45569,34379],{"class":73},[67,45571,85],{"class":84},[67,45573,34384],{"class":73},[67,45575,45576],{"class":69,"line":34611},[67,45577,34623],{"class":2058},[67,45579,45580,45582,45584],{"class":69,"line":34620},[67,45581,34394],{"class":73},[67,45583,85],{"class":84},[67,45585,34399],{"class":73},[67,45587,45588],{"class":69,"line":34626},[67,45589,34638],{"class":2058},[67,45591,45592],{"class":69,"line":34635},[67,45593,34644],{"class":73},[67,45595,45596],{"class":69,"line":34641},[67,45597,38124],{"class":2058},[67,45599,45600,45602],{"class":69,"line":34647},[67,45601,34650],{"class":84},[67,45603,34653],{"class":73},[67,45605,45606],{"class":69,"line":34656},[67,45607,34659],{"class":2058},[67,45609,45610,45612,45614],{"class":69,"line":34662},[67,45611,38139],{"class":73},[67,45613,85],{"class":84},[67,45615,34434],{"class":73},[67,45617,45618],{"class":69,"line":34673},[67,45619,34676],{"class":2058},[67,45621,45622,45624,45626,45628,45630,45632,45634],{"class":69,"line":34679},[67,45623,38152],{"class":73},[67,45625,85],{"class":84},[67,45627,34451],{"class":73},[67,45629,34454],{"class":7033},[67,45631,85],{"class":84},[67,45633,2209],{"class":77},[67,45635,829],{"class":73},[67,45637,45638],{"class":69,"line":34698},[67,45639,34701],{"class":2058},[67,45641,45642,45644,45646],{"class":69,"line":34704},[67,45643,38173],{"class":73},[67,45645,85],{"class":84},[67,45647,34477],{"class":73},[67,45649,45650],{"class":69,"line":34715},[67,45651,34718],{"class":2058},[67,45653,45654,45656,45658,45660,45662,45664,45666],{"class":69,"line":34721},[67,45655,38186],{"class":73},[67,45657,11283],{"class":84},[67,45659,38191],{"class":73},[67,45661,965],{"class":84},[67,45663,34535],{"class":73},[67,45665,78],{"class":77},[67,45667,829],{"class":73},[67,45669,45670,45672,45674,45676,45678],{"class":69,"line":34741},[67,45671,38204],{"class":73},[67,45673,11283],{"class":84},[67,45675,34556],{"class":73},[67,45677,4774],{"class":84},[67,45679,34561],{"class":73},[67,45681,45682],{"class":69,"line":34757},[67,45683,38217],{"class":2058},[67,45685,45686,45688,45690,45692,45694],{"class":69,"line":34763},[67,45687,38222],{"class":73},[67,45689,11283],{"class":84},[67,45691,34535],{"class":73},[67,45693,78],{"class":77},[67,45695,829],{"class":73},[67,45697,45698],{"class":69,"line":34777},[67,45699,34780],{"class":2058},[67,45701,45702],{"class":69,"line":34783},[67,45703,34786],{"class":2058},[67,45705,45706,45708,45710],{"class":69,"line":34789},[67,45707,34792],{"class":73},[67,45709,2573],{"class":84},[67,45711,34797],{"class":73},[67,45713,45714],{"class":69,"line":34800},[67,45715,34803],{"class":2058},[67,45717,45718],{"class":69,"line":34806},[67,45719,34809],{"class":2058},[67,45721,45722,45724,45726],{"class":69,"line":34812},[67,45723,34815],{"class":73},[67,45725,2573],{"class":84},[67,45727,34797],{"class":73},[67,45729,45730],{"class":69,"line":34822},[67,45731,34825],{"class":2058},[67,45733,45734,45736,45738],{"class":69,"line":34828},[67,45735,34831],{"class":73},[67,45737,2573],{"class":84},[67,45739,34836],{"class":73},[67,45741,45742],{"class":69,"line":34839},[67,45743,34842],{"class":2058},[67,45745,45746,45748,45750],{"class":69,"line":34845},[67,45747,34848],{"class":73},[67,45749,2573],{"class":84},[67,45751,34836],{"class":73},[67,45753,45754],{"class":69,"line":34855},[67,45755,631],{"emptyLinePlaceholder":630},[67,45757,45758],{"class":69,"line":34860},[67,45759,34863],{"class":2058},[67,45761,45762,45764,45766,45768,45770,45772,45774,45776,45778,45780,45782,45784,45786,45788,45790,45792,45794,45796,45798,45800],{"class":69,"line":34866},[67,45763,34220],{"class":77},[67,45765,854],{"class":73},[67,45767,5414],{"class":114},[67,45769,34228],{"class":77},[67,45771,34877],{"class":114},[67,45773,2885],{"class":77},[67,45775,34882],{"class":84},[67,45777,2934],{"class":77},[67,45779,34887],{"class":114},[67,45781,2885],{"class":77},[67,45783,34882],{"class":84},[67,45785,2934],{"class":77},[67,45787,5414],{"class":114},[67,45789,34898],{"class":73},[67,45791,1863],{"class":84},[67,45793,2209],{"class":77},[67,45795,34905],{"class":73},[67,45797,1863],{"class":84},[67,45799,2209],{"class":77},[67,45801,34912],{"class":73},[67,45803,45804,45806,45808,45810,45812,45814,45816,45818,45820,45822,45824,45826,45828,45830,45832,45834,45836,45838,45840,45842],{"class":69,"line":34915},[67,45805,34220],{"class":77},[67,45807,854],{"class":73},[67,45809,5414],{"class":114},[67,45811,34228],{"class":77},[67,45813,34926],{"class":114},[67,45815,2885],{"class":77},[67,45817,34882],{"class":84},[67,45819,2934],{"class":77},[67,45821,34935],{"class":114},[67,45823,2885],{"class":77},[67,45825,34882],{"class":84},[67,45827,2934],{"class":77},[67,45829,5414],{"class":114},[67,45831,34946],{"class":73},[67,45833,1863],{"class":84},[67,45835,2209],{"class":77},[67,45837,34953],{"class":73},[67,45839,1863],{"class":84},[67,45841,2209],{"class":77},[67,45843,34912],{"class":73},[67,45845,45846],{"class":69,"line":34962},[67,45847,631],{"emptyLinePlaceholder":630},[67,45849,45850],{"class":69,"line":34967},[67,45851,34970],{"class":2058},[67,45853,45854,45856,45858,45860,45862,45864,45866],{"class":69,"line":34973},[67,45855,4329],{"class":84},[67,45857,34978],{"class":73},[67,45859,1863],{"class":84},[67,45861,2209],{"class":77},[67,45863,2928],{"class":73},[67,45865,2948],{"class":84},[67,45867,34989],{"class":73},[67,45869,45870],{"class":69,"line":34992},[67,45871,34995],{"class":2058},[67,45873,45874,45876,45878,45880,45882,45884,45886],{"class":69,"line":34998},[67,45875,35001],{"class":73},[67,45877,2041],{"class":77},[67,45879,85],{"class":84},[67,45881,35008],{"class":73},[67,45883,1863],{"class":84},[67,45885,2209],{"class":77},[67,45887,35015],{"class":73},[67,45889,45890],{"class":69,"line":35018},[67,45891,35021],{"class":2058},[67,45893,45894],{"class":69,"line":35024},[67,45895,35027],{"class":2058},[67,45897,45898,45900,45902],{"class":69,"line":35030},[67,45899,35033],{"class":73},[67,45901,85],{"class":84},[67,45903,34084],{"class":73},[67,45905,45906],{"class":69,"line":35040},[67,45907,631],{"emptyLinePlaceholder":630},[67,45909,45910],{"class":69,"line":35045},[67,45911,35048],{"class":2058},[67,45913,45914,45916,45918,45920,45922],{"class":69,"line":35051},[67,45915,35054],{"class":73},[67,45917,85],{"class":84},[67,45919,35059],{"class":73},[67,45921,1863],{"class":84},[67,45923,35064],{"class":73},[67,45925,45926,45928,45930,45932,45934,45936,45938,45940,45942,45944,45946,45948,45950,45952,45954,45956,45958,45960],{"class":69,"line":35067},[67,45927,34220],{"class":77},[67,45929,854],{"class":73},[67,45931,35074],{"class":114},[67,45933,2885],{"class":77},[67,45935,35079],{"class":84},[67,45937,2934],{"class":77},[67,45939,2533],{"class":114},[67,45941,2885],{"class":77},[67,45943,35079],{"class":84},[67,45945,2934],{"class":77},[67,45947,35092],{"class":114},[67,45949,35095],{"class":73},[67,45951,35098],{"class":84},[67,45953,2896],{"class":77},[67,45955,35103],{"class":73},[67,45957,2319],{"class":84},[67,45959,2896],{"class":77},[67,45961,1050],{"class":73},[67,45963,45964],{"class":69,"line":35112},[67,45965,38501],{"class":2058},[67,45967,45968],{"class":69,"line":35118},[67,45969,38506],{"class":2058},[67,45971,45972,45974,45976],{"class":69,"line":35124},[67,45973,38511],{"class":73},[67,45975,35136],{"class":114},[67,45977,829],{"class":73},[67,45979,45980],{"class":69,"line":35130},[67,45981,35156],{"class":2058},[67,45983,45984,45986,45988,45990,45992,45994],{"class":69,"line":35141},[67,45985,35162],{"class":73},[67,45987,85],{"class":84},[67,45989,35167],{"class":73},[67,45991,35170],{"class":7033},[67,45993,85],{"class":84},[67,45995,3400],{"class":73},[67,45997,45998,46000,46002,46004],{"class":69,"line":35147},[67,45999,35180],{"class":114},[67,46001,2848],{"class":73},[67,46003,35185],{"class":77},[67,46005,35188],{"class":73},[67,46007,46008,46010],{"class":69,"line":35153},[67,46009,35194],{"class":114},[67,46011,35197],{"class":73},[67,46013,46014,46016],{"class":69,"line":35159},[67,46015,35203],{"class":114},[67,46017,35206],{"class":73},[67,46019,46020,46022],{"class":69,"line":35177},[67,46021,35212],{"class":114},[67,46023,35215],{"class":73},[67,46025,46026,46028],{"class":69,"line":35191},[67,46027,35221],{"class":114},[67,46029,35224],{"class":73},[67,46031,46032],{"class":69,"line":35200},[67,46033,35230],{"class":73},[67,46035,46036],{"class":69,"line":35209},[67,46037,35236],{"class":2058},[67,46039,46040,46042],{"class":69,"line":35218},[67,46041,5910],{"class":84},[67,46043,35244],{"class":73},[67,46045,46046],{"class":69,"line":35227},[67,46047,631],{"emptyLinePlaceholder":630},[67,46049,46050],{"class":69,"line":35233},[67,46051,35255],{"class":2058},[67,46053,46054,46056,46058],{"class":69,"line":35239},[67,46055,801],{"class":84},[67,46057,35263],{"class":110},[67,46059,35266],{"class":73},[67,46061,46062],{"class":69,"line":35247},[67,46063,35272],{"class":2058},[67,46065,46066,46068,46070,46072,46074,46076,46078,46080],{"class":69,"line":35252},[67,46067,35278],{"class":73},[67,46069,33464],{"class":7033},[67,46071,85],{"class":84},[67,46073,854],{"class":73},[67,46075,2488],{"class":77},[67,46077,2369],{"class":73},[67,46079,1047],{"class":77},[67,46081,1050],{"class":73},[67,46083,46084],{"class":69,"line":35258},[67,46085,35298],{"class":2058},[67,46087,46088],{"class":69,"line":35269},[67,46089,35304],{"class":2058},[67,46091,46092],{"class":69,"line":35275},[67,46093,35310],{"class":2058},[67,46095,46096,46098,46100,46102,46104,46106,46108],{"class":69,"line":35295},[67,46097,33498],{"class":73},[67,46099,2209],{"class":77},[67,46101,2369],{"class":73},[67,46103,2077],{"class":77},[67,46105,2369],{"class":73},[67,46107,2209],{"class":77},[67,46109,829],{"class":73},[67,46111,46112],{"class":69,"line":35301},[67,46113,35333],{"class":2058},[67,46115,46116],{"class":69,"line":35307},[67,46117,35339],{"class":2058},[67,46119,46120],{"class":69,"line":35313},[67,46121,35345],{"class":2058},[67,46123,46124],{"class":69,"line":35330},[67,46125,35351],{"class":2058},[67,46127,46128],{"class":69,"line":35336},[67,46129,35357],{"class":2058},[67,46131,46132,46134,46136,46138,46140,46142,46144,46146,46148],{"class":69,"line":35342},[67,46133,35363],{"class":73},[67,46135,35366],{"class":114},[67,46137,35369],{"class":73},[67,46139,35372],{"class":114},[67,46141,2369],{"class":73},[67,46143,35377],{"class":7033},[67,46145,85],{"class":84},[67,46147,35382],{"class":114},[67,46149,829],{"class":73},[67,46151,46152,46154,46156,46158,46160,46162,46164,46166,46168],{"class":69,"line":35348},[67,46153,35363],{"class":73},[67,46155,35366],{"class":114},[67,46157,35394],{"class":73},[67,46159,35397],{"class":114},[67,46161,2369],{"class":73},[67,46163,35377],{"class":7033},[67,46165,85],{"class":84},[67,46167,35406],{"class":114},[67,46169,829],{"class":73},[67,46171,46172],{"class":69,"line":35354},[67,46173,35414],{"class":2058},[67,46175,46176],{"class":69,"line":35360},[67,46177,35420],{"class":73},[67,46179,46180],{"class":69,"line":35387},[67,46181,35426],{"class":2058},[67,46183,46184,46186,46188],{"class":69,"line":35411},[67,46185,35432],{"class":73},[67,46187,35435],{"class":114},[67,46189,829],{"class":73},[67,46191,46192,46194,46196],{"class":69,"line":35417},[67,46193,35443],{"class":73},[67,46195,35446],{"class":114},[67,46197,829],{"class":73},[67,46199,46200],{"class":69,"line":35423},[67,46201,35454],{"class":2058},[67,46203,46204,46206,46208,46210,46212,46214,46216],{"class":69,"line":35429},[67,46205,33498],{"class":73},[67,46207,2209],{"class":77},[67,46209,2369],{"class":73},[67,46211,2077],{"class":77},[67,46213,2369],{"class":73},[67,46215,2077],{"class":77},[67,46217,829],{"class":73},[67,46219,46220,46222,46224,46226,46228,46230,46232,46234,46236],{"class":69,"line":35440},[67,46221,35363],{"class":73},[67,46223,35366],{"class":114},[67,46225,35481],{"class":73},[67,46227,35372],{"class":114},[67,46229,2369],{"class":73},[67,46231,35377],{"class":7033},[67,46233,85],{"class":84},[67,46235,35492],{"class":114},[67,46237,829],{"class":73},[67,46239,46240,46242,46244,46246,46248,46250,46252,46254,46256],{"class":69,"line":35451},[67,46241,35363],{"class":73},[67,46243,35366],{"class":114},[67,46245,35504],{"class":73},[67,46247,35397],{"class":114},[67,46249,2369],{"class":73},[67,46251,35377],{"class":7033},[67,46253,85],{"class":84},[67,46255,35515],{"class":114},[67,46257,829],{"class":73},[67,46259,46260],{"class":69,"line":35457},[67,46261,35523],{"class":2058},[67,46263,46264],{"class":69,"line":35474},[67,46265,35420],{"class":73},[67,46267,46268,46270,46272],{"class":69,"line":35497},[67,46269,35432],{"class":73},[67,46271,35366],{"class":114},[67,46273,829],{"class":73},[67,46275,46276,46278,46280],{"class":69,"line":35520},[67,46277,35443],{"class":73},[67,46279,35545],{"class":114},[67,46281,829],{"class":73},[67,46283,46284],{"class":69,"line":35526},[67,46285,35553],{"class":73},[67,46287,46288],{"class":69,"line":35531},[67,46289,631],{"emptyLinePlaceholder":630},[67,46291,46292],{"class":69,"line":35540},[67,46293,35564],{"class":2058},[67,46295,46296,46298,46300,46302,46304],{"class":69,"line":35550},[67,46297,1096],{"class":84},[67,46299,1099],{"class":77},[67,46301,4774],{"class":84},[67,46303,33001],{"class":114},[67,46305,813],{"class":73},[67,46307,46308],{"class":69,"line":35556},[67,46309,35583],{"class":2058},[67,46311,46312,46315,46317],{"class":69,"line":35561},[67,46313,46314],{"class":73},"    GoogLeNet",[67,46316,85],{"class":84},[67,46318,46319],{"class":73},"GoogLeNet(Inception)\n",[67,46321,46322,46324,46326],{"class":69,"line":35567},[67,46323,35600],{"class":73},[67,46325,85],{"class":84},[67,46327,35605],{"class":73},[67,46329,46330,46332,46334,46337,46339,46341,46343],{"class":69,"line":35580},[67,46331,35162],{"class":73},[67,46333,85],{"class":84},[67,46335,46336],{"class":73},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[67,46338,35618],{"class":7033},[67,46340,85],{"class":84},[67,46342,2939],{"class":77},[67,46344,829],{"class":73},[67,46346,46347],{"class":69,"line":35586},[67,46348,35630],{"class":73},[26,46350,46351],{"start":202},[29,46352,42342],{},[58,46354,46356],{"className":60,"code":46355,"language":62,"meta":63,"style":63},"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",[32,46357,46358,46364,46374,46384,46388,46398,46409,46413,46417,46421,46429,46445,46455,46471,46481,46495,46499,46509,46519,46529,46535,46539,46543,46551,46555,46571,46579,46583,46587,46595,46603,46607,46611,46615,46619,46625,46629,46639,46647,46655,46659,46663,46667,46675,46679,46695,46699,46703,46707,46719,46723,46735,46739,46743,46755,46759,46769,46773,46777,46789,46793,46801,46805,46809,46817,46821,46829,46833,46837,46841,46845,46849,46865,46873,46877,46881,46929,46935,46939,46949,46957,46965,46969,46973,46977,46981,46989,46993,47009,47013,47021,47029],{"__ignoreMap":63},[67,46359,46360,46362],{"class":69,"line":70},[67,46361,622],{"class":84},[67,46363,32175],{"class":73},[67,46365,46366,46368,46370,46372],{"class":69,"line":191},[67,46367,622],{"class":84},[67,46369,33187],{"class":73},[67,46371,649],{"class":84},[67,46373,33192],{"class":73},[67,46375,46376,46378,46380,46382],{"class":69,"line":202},[67,46377,32515],{"class":84},[67,46379,33170],{"class":73},[67,46381,622],{"class":84},[67,46383,33175],{"class":73},[67,46385,46386],{"class":69,"line":641},[67,46387,35691],{"class":2058},[67,46389,46390,46392,46394,46396],{"class":69,"line":655},[67,46391,32515],{"class":84},[67,46393,33143],{"class":73},[67,46395,622],{"class":84},[67,46397,33148],{"class":73},[67,46399,46400,46402,46404,46406],{"class":69,"line":660},[67,46401,32515],{"class":84},[67,46403,33685],{"class":73},[67,46405,622],{"class":84},[67,46407,46408],{"class":73}," GoogLeNet,Inception\n",[67,46410,46411],{"class":69,"line":665},[67,46412,631],{"emptyLinePlaceholder":630},[67,46414,46415],{"class":69,"line":677},[67,46416,631],{"emptyLinePlaceholder":630},[67,46418,46419],{"class":69,"line":683},[67,46420,35720],{"class":2058},[67,46422,46423,46425,46427],{"class":69,"line":689},[67,46424,801],{"class":84},[67,46426,35727],{"class":110},[67,46428,33723],{"class":73},[67,46430,46431,46433,46435,46437,46439,46441,46443],{"class":69,"line":694},[67,46432,35734],{"class":73},[67,46434,85],{"class":84},[67,46436,33227],{"class":73},[67,46438,33230],{"class":7033},[67,46440,85],{"class":84},[67,46442,33235],{"class":114},[67,46444,33238],{"class":73},[67,46446,46447,46449,46451,46453],{"class":69,"line":700},[67,46448,35751],{"class":7033},[67,46450,85],{"class":84},[67,46452,35756],{"class":77},[67,46454,33238],{"class":73},[67,46456,46457,46459,46461,46463,46465,46467,46469],{"class":69,"line":706},[67,46458,35763],{"class":7033},[67,46460,85],{"class":84},[67,46462,33265],{"class":73},[67,46464,33268],{"class":7033},[67,46466,85],{"class":84},[67,46468,37217],{"class":77},[67,46470,33276],{"class":73},[67,46472,46473,46475,46477,46479],{"class":69,"line":712},[67,46474,35780],{"class":7033},[67,46476,85],{"class":84},[67,46478,33248],{"class":77},[67,46480,829],{"class":73},[67,46482,46483,46485,46487,46489,46491,46493],{"class":69,"line":717},[67,46484,35791],{"class":73},[67,46486,85],{"class":84},[67,46488,33306],{"class":73},[67,46490,33309],{"class":7033},[67,46492,85],{"class":84},[67,46494,35802],{"class":73},[67,46496,46497],{"class":69,"line":723},[67,46498,35807],{"class":2058},[67,46500,46501,46503,46505,46507],{"class":69,"line":729},[67,46502,35812],{"class":7033},[67,46504,85],{"class":84},[67,46506,2209],{"class":77},[67,46508,33238],{"class":73},[67,46510,46511,46513,46515,46517],{"class":69,"line":735},[67,46512,35823],{"class":7033},[67,46514,85],{"class":84},[67,46516,33248],{"class":77},[67,46518,33238],{"class":73},[67,46520,46521,46523,46525,46527],{"class":69,"line":741},[67,46522,35834],{"class":7033},[67,46524,85],{"class":84},[67,46526,78],{"class":77},[67,46528,829],{"class":73},[67,46530,46531,46533],{"class":69,"line":747},[67,46532,5910],{"class":84},[67,46534,35847],{"class":73},[67,46536,46537],{"class":69,"line":753},[67,46538,631],{"emptyLinePlaceholder":630},[67,46540,46541],{"class":69,"line":758},[67,46542,35856],{"class":2058},[67,46544,46545,46547,46549],{"class":69,"line":764},[67,46546,801],{"class":84},[67,46548,35863],{"class":110},[67,46550,35866],{"class":73},[67,46552,46553],{"class":69,"line":770},[67,46554,35871],{"class":2058},[67,46556,46557,46559,46561,46563,46565,46567,46569],{"class":69,"line":776},[67,46558,33013],{"class":73},[67,46560,85],{"class":84},[67,46562,33020],{"class":114},[67,46564,3547],{"class":84},[67,46566,33025],{"class":73},[67,46568,3544],{"class":84},[67,46570,35888],{"class":114},[67,46572,46573,46575,46577],{"class":69,"line":782},[67,46574,33065],{"class":73},[67,46576,85],{"class":84},[67,46578,34059],{"class":73},[67,46580,46581],{"class":69,"line":788},[67,46582,631],{"emptyLinePlaceholder":630},[67,46584,46585],{"class":69,"line":793},[67,46586,35905],{"class":2058},[67,46588,46589,46591,46593],{"class":69,"line":798},[67,46590,35910],{"class":73},[67,46592,85],{"class":84},[67,46594,34112],{"class":77},[67,46596,46597,46599,46601],{"class":69,"line":816},[67,46598,35919],{"class":73},[67,46600,85],{"class":84},[67,46602,4909],{"class":77},[67,46604,46605],{"class":69,"line":832},[67,46606,631],{"emptyLinePlaceholder":630},[67,46608,46609],{"class":69,"line":843},[67,46610,35932],{"class":2058},[67,46612,46613],{"class":69,"line":848},[67,46614,35937],{"class":2058},[67,46616,46617],{"class":69,"line":863},[67,46618,35942],{"class":2058},[67,46620,46621,46623],{"class":69,"line":876},[67,46622,35947],{"class":84},[67,46624,34653],{"class":73},[67,46626,46627],{"class":69,"line":889},[67,46628,35954],{"class":2058},[67,46630,46631,46633,46635,46637],{"class":69,"line":894},[67,46632,5225],{"class":84},[67,46634,35961],{"class":73},[67,46636,941],{"class":84},[67,46638,35966],{"class":73},[67,46640,46641,46643,46645],{"class":69,"line":911},[67,46642,35971],{"class":73},[67,46644,85],{"class":84},[67,46646,35976],{"class":73},[67,46648,46649,46651,46653],{"class":69,"line":927},[67,46650,35981],{"class":73},[67,46652,85],{"class":84},[67,46654,35986],{"class":73},[67,46656,46657],{"class":69,"line":932},[67,46658,35991],{"class":2058},[67,46660,46661],{"class":69,"line":955},[67,46662,34644],{"class":73},[67,46664,46665],{"class":69,"line":971},[67,46666,36000],{"class":2058},[67,46668,46669,46671,46673],{"class":69,"line":1010},[67,46670,34429],{"class":73},[67,46672,85],{"class":84},[67,46674,36009],{"class":73},[67,46676,46677],{"class":69,"line":1016},[67,46678,36014],{"class":2058},[67,46680,46681,46683,46685,46687,46689,46691,46693],{"class":69,"line":1021},[67,46682,34446],{"class":73},[67,46684,85],{"class":84},[67,46686,34451],{"class":73},[67,46688,34454],{"class":7033},[67,46690,85],{"class":84},[67,46692,2209],{"class":77},[67,46694,829],{"class":73},[67,46696,46697],{"class":69,"line":1034},[67,46698,36035],{"class":2058},[67,46700,46701],{"class":69,"line":1053},[67,46702,36040],{"class":2058},[67,46704,46705],{"class":69,"line":1070},[67,46706,36045],{"class":2058},[67,46708,46709,46711,46713,46715,46717],{"class":69,"line":1083},[67,46710,36050],{"class":73},[67,46712,11283],{"class":84},[67,46714,34556],{"class":73},[67,46716,4774],{"class":84},[67,46718,36059],{"class":73},[67,46720,46721],{"class":69,"line":1088},[67,46722,36064],{"class":2058},[67,46724,46725,46727,46729,46731,46733],{"class":69,"line":1093},[67,46726,36069],{"class":73},[67,46728,11283],{"class":84},[67,46730,36074],{"class":73},[67,46732,78],{"class":77},[67,46734,829],{"class":73},[67,46736,46737],{"class":69,"line":1110},[67,46738,631],{"emptyLinePlaceholder":630},[67,46740,46741],{"class":69,"line":11603},[67,46742,36087],{"class":2058},[67,46744,46745,46747,46749,46751,46753],{"class":69,"line":11612},[67,46746,36092],{"class":73},[67,46748,85],{"class":84},[67,46750,36097],{"class":73},[67,46752,2573],{"class":84},[67,46754,36102],{"class":73},[67,46756,46757],{"class":69,"line":11617},[67,46758,36107],{"class":2058},[67,46760,46761,46763,46765,46767],{"class":69,"line":11623},[67,46762,34220],{"class":77},[67,46764,854],{"class":73},[67,46766,36116],{"class":114},[67,46768,36119],{"class":73},[67,46770,46771],{"class":69,"line":11644},[67,46772,631],{"emptyLinePlaceholder":630},[67,46774,46775],{"class":69,"line":11650},[67,46776,36128],{"class":2058},[67,46778,46779,46781,46783,46785,46787],{"class":69,"line":11664},[67,46780,1096],{"class":84},[67,46782,1099],{"class":77},[67,46784,4774],{"class":84},[67,46786,33001],{"class":114},[67,46788,813],{"class":73},[67,46790,46791],{"class":69,"line":11670},[67,46792,36145],{"class":2058},[67,46794,46795,46797,46799],{"class":69,"line":11697},[67,46796,33065],{"class":73},[67,46798,85],{"class":84},[67,46800,46319],{"class":73},[67,46802,46803],{"class":69,"line":11706},[67,46804,36158],{"class":2058},[67,46806,46807],{"class":69,"line":11712},[67,46808,36163],{"class":2058},[67,46810,46811,46813,46815],{"class":69,"line":11720},[67,46812,36168],{"class":73},[67,46814,36171],{"class":114},[67,46816,1050],{"class":73},[67,46818,46819],{"class":69,"line":11725},[67,46820,36178],{"class":2058},[67,46822,46823,46825,46827],{"class":69,"line":18401},[67,46824,35791],{"class":73},[67,46826,85],{"class":84},[67,46828,36187],{"class":73},[67,46830,46831],{"class":69,"line":18407},[67,46832,36192],{"class":2058},[67,46834,46835],{"class":69,"line":18430},[67,46836,36197],{"class":73},[67,46838,46839],{"class":69,"line":18436},[67,46840,631],{"emptyLinePlaceholder":630},[67,46842,46843],{"class":69,"line":18459},[67,46844,36206],{"class":2058},[67,46846,46847],{"class":69,"line":18473},[67,46848,36211],{"class":2058},[67,46850,46851,46853,46855,46857,46859,46861,46863],{"class":69,"line":18493},[67,46852,33013],{"class":73},[67,46854,85],{"class":84},[67,46856,33020],{"class":114},[67,46858,3547],{"class":84},[67,46860,33025],{"class":73},[67,46862,3544],{"class":84},[67,46864,35888],{"class":114},[67,46866,46867,46869,46871],{"class":69,"line":18499},[67,46868,33065],{"class":73},[67,46870,85],{"class":84},[67,46872,34059],{"class":73},[67,46874,46875],{"class":69,"line":18510},[67,46876,36240],{"class":2058},[67,46878,46879],{"class":69,"line":18533},[67,46880,36245],{"class":2058},[67,46882,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927],{"class":69,"line":18555},[67,46884,36250],{"class":73},[67,46886,85],{"class":84},[67,46888,2879],{"class":73},[67,46890,36257],{"class":114},[67,46892,2369],{"class":73},[67,46894,36262],{"class":114},[67,46896,2369],{"class":73},[67,46898,36267],{"class":114},[67,46900,2369],{"class":73},[67,46902,36272],{"class":114},[67,46904,2369],{"class":73},[67,46906,36277],{"class":114},[67,46908,2369],{"class":73},[67,46910,36282],{"class":114},[67,46912,2369],{"class":73},[67,46914,36287],{"class":114},[67,46916,2369],{"class":73},[67,46918,36292],{"class":114},[67,46920,2369],{"class":73},[67,46922,36297],{"class":114},[67,46924,2369],{"class":73},[67,46926,36302],{"class":114},[67,46928,35015],{"class":73},[67,46930,46931,46933],{"class":69,"line":18560},[67,46932,35947],{"class":84},[67,46934,34653],{"class":73},[67,46936,46937],{"class":69,"line":18566},[67,46938,36315],{"class":2058},[67,46940,46941,46943,46945,46947],{"class":69,"line":18580},[67,46942,5225],{"class":84},[67,46944,36322],{"class":73},[67,46946,941],{"class":84},[67,46948,35966],{"class":73},[67,46950,46951,46953,46955],{"class":69,"line":18593},[67,46952,34379],{"class":73},[67,46954,85],{"class":84},[67,46956,34384],{"class":73},[67,46958,46959,46961,46963],{"class":69,"line":18598},[67,46960,34394],{"class":73},[67,46962,85],{"class":84},[67,46964,34399],{"class":73},[67,46966,46967],{"class":69,"line":18612},[67,46968,631],{"emptyLinePlaceholder":630},[67,46970,46971],{"class":69,"line":18617},[67,46972,36351],{"class":2058},[67,46974,46975],{"class":69,"line":18623},[67,46976,34644],{"class":73},[67,46978,46979],{"class":69,"line":18628},[67,46980,36360],{"class":2058},[67,46982,46983,46985,46987],{"class":69,"line":18642},[67,46984,34429],{"class":73},[67,46986,85],{"class":84},[67,46988,34434],{"class":73},[67,46990,46991],{"class":69,"line":18647},[67,46992,36373],{"class":2058},[67,46994,46995,46997,46999,47001,47003,47005,47007],{"class":69,"line":18652},[67,46996,34446],{"class":73},[67,46998,85],{"class":84},[67,47000,34451],{"class":73},[67,47002,34454],{"class":7033},[67,47004,85],{"class":84},[67,47006,2209],{"class":77},[67,47008,829],{"class":73},[67,47010,47011],{"class":69,"line":18666},[67,47012,36394],{"class":2058},[67,47014,47015,47017,47019],{"class":69,"line":18678},[67,47016,36399],{"class":73},[67,47018,85],{"class":84},[67,47020,36404],{"class":73},[67,47022,47023,47025,47027],{"class":69,"line":18683},[67,47024,36409],{"class":73},[67,47026,85],{"class":84},[67,47028,36414],{"class":73},[67,47030,47031,47033,47035,47037,47039,47041,47043,47045],{"class":69,"line":18696},[67,47032,36419],{"class":77},[67,47034,854],{"class":73},[67,47036,36424],{"class":114},[67,47038,36427],{"class":73},[67,47040,36430],{"class":114},[67,47042,2369],{"class":73},[67,47044,36435],{"class":114},[67,47046,36438],{"class":73},[391,47048,47050],{"id":47049},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47052,47053],{},"猫狗分类任务",[19,47055,47056],{},"划分数据集和验证集",[58,47058,47060],{"className":60,"code":47059,"language":62,"meta":63,"style":63},"# 创建脚本，用于划分数据集和验证集\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",[32,47061,47062,47067,47074,47079,47090,47097,47101,47111,47125,47134,47138,47143,47153,47173,47177,47182,47192,47203,47216,47220,47225,47234,47244,47255,47259,47264,47274,47278,47283,47288,47293,47298,47303,47307,47317,47344,47357,47369,47396,47401,47406,47420,47425,47437,47452,47467,47475,47479,47484,47490,47502,47515,47520,47525,47530,47580,47586,47590],{"__ignoreMap":63},[67,47063,47064],{"class":69,"line":70},[67,47065,47066],{"class":2058},"# 创建脚本，用于划分数据集和验证集\n",[67,47068,47069,47071],{"class":69,"line":191},[67,47070,622],{"class":84},[67,47072,47073],{"class":73}," os\n",[67,47075,47076],{"class":69,"line":202},[67,47077,47078],{"class":2058},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[67,47080,47081,47083,47086,47088],{"class":69,"line":641},[67,47082,32515],{"class":84},[67,47084,47085],{"class":73}," shutil ",[67,47087,622],{"class":84},[67,47089,33593],{"class":73},[67,47091,47092,47094],{"class":69,"line":655},[67,47093,622],{"class":84},[67,47095,47096],{"class":73}," random\n",[67,47098,47099],{"class":69,"line":660},[67,47100,631],{"emptyLinePlaceholder":630},[67,47102,47103,47105,47108],{"class":69,"line":665},[67,47104,801],{"class":84},[67,47106,47107],{"class":110}," mkfile",[67,47109,47110],{"class":73},"(file):\n",[67,47112,47113,47115,47117,47120,47123],{"class":69,"line":677},[67,47114,897],{"class":84},[67,47116,40698],{"class":84},[67,47118,47119],{"class":73}," os.path.exists(",[67,47121,47122],{"class":7033},"file",[67,47124,952],{"class":73},[67,47126,47127,47130,47132],{"class":69,"line":683},[67,47128,47129],{"class":73},"        os.makedirs(",[67,47131,47122],{"class":7033},[67,47133,829],{"class":73},[67,47135,47136],{"class":69,"line":689},[67,47137,631],{"emptyLinePlaceholder":630},[67,47139,47140],{"class":69,"line":694},[67,47141,47142],{"class":2058},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[67,47144,47145,47148,47150],{"class":69,"line":700},[67,47146,47147],{"class":73},"file_path",[67,47149,85],{"class":84},[67,47151,47152],{"class":114},"'data_cat_dog'\n",[67,47154,47155,47158,47160,47163,47165,47168,47170],{"class":69,"line":706},[67,47156,47157],{"class":73},"flower_class",[67,47159,85],{"class":84},[67,47161,47162],{"class":73},"[cla ",[67,47164,1512],{"class":84},[67,47166,47167],{"class":73}," cla ",[67,47169,941],{"class":84},[67,47171,47172],{"class":73}," os.listdir(file_path)]\n",[67,47174,47175],{"class":69,"line":712},[67,47176,631],{"emptyLinePlaceholder":630},[67,47178,47179],{"class":69,"line":717},[67,47180,47181],{"class":2058},"# 创建训练集train文件夹\n",[67,47183,47184,47187,47190],{"class":69,"line":723},[67,47185,47186],{"class":73},"mkfile(",[67,47188,47189],{"class":114},"'data\u002Ftrain'",[67,47191,829],{"class":73},[67,47193,47194,47196,47198,47200],{"class":69,"line":729},[67,47195,1512],{"class":84},[67,47197,47167],{"class":73},[67,47199,941],{"class":84},[67,47201,47202],{"class":73}," flower_class:\n",[67,47204,47205,47208,47211,47213],{"class":69,"line":735},[67,47206,47207],{"class":73},"    mkfile(",[67,47209,47210],{"class":114},"'data\u002Ftrain\u002F'",[67,47212,2471],{"class":84},[67,47214,47215],{"class":73},"cla)\n",[67,47217,47218],{"class":69,"line":741},[67,47219,631],{"emptyLinePlaceholder":630},[67,47221,47222],{"class":69,"line":747},[67,47223,47224],{"class":2058},"# 创建验证集val文件夹\n",[67,47226,47227,47229,47232],{"class":69,"line":753},[67,47228,47186],{"class":73},[67,47230,47231],{"class":114},"'data\u002Ftest'",[67,47233,829],{"class":73},[67,47235,47236,47238,47240,47242],{"class":69,"line":758},[67,47237,1512],{"class":84},[67,47239,47167],{"class":73},[67,47241,941],{"class":84},[67,47243,47202],{"class":73},[67,47245,47246,47248,47251,47253],{"class":69,"line":764},[67,47247,47207],{"class":73},[67,47249,47250],{"class":114},"'data\u002Ftest\u002F'",[67,47252,2471],{"class":84},[67,47254,47215],{"class":73},[67,47256,47257],{"class":69,"line":770},[67,47258,631],{"emptyLinePlaceholder":630},[67,47260,47261],{"class":69,"line":776},[67,47262,47263],{"class":2058},"# 划分比例，训练集：测试集=9：1\n",[67,47265,47266,47269,47271],{"class":69,"line":782},[67,47267,47268],{"class":73},"split_rate",[67,47270,85],{"class":84},[67,47272,47273],{"class":77},"0.1\n",[67,47275,47276],{"class":69,"line":788},[67,47277,631],{"emptyLinePlaceholder":630},[67,47279,47280],{"class":69,"line":793},[67,47281,47282],{"class":2058},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[67,47284,47285],{"class":69,"line":798},[67,47286,47287],{"class":2058},"# cla_path：当前类别的原始图片路径\n",[67,47289,47290],{"class":69,"line":816},[67,47291,47292],{"class":2058},"# images：当前类别下所有图片的文件名列表\n",[67,47294,47295],{"class":69,"line":832},[67,47296,47297],{"class":2058},"# num：该类别图片总数\n",[67,47299,47300],{"class":69,"line":843},[67,47301,47302],{"class":2058},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[67,47304,47305],{"class":69,"line":848},[67,47306,631],{"emptyLinePlaceholder":630},[67,47308,47309,47311,47313,47315],{"class":69,"line":863},[67,47310,1512],{"class":84},[67,47312,47167],{"class":73},[67,47314,941],{"class":84},[67,47316,47202],{"class":73},[67,47318,47319,47322,47324,47327,47329,47332,47335,47337,47339,47341],{"class":69,"line":876},[67,47320,47321],{"class":73},"    cla_path ",[67,47323,85],{"class":84},[67,47325,47326],{"class":73}," file_path ",[67,47328,2471],{"class":84},[67,47330,47331],{"class":114}," '\u002F'",[67,47333,47334],{"class":84}," +",[67,47336,47167],{"class":73},[67,47338,2471],{"class":84},[67,47340,47331],{"class":114},[67,47342,47343],{"class":2058},"  # 某一类别的子目录\n",[67,47345,47346,47349,47351,47354],{"class":69,"line":889},[67,47347,47348],{"class":73},"    images ",[67,47350,85],{"class":84},[67,47352,47353],{"class":73}," os.listdir(cla_path)  ",[67,47355,47356],{"class":2058},"# iamges 列表存储了该目录下所有图像的名称\n",[67,47358,47359,47362,47364,47366],{"class":69,"line":894},[67,47360,47361],{"class":73},"    num ",[67,47363,85],{"class":84},[67,47365,9147],{"class":77},[67,47367,47368],{"class":73},"(images)\n",[67,47370,47371,47374,47376,47379,47381,47383,47385,47388,47390,47393],{"class":69,"line":911},[67,47372,47373],{"class":73},"    eval_index ",[67,47375,85],{"class":84},[67,47377,47378],{"class":73}," random.sample(images, ",[67,47380,2483],{"class":7033},[67,47382,85],{"class":84},[67,47384,2006],{"class":77},[67,47386,47387],{"class":73},"(num ",[67,47389,965],{"class":84},[67,47391,47392],{"class":73}," split_rate))  ",[67,47394,47395],{"class":2058},"# 从images列表中随机抽取 k 个图像名称\n",[67,47397,47398],{"class":69,"line":927},[67,47399,47400],{"class":2058},"    # 遍历该类别下的所有图片\n",[67,47402,47403],{"class":69,"line":932},[67,47404,47405],{"class":2058},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[67,47407,47408,47410,47413,47415,47417],{"class":69,"line":955},[67,47409,935],{"class":84},[67,47411,47412],{"class":73}," index, image ",[67,47414,941],{"class":84},[67,47416,33378],{"class":77},[67,47418,47419],{"class":73},"(images):\n",[67,47421,47422],{"class":69,"line":971},[67,47423,47424],{"class":2058},"        # eval_index 中保存验证集val的图像名称\n",[67,47426,47427,47429,47432,47434],{"class":69,"line":1010},[67,47428,4329],{"class":84},[67,47430,47431],{"class":73}," image ",[67,47433,941],{"class":84},[67,47435,47436],{"class":73}," eval_index:\n",[67,47438,47439,47442,47444,47447,47449],{"class":69,"line":1016},[67,47440,47441],{"class":73},"            image_path ",[67,47443,85],{"class":84},[67,47445,47446],{"class":73}," cla_path ",[67,47448,2471],{"class":84},[67,47450,47451],{"class":73}," image\n",[67,47453,47454,47457,47459,47462,47464],{"class":69,"line":1021},[67,47455,47456],{"class":73},"            new_path ",[67,47458,85],{"class":84},[67,47460,47461],{"class":114}," 'data\u002Ftest\u002F'",[67,47463,47334],{"class":84},[67,47465,47466],{"class":73}," cla\n",[67,47468,47469,47472],{"class":69,"line":1034},[67,47470,47471],{"class":73},"            copy(image_path, new_path)  ",[67,47473,47474],{"class":2058},"# 将选中的图像复制到新路径\n",[67,47476,47477],{"class":69,"line":1053},[67,47478,631],{"emptyLinePlaceholder":630},[67,47480,47481],{"class":69,"line":1070},[67,47482,47483],{"class":2058},"        # 其余的图像保存在训练集train中\n",[67,47485,47486,47488],{"class":69,"line":1083},[67,47487,4366],{"class":84},[67,47489,813],{"class":73},[67,47491,47492,47494,47496,47498,47500],{"class":69,"line":1088},[67,47493,47441],{"class":73},[67,47495,85],{"class":84},[67,47497,47446],{"class":73},[67,47499,2471],{"class":84},[67,47501,47451],{"class":73},[67,47503,47504,47506,47508,47511,47513],{"class":69,"line":1093},[67,47505,47456],{"class":73},[67,47507,85],{"class":84},[67,47509,47510],{"class":114}," 'data\u002Ftrain\u002F'",[67,47512,47334],{"class":84},[67,47514,47466],{"class":73},[67,47516,47517],{"class":69,"line":1110},[67,47518,47519],{"class":73},"            copy(image_path, new_path)\n",[67,47521,47522],{"class":69,"line":11603},[67,47523,47524],{"class":2058},"            # 打印进度条信息\n",[67,47526,47527],{"class":69,"line":11612},[67,47528,47529],{"class":2058},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[67,47531,47532,47534,47536,47538,47541,47543,47545,47548,47550,47552,47554,47557,47560,47562,47564,47567,47570,47572,47574,47577],{"class":69,"line":11617},[67,47533,34220],{"class":77},[67,47535,854],{"class":73},[67,47537,2243],{"class":114},[67,47539,47540],{"class":77},"\\r",[67,47542,2879],{"class":114},[67,47544,34228],{"class":77},[67,47546,47547],{"class":114},"] processing [",[67,47549,34228],{"class":77},[67,47551,2573],{"class":114},[67,47553,34228],{"class":77},[67,47555,47556],{"class":114},"]\"",[67,47558,47559],{"class":73},".format(cla, index ",[67,47561,2471],{"class":84},[67,47563,906],{"class":77},[67,47565,47566],{"class":73},", num), ",[67,47568,47569],{"class":7033},"end",[67,47571,85],{"class":84},[67,47573,9468],{"class":114},[67,47575,47576],{"class":73},")  ",[67,47578,47579],{"class":2058},"# processing bar\n",[67,47581,47582,47584],{"class":69,"line":11623},[67,47583,851],{"class":77},[67,47585,3809],{"class":73},[67,47587,47588],{"class":69,"line":11644},[67,47589,631],{"emptyLinePlaceholder":630},[67,47591,47592,47594,47596,47599],{"class":69,"line":11650},[67,47593,1626],{"class":77},[67,47595,854],{"class":73},[67,47597,47598],{"class":114},"\"processing done!\"",[67,47600,829],{"class":73},[19,47602,47603],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23794,47605,47607],{"id":47606},"_242模型代码","2.4.2.模型代码",[19,47609,47610],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[58,47612,47614],{"className":60,"code":47613,"language":62,"meta":63,"style":63},"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",[32,47615,47616,47622,47632,47642,47646,47662,47670,47684,47694,47698,47728,47732,47766,47812,47816,47850,47896,47900,47904,47938,47968,47972,47980,47994,48016,48038,48056,48060,48074,48078,48082,48098,48102,48110,48124,48134,48178,48182,48210,48214,48224,48252,48256,48292,48296,48324,48328,48338,48370,48402,48430,48434,48444,48476,48508,48540,48572,48604,48632,48636,48646,48678,48710,48722,48726,48738,48742,48746,48758,48766,48786,48790,48794,48798,48802,48806,48810,48824,48832,48840,48852,48866,48874,48878,48886,48896,48906,48916,48926,48936,48942,48946,48950,48962,48982,48990],{"__ignoreMap":63},[67,47617,47618,47620],{"class":69,"line":70},[67,47619,622],{"class":84},[67,47621,32175],{"class":73},[67,47623,47624,47626,47628,47630],{"class":69,"line":191},[67,47625,32515],{"class":84},[67,47627,32518],{"class":73},[67,47629,622],{"class":84},[67,47631,32523],{"class":73},[67,47633,47634,47636,47638,47640],{"class":69,"line":202},[67,47635,32515],{"class":84},[67,47637,32535],{"class":73},[67,47639,622],{"class":84},[67,47641,32540],{"class":73},[67,47643,47644],{"class":69,"line":641},[67,47645,631],{"emptyLinePlaceholder":630},[67,47647,47648,47650,47652,47654,47656,47658,47660],{"class":69,"line":655},[67,47649,16492],{"class":84},[67,47651,43261],{"class":110},[67,47653,854],{"class":73},[67,47655,32556],{"class":110},[67,47657,2547],{"class":73},[67,47659,32561],{"class":110},[67,47661,952],{"class":73},[67,47663,47664,47666,47668],{"class":69,"line":660},[67,47665,32578],{"class":84},[67,47667,32581],{"class":77},[67,47669,43280],{"class":73},[67,47671,47672,47674,47676,47678,47680,47682],{"class":69,"line":665},[67,47673,32594],{"class":77},[67,47675,43287],{"class":73},[67,47677,32600],{"class":77},[67,47679,32603],{"class":73},[67,47681,32606],{"class":77},[67,47683,3809],{"class":73},[67,47685,47686,47688,47690,47692],{"class":69,"line":677},[67,47687,32622],{"class":77},[67,47689,36540],{"class":73},[67,47691,85],{"class":84},[67,47693,36545],{"class":73},[67,47695,47696],{"class":69,"line":683},[67,47697,43310],{"class":2058},[67,47699,47700,47702,47704,47706,47708,47710,47712,47714,47716,47718,47720,47722,47724,47726],{"class":69,"line":689},[67,47701,32622],{"class":77},[67,47703,43317],{"class":73},[67,47705,85],{"class":84},[67,47707,32630],{"class":73},[67,47709,32633],{"class":7033},[67,47711,85],{"class":84},[67,47713,43328],{"class":73},[67,47715,32642],{"class":7033},[67,47717,85],{"class":84},[67,47719,43335],{"class":73},[67,47721,32651],{"class":7033},[67,47723,85],{"class":84},[67,47725,2209],{"class":77},[67,47727,829],{"class":73},[67,47729,47730],{"class":69,"line":694},[67,47731,43348],{"class":2058},[67,47733,47734,47736,47738,47740,47742,47744,47746,47748,47750,47752,47754,47756,47758,47760,47762,47764],{"class":69,"line":700},[67,47735,32622],{"class":77},[67,47737,43355],{"class":73},[67,47739,85],{"class":84},[67,47741,32630],{"class":73},[67,47743,32633],{"class":7033},[67,47745,85],{"class":84},[67,47747,43328],{"class":73},[67,47749,32642],{"class":7033},[67,47751,85],{"class":84},[67,47753,43372],{"class":73},[67,47755,78],{"class":77},[67,47757,43377],{"class":73},[67,47759,32651],{"class":7033},[67,47761,85],{"class":84},[67,47763,2209],{"class":77},[67,47765,829],{"class":73},[67,47767,47768,47770,47772,47774,47776,47778,47780,47782,47784,47786,47788,47790,47792,47794,47796,47798,47800,47802,47804,47806,47808,47810],{"class":69,"line":706},[67,47769,32622],{"class":77},[67,47771,43392],{"class":73},[67,47773,85],{"class":84},[67,47775,32630],{"class":73},[67,47777,32633],{"class":7033},[67,47779,85],{"class":84},[67,47781,43372],{"class":73},[67,47783,78],{"class":77},[67,47785,43377],{"class":73},[67,47787,32642],{"class":7033},[67,47789,85],{"class":84},[67,47791,43372],{"class":73},[67,47793,2209],{"class":77},[67,47795,43377],{"class":73},[67,47797,32651],{"class":7033},[67,47799,85],{"class":84},[67,47801,2071],{"class":77},[67,47803,2369],{"class":73},[67,47805,32660],{"class":7033},[67,47807,85],{"class":84},[67,47809,2209],{"class":77},[67,47811,829],{"class":73},[67,47813,47814],{"class":69,"line":712},[67,47815,43437],{"class":2058},[67,47817,47818,47820,47822,47824,47826,47828,47830,47832,47834,47836,47838,47840,47842,47844,47846,47848],{"class":69,"line":717},[67,47819,32622],{"class":77},[67,47821,43444],{"class":73},[67,47823,85],{"class":84},[67,47825,32630],{"class":73},[67,47827,32633],{"class":7033},[67,47829,85],{"class":84},[67,47831,43328],{"class":73},[67,47833,32642],{"class":7033},[67,47835,85],{"class":84},[67,47837,43461],{"class":73},[67,47839,78],{"class":77},[67,47841,43377],{"class":73},[67,47843,32651],{"class":7033},[67,47845,85],{"class":84},[67,47847,2209],{"class":77},[67,47849,829],{"class":73},[67,47851,47852,47854,47856,47858,47860,47862,47864,47866,47868,47870,47872,47874,47876,47878,47880,47882,47884,47886,47888,47890,47892,47894],{"class":69,"line":723},[67,47853,32622],{"class":77},[67,47855,43480],{"class":73},[67,47857,85],{"class":84},[67,47859,32630],{"class":73},[67,47861,32633],{"class":7033},[67,47863,85],{"class":84},[67,47865,43461],{"class":73},[67,47867,78],{"class":77},[67,47869,43377],{"class":73},[67,47871,32642],{"class":7033},[67,47873,85],{"class":84},[67,47875,43461],{"class":73},[67,47877,2209],{"class":77},[67,47879,43377],{"class":73},[67,47881,32651],{"class":7033},[67,47883,85],{"class":84},[67,47885,2310],{"class":77},[67,47887,2369],{"class":73},[67,47889,32660],{"class":7033},[67,47891,85],{"class":84},[67,47893,2077],{"class":77},[67,47895,829],{"class":73},[67,47897,47898],{"class":69,"line":729},[67,47899,43525],{"class":2058},[67,47901,47902],{"class":69,"line":735},[67,47903,43530],{"class":2058},[67,47905,47906,47908,47910,47912,47914,47916,47918,47920,47922,47924,47926,47928,47930,47932,47934,47936],{"class":69,"line":741},[67,47907,32622],{"class":77},[67,47909,43537],{"class":73},[67,47911,85],{"class":84},[67,47913,36598],{"class":73},[67,47915,32651],{"class":7033},[67,47917,85],{"class":84},[67,47919,2071],{"class":77},[67,47921,2369],{"class":73},[67,47923,32706],{"class":7033},[67,47925,85],{"class":84},[67,47927,2209],{"class":77},[67,47929,2369],{"class":73},[67,47931,32660],{"class":7033},[67,47933,85],{"class":84},[67,47935,2209],{"class":77},[67,47937,829],{"class":73},[67,47939,47940,47942,47944,47946,47948,47950,47952,47954,47956,47958,47960,47962,47964,47966],{"class":69,"line":747},[67,47941,32622],{"class":77},[67,47943,43572],{"class":73},[67,47945,85],{"class":84},[67,47947,32630],{"class":73},[67,47949,32633],{"class":7033},[67,47951,85],{"class":84},[67,47953,43328],{"class":73},[67,47955,32642],{"class":7033},[67,47957,85],{"class":84},[67,47959,43589],{"class":73},[67,47961,32651],{"class":7033},[67,47963,85],{"class":84},[67,47965,2209],{"class":77},[67,47967,829],{"class":73},[67,47969,47970],{"class":69,"line":753},[67,47971,631],{"emptyLinePlaceholder":630},[67,47973,47974,47976,47978],{"class":69,"line":758},[67,47975,32578],{"class":84},[67,47977,32870],{"class":110},[67,47979,32873],{"class":73},[67,47981,47982,47984,47986,47988,47990,47992],{"class":69,"line":764},[67,47983,43614],{"class":73},[67,47985,85],{"class":84},[67,47987,32600],{"class":77},[67,47989,36953],{"class":73},[67,47991,32600],{"class":77},[67,47993,43625],{"class":73},[67,47995,47996,47998,48000,48002,48004,48006,48008,48010,48012,48014],{"class":69,"line":770},[67,47997,8901],{"class":73},[67,47999,85],{"class":84},[67,48001,32600],{"class":77},[67,48003,36953],{"class":73},[67,48005,32600],{"class":77},[67,48007,43640],{"class":73},[67,48009,32600],{"class":77},[67,48011,36953],{"class":73},[67,48013,32600],{"class":77},[67,48015,43649],{"class":73},[67,48017,48018,48020,48022,48024,48026,48028,48030,48032,48034,48036],{"class":69,"line":776},[67,48019,43654],{"class":73},[67,48021,85],{"class":84},[67,48023,32600],{"class":77},[67,48025,36953],{"class":73},[67,48027,32600],{"class":77},[67,48029,43665],{"class":73},[67,48031,32600],{"class":77},[67,48033,36953],{"class":73},[67,48035,32600],{"class":77},[67,48037,43674],{"class":73},[67,48039,48040,48042,48044,48046,48048,48050,48052,48054],{"class":69,"line":782},[67,48041,43679],{"class":73},[67,48043,85],{"class":84},[67,48045,32600],{"class":77},[67,48047,36953],{"class":73},[67,48049,32600],{"class":77},[67,48051,43690],{"class":73},[67,48053,32600],{"class":77},[67,48055,43695],{"class":73},[67,48057,48058],{"class":69,"line":788},[67,48059,43700],{"class":2058},[67,48061,48062,48064,48066,48068,48070,48072],{"class":69,"line":793},[67,48063,16550],{"class":84},[67,48065,43707],{"class":73},[67,48067,34454],{"class":7033},[67,48069,85],{"class":84},[67,48071,2209],{"class":77},[67,48073,829],{"class":73},[67,48075,48076],{"class":69,"line":798},[67,48077,631],{"emptyLinePlaceholder":630},[67,48079,48080],{"class":69,"line":816},[67,48081,43728],{"class":2058},[67,48083,48084,48086,48088,48090,48092,48094,48096],{"class":69,"line":832},[67,48085,16492],{"class":84},[67,48087,43735],{"class":110},[67,48089,854],{"class":73},[67,48091,32556],{"class":110},[67,48093,2547],{"class":73},[67,48095,32561],{"class":110},[67,48097,952],{"class":73},[67,48099,48100],{"class":69,"line":843},[67,48101,43750],{"class":2058},[67,48103,48104,48106,48108],{"class":69,"line":848},[67,48105,32578],{"class":84},[67,48107,32581],{"class":77},[67,48109,43759],{"class":73},[67,48111,48112,48114,48116,48118,48120,48122],{"class":69,"line":863},[67,48113,32594],{"class":77},[67,48115,43766],{"class":73},[67,48117,32600],{"class":77},[67,48119,32603],{"class":73},[67,48121,32606],{"class":77},[67,48123,3809],{"class":73},[67,48125,48126,48128,48130,48132],{"class":69,"line":876},[67,48127,32622],{"class":77},[67,48129,43781],{"class":73},[67,48131,85],{"class":84},[67,48133,39777],{"class":73},[67,48135,48136,48138,48140,48142,48144,48146,48148,48150,48152,48154,48156,48158,48160,48162,48164,48166,48168,48170,48172,48174,48176],{"class":69,"line":889},[67,48137,39782],{"class":73},[67,48139,32633],{"class":7033},[67,48141,85],{"class":84},[67,48143,2071],{"class":77},[67,48145,2369],{"class":73},[67,48147,32642],{"class":7033},[67,48149,85],{"class":84},[67,48151,2195],{"class":77},[67,48153,2369],{"class":73},[67,48155,32651],{"class":7033},[67,48157,85],{"class":84},[67,48159,2360],{"class":77},[67,48161,2369],{"class":73},[67,48163,32706],{"class":7033},[67,48165,85],{"class":84},[67,48167,2077],{"class":77},[67,48169,2369],{"class":73},[67,48171,32660],{"class":7033},[67,48173,85],{"class":84},[67,48175,2071],{"class":77},[67,48177,39815],{"class":73},[67,48179,48180],{"class":69,"line":894},[67,48181,39820],{"class":73},[67,48183,48184,48186,48188,48190,48192,48194,48196,48198,48200,48202,48204,48206,48208],{"class":69,"line":911},[67,48185,39865],{"class":73},[67,48187,32651],{"class":7033},[67,48189,85],{"class":84},[67,48191,2071],{"class":77},[67,48193,2369],{"class":73},[67,48195,32706],{"class":7033},[67,48197,85],{"class":84},[67,48199,2077],{"class":77},[67,48201,2369],{"class":73},[67,48203,32660],{"class":7033},[67,48205,85],{"class":84},[67,48207,2209],{"class":77},[67,48209,829],{"class":73},[67,48211,48212],{"class":69,"line":927},[67,48213,39894],{"class":73},[67,48215,48216,48218,48220,48222],{"class":69,"line":932},[67,48217,32622],{"class":77},[67,48219,43872],{"class":73},[67,48221,85],{"class":84},[67,48223,39777],{"class":73},[67,48225,48226,48228,48230,48232,48234,48236,48238,48240,48242,48244,48246,48248,48250],{"class":69,"line":955},[67,48227,39782],{"class":73},[67,48229,32633],{"class":7033},[67,48231,85],{"class":84},[67,48233,2195],{"class":77},[67,48235,2369],{"class":73},[67,48237,32642],{"class":7033},[67,48239,85],{"class":84},[67,48241,2195],{"class":77},[67,48243,2369],{"class":73},[67,48245,32651],{"class":7033},[67,48247,85],{"class":84},[67,48249,2209],{"class":77},[67,48251,39815],{"class":73},[67,48253,48254],{"class":69,"line":971},[67,48255,39820],{"class":73},[67,48257,48258,48260,48262,48264,48266,48268,48270,48272,48274,48276,48278,48280,48282,48284,48286,48288,48290],{"class":69,"line":1010},[67,48259,39782],{"class":73},[67,48261,32633],{"class":7033},[67,48263,85],{"class":84},[67,48265,2195],{"class":77},[67,48267,2369],{"class":73},[67,48269,32642],{"class":7033},[67,48271,85],{"class":84},[67,48273,43927],{"class":77},[67,48275,2369],{"class":73},[67,48277,32651],{"class":7033},[67,48279,85],{"class":84},[67,48281,2071],{"class":77},[67,48283,2369],{"class":73},[67,48285,32660],{"class":7033},[67,48287,85],{"class":84},[67,48289,2209],{"class":77},[67,48291,39815],{"class":73},[67,48293,48294],{"class":69,"line":1016},[67,48295,39820],{"class":73},[67,48297,48298,48300,48302,48304,48306,48308,48310,48312,48314,48316,48318,48320,48322],{"class":69,"line":1021},[67,48299,39865],{"class":73},[67,48301,32651],{"class":7033},[67,48303,85],{"class":84},[67,48305,2071],{"class":77},[67,48307,2369],{"class":73},[67,48309,32706],{"class":7033},[67,48311,85],{"class":84},[67,48313,2077],{"class":77},[67,48315,2369],{"class":73},[67,48317,32660],{"class":7033},[67,48319,85],{"class":84},[67,48321,2209],{"class":77},[67,48323,829],{"class":73},[67,48325,48326],{"class":69,"line":1034},[67,48327,39894],{"class":73},[67,48329,48330,48332,48334,48336],{"class":69,"line":1053},[67,48331,32622],{"class":77},[67,48333,43988],{"class":73},[67,48335,85],{"class":84},[67,48337,39777],{"class":73},[67,48339,48340,48342,48344,48346,48348,48350,48352,48354,48356,48358,48360,48362,48364,48366,48368],{"class":69,"line":1070},[67,48341,43997],{"class":73},[67,48343,43927],{"class":77},[67,48345,2369],{"class":73},[67,48347,2195],{"class":77},[67,48349,44006],{"class":73},[67,48351,2201],{"class":77},[67,48353,2369],{"class":73},[67,48355,33840],{"class":77},[67,48357,44015],{"class":73},[67,48359,2590],{"class":77},[67,48361,2369],{"class":73},[67,48363,2189],{"class":77},[67,48365,44024],{"class":73},[67,48367,2189],{"class":77},[67,48369,39815],{"class":73},[67,48371,48372,48374,48376,48378,48380,48382,48384,48386,48388,48390,48392,48394,48396,48398,48400],{"class":69,"line":1083},[67,48373,43997],{"class":73},[67,48375,36639],{"class":77},[67,48377,2369],{"class":73},[67,48379,33840],{"class":77},[67,48381,44006],{"class":73},[67,48383,33840],{"class":77},[67,48385,2369],{"class":73},[67,48387,43927],{"class":77},[67,48389,44015],{"class":73},[67,48391,2189],{"class":77},[67,48393,2369],{"class":73},[67,48395,2201],{"class":77},[67,48397,44024],{"class":73},[67,48399,2195],{"class":77},[67,48401,39815],{"class":73},[67,48403,48404,48406,48408,48410,48412,48414,48416,48418,48420,48422,48424,48426,48428],{"class":69,"line":1088},[67,48405,39865],{"class":73},[67,48407,32651],{"class":7033},[67,48409,85],{"class":84},[67,48411,2071],{"class":77},[67,48413,2369],{"class":73},[67,48415,32706],{"class":7033},[67,48417,85],{"class":84},[67,48419,2077],{"class":77},[67,48421,2369],{"class":73},[67,48423,32660],{"class":7033},[67,48425,85],{"class":84},[67,48427,2209],{"class":77},[67,48429,829],{"class":73},[67,48431,48432],{"class":69,"line":1093},[67,48433,39894],{"class":73},[67,48435,48436,48438,48440,48442],{"class":69,"line":1110},[67,48437,32622],{"class":77},[67,48439,44099],{"class":73},[67,48441,85],{"class":84},[67,48443,39777],{"class":73},[67,48445,48446,48448,48450,48452,48454,48456,48458,48460,48462,48464,48466,48468,48470,48472,48474],{"class":69,"line":11603},[67,48447,43997],{"class":73},[67,48449,44110],{"class":77},[67,48451,2369],{"class":73},[67,48453,43927],{"class":77},[67,48455,44006],{"class":73},[67,48457,2201],{"class":77},[67,48459,2369],{"class":73},[67,48461,44123],{"class":77},[67,48463,44015],{"class":73},[67,48465,2590],{"class":77},[67,48467,2369],{"class":73},[67,48469,2596],{"class":77},[67,48471,44024],{"class":73},[67,48473,2195],{"class":77},[67,48475,39815],{"class":73},[67,48477,48478,48480,48482,48484,48486,48488,48490,48492,48494,48496,48498,48500,48502,48504,48506],{"class":69,"line":11612},[67,48479,43997],{"class":73},[67,48481,40225],{"class":77},[67,48483,2369],{"class":73},[67,48485,22844],{"class":77},[67,48487,44006],{"class":73},[67,48489,2607],{"class":77},[67,48491,2369],{"class":73},[67,48493,33273],{"class":77},[67,48495,44015],{"class":73},[67,48497,2789],{"class":77},[67,48499,2369],{"class":73},[67,48501,2195],{"class":77},[67,48503,44024],{"class":73},[67,48505,2195],{"class":77},[67,48507,39815],{"class":73},[67,48509,48510,48512,48514,48516,48518,48520,48522,48524,48526,48528,48530,48532,48534,48536,48538],{"class":69,"line":11617},[67,48511,43997],{"class":73},[67,48513,40225],{"class":77},[67,48515,2369],{"class":73},[67,48517,33840],{"class":77},[67,48519,44006],{"class":73},[67,48521,33840],{"class":77},[67,48523,2369],{"class":73},[67,48525,36639],{"class":77},[67,48527,44015],{"class":73},[67,48529,2789],{"class":77},[67,48531,2369],{"class":73},[67,48533,2195],{"class":77},[67,48535,44024],{"class":73},[67,48537,2195],{"class":77},[67,48539,39815],{"class":73},[67,48541,48542,48544,48546,48548,48550,48552,48554,48556,48558,48560,48562,48564,48566,48568,48570],{"class":69,"line":11623},[67,48543,43997],{"class":73},[67,48545,40225],{"class":77},[67,48547,2369],{"class":73},[67,48549,2607],{"class":77},[67,48551,44006],{"class":73},[67,48553,33840],{"class":77},[67,48555,2369],{"class":73},[67,48557,44220],{"class":77},[67,48559,44015],{"class":73},[67,48561,2189],{"class":77},[67,48563,2369],{"class":73},[67,48565,2195],{"class":77},[67,48567,44024],{"class":73},[67,48569,2195],{"class":77},[67,48571,39815],{"class":73},[67,48573,48574,48576,48578,48580,48582,48584,48586,48588,48590,48592,48594,48596,48598,48600,48602],{"class":69,"line":11644},[67,48575,43997],{"class":73},[67,48577,44241],{"class":77},[67,48579,2369],{"class":73},[67,48581,36639],{"class":77},[67,48583,44006],{"class":73},[67,48585,22844],{"class":77},[67,48587,2369],{"class":73},[67,48589,44254],{"class":77},[67,48591,44015],{"class":73},[67,48593,2189],{"class":77},[67,48595,2369],{"class":73},[67,48597,33840],{"class":77},[67,48599,44024],{"class":73},[67,48601,33840],{"class":77},[67,48603,39815],{"class":73},[67,48605,48606,48608,48610,48612,48614,48616,48618,48620,48622,48624,48626,48628,48630],{"class":69,"line":11650},[67,48607,39865],{"class":73},[67,48609,32651],{"class":7033},[67,48611,85],{"class":84},[67,48613,2071],{"class":77},[67,48615,2369],{"class":73},[67,48617,32706],{"class":7033},[67,48619,85],{"class":84},[67,48621,2077],{"class":77},[67,48623,2369],{"class":73},[67,48625,32660],{"class":7033},[67,48627,85],{"class":84},[67,48629,2209],{"class":77},[67,48631,829],{"class":73},[67,48633,48634],{"class":69,"line":11664},[67,48635,39894],{"class":73},[67,48637,48638,48640,48642,48644],{"class":69,"line":11670},[67,48639,32622],{"class":77},[67,48641,44307],{"class":73},[67,48643,85],{"class":84},[67,48645,39777],{"class":73},[67,48647,48648,48650,48652,48654,48656,48658,48660,48662,48664,48666,48668,48670,48672,48674,48676],{"class":69,"line":11697},[67,48649,43997],{"class":73},[67,48651,44318],{"class":77},[67,48653,2369],{"class":73},[67,48655,36639],{"class":77},[67,48657,44006],{"class":73},[67,48659,22844],{"class":77},[67,48661,2369],{"class":73},[67,48663,44254],{"class":77},[67,48665,44015],{"class":73},[67,48667,2189],{"class":77},[67,48669,2369],{"class":73},[67,48671,33840],{"class":77},[67,48673,44024],{"class":73},[67,48675,33840],{"class":77},[67,48677,39815],{"class":73},[67,48679,48680,48682,48684,48686,48688,48690,48692,48694,48696,48698,48700,48702,48704,48706,48708],{"class":69,"line":11706},[67,48681,43997],{"class":73},[67,48683,44318],{"class":77},[67,48685,2369],{"class":73},[67,48687,36709],{"class":77},[67,48689,44006],{"class":73},[67,48691,43927],{"class":77},[67,48693,2369],{"class":73},[67,48695,36709],{"class":77},[67,48697,44015],{"class":73},[67,48699,2596],{"class":77},[67,48701,2369],{"class":73},[67,48703,33840],{"class":77},[67,48705,44024],{"class":73},[67,48707,33840],{"class":77},[67,48709,39815],{"class":73},[67,48711,48712,48714,48716,48718,48720],{"class":69,"line":11712},[67,48713,44381],{"class":73},[67,48715,2209],{"class":77},[67,48717,2369],{"class":73},[67,48719,2209],{"class":77},[67,48721,44390],{"class":73},[67,48723,48724],{"class":69,"line":11720},[67,48725,40558],{"class":73},[67,48727,48728,48730,48732,48734,48736],{"class":69,"line":11725},[67,48729,40563],{"class":73},[67,48731,44401],{"class":77},[67,48733,2369],{"class":73},[67,48735,2077],{"class":77},[67,48737,829],{"class":73},[67,48739,48740],{"class":69,"line":18401},[67,48741,39894],{"class":73},[67,48743,48744],{"class":69,"line":18407},[67,48745,44416],{"class":2058},[67,48747,48748,48750,48752,48754,48756],{"class":69,"line":18430},[67,48749,5225],{"class":84},[67,48751,40636],{"class":73},[67,48753,941],{"class":84},[67,48755,40641],{"class":77},[67,48757,40644],{"class":73},[67,48759,48760,48762,48764],{"class":69,"line":18436},[67,48761,6461],{"class":84},[67,48763,40656],{"class":77},[67,48765,40659],{"class":73},[67,48767,48768,48770,48772,48774,48776,48778,48780,48782,48784],{"class":69,"line":18459},[67,48769,40669],{"class":73},[67,48771,44443],{"class":7033},[67,48773,85],{"class":84},[67,48775,44448],{"class":114},[67,48777,2369],{"class":73},[67,48779,40672],{"class":7033},[67,48781,85],{"class":84},[67,48783,40677],{"class":114},[67,48785,829],{"class":73},[67,48787,48788],{"class":69,"line":18473},[67,48789,44463],{"class":2058},[67,48791,48792],{"class":69,"line":18493},[67,48793,44468],{"class":2058},[67,48795,48796],{"class":69,"line":18499},[67,48797,44473],{"class":2058},[67,48799,48800],{"class":69,"line":18510},[67,48801,44478],{"class":2058},[67,48803,48804],{"class":69,"line":18533},[67,48805,44483],{"class":2058},[67,48807,48808],{"class":69,"line":18555},[67,48809,44488],{"class":2058},[67,48811,48812,48814,48816,48818,48820,48822],{"class":69,"line":18560},[67,48813,40689],{"class":84},[67,48815,40692],{"class":73},[67,48817,40695],{"class":84},[67,48819,40698],{"class":84},[67,48821,40701],{"class":77},[67,48823,813],{"class":73},[67,48825,48826,48828,48830],{"class":69,"line":18566},[67,48827,40713],{"class":73},[67,48829,78],{"class":77},[67,48831,829],{"class":73},[67,48833,48834,48836,48838],{"class":69,"line":18580},[67,48835,44515],{"class":84},[67,48837,40656],{"class":77},[67,48839,40732],{"class":73},[67,48841,48842,48844,48846,48848,48850],{"class":69,"line":18593},[67,48843,44524],{"class":73},[67,48845,78],{"class":77},[67,48847,2369],{"class":73},[67,48849,40754],{"class":77},[67,48851,829],{"class":73},[67,48853,48854,48856,48858,48860,48862,48864],{"class":69,"line":18598},[67,48855,44537],{"class":84},[67,48857,40692],{"class":73},[67,48859,40695],{"class":84},[67,48861,40698],{"class":84},[67,48863,40701],{"class":77},[67,48865,813],{"class":73},[67,48867,48868,48870,48872],{"class":69,"line":18612},[67,48869,44552],{"class":73},[67,48871,78],{"class":77},[67,48873,829],{"class":73},[67,48875,48876],{"class":69,"line":18617},[67,48877,36934],{"class":2058},[67,48879,48880,48882,48884],{"class":69,"line":18623},[67,48881,32578],{"class":84},[67,48883,32870],{"class":110},[67,48885,32873],{"class":73},[67,48887,48888,48890,48892,48894],{"class":69,"line":18628},[67,48889,32878],{"class":73},[67,48891,85],{"class":84},[67,48893,32600],{"class":77},[67,48895,44579],{"class":73},[67,48897,48898,48900,48902,48904],{"class":69,"line":18642},[67,48899,32878],{"class":73},[67,48901,85],{"class":84},[67,48903,32600],{"class":77},[67,48905,44590],{"class":73},[67,48907,48908,48910,48912,48914],{"class":69,"line":18647},[67,48909,32878],{"class":73},[67,48911,85],{"class":84},[67,48913,32600],{"class":77},[67,48915,44601],{"class":73},[67,48917,48918,48920,48922,48924],{"class":69,"line":18652},[67,48919,32878],{"class":73},[67,48921,85],{"class":84},[67,48923,32600],{"class":77},[67,48925,44612],{"class":73},[67,48927,48928,48930,48932,48934],{"class":69,"line":18666},[67,48929,32878],{"class":73},[67,48931,85],{"class":84},[67,48933,32600],{"class":77},[67,48935,44623],{"class":73},[67,48937,48938,48940],{"class":69,"line":18678},[67,48939,16550],{"class":84},[67,48941,32986],{"class":73},[67,48943,48944],{"class":69,"line":18683},[67,48945,631],{"emptyLinePlaceholder":630},[67,48947,48948],{"class":69,"line":18696},[67,48949,44638],{"class":2058},[67,48951,48952,48954,48956,48958,48960],{"class":69,"line":18701},[67,48953,1096],{"class":84},[67,48955,1099],{"class":77},[67,48957,4774],{"class":84},[67,48959,33001],{"class":114},[67,48961,813],{"class":73},[67,48963,48964,48966,48968,48970,48972,48974,48976,48978,48980],{"class":69,"line":18706},[67,48965,33013],{"class":73},[67,48967,85],{"class":84},[67,48969,32230],{"class":73},[67,48971,33020],{"class":114},[67,48973,3547],{"class":84},[67,48975,33025],{"class":73},[67,48977,3544],{"class":84},[67,48979,32255],{"class":114},[67,48981,829],{"class":73},[67,48983,48984,48986,48988],{"class":69,"line":18711},[67,48985,33065],{"class":73},[67,48987,85],{"class":84},[67,48989,44679],{"class":73},[67,48991,48992,48994,48996,48998,49000,49002,49004,49006],{"class":69,"line":18724},[67,48993,851],{"class":77},[67,48995,33077],{"class":73},[67,48997,2209],{"class":77},[67,48999,2369],{"class":73},[67,49001,33273],{"class":77},[67,49003,2369],{"class":73},[67,49005,33273],{"class":77},[67,49007,33090],{"class":73},[23794,49009,49011],{"id":49010},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49013,49014],{},"计算图片的均值与方差，用于训练中归一化处理操作",[58,49016,49018],{"className":60,"code":49017,"language":62,"meta":63,"style":63},"# 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",[32,49019,49020,49025,49038,49043,49049,49054,49064,49068,49073,49083,49087,49092,49102,49119,49123,49128,49140,49152,49183,49192,49202,49212,49216,49221,49236,49240,49245,49250,49255,49265,49270,49295,49299,49304,49319,49323,49336,49340,49345,49350,49355,49360,49365,49375,49385,49408,49416,49424,49432,49436,49448,49452,49457,49461,49465,49472,49492,49516,49523,49537,49542,49547,49551,49565,49569,49581],{"__ignoreMap":63},[67,49021,49022],{"class":69,"line":70},[67,49023,49024],{"class":2058},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[67,49026,49027,49029,49032,49035],{"class":69,"line":191},[67,49028,32515],{"class":84},[67,49030,49031],{"class":77}," PIL",[67,49033,49034],{"class":84}," import",[67,49036,49037],{"class":73}," Image\n",[67,49039,49040],{"class":69,"line":202},[67,49041,49042],{"class":2058},"# os 用来处理文件夹和文件路径\n",[67,49044,49045,49047],{"class":69,"line":641},[67,49046,622],{"class":84},[67,49048,47073],{"class":73},[67,49050,49051],{"class":69,"line":655},[67,49052,49053],{"class":2058},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[67,49055,49056,49058,49060,49062],{"class":69,"line":660},[67,49057,622],{"class":84},[67,49059,646],{"class":73},[67,49061,649],{"class":84},[67,49063,652],{"class":73},[67,49065,49066],{"class":69,"line":665},[67,49067,631],{"emptyLinePlaceholder":630},[67,49069,49070],{"class":69,"line":677},[67,49071,49072],{"class":2058},"# 文件夹路径，包含所有图片文件\n",[67,49074,49075,49078,49080],{"class":69,"line":683},[67,49076,49077],{"class":73},"folder_path ",[67,49079,85],{"class":84},[67,49081,49082],{"class":114}," 'data_cat_dog'\n",[67,49084,49085],{"class":69,"line":689},[67,49086,631],{"emptyLinePlaceholder":630},[67,49088,49089],{"class":69,"line":694},[67,49090,49091],{"class":2058},"# 初始化累积变量\n",[67,49093,49094,49097,49099],{"class":69,"line":700},[67,49095,49096],{"class":73},"total_pixels ",[67,49098,85],{"class":84},[67,49100,49101],{"class":77}," 0\n",[67,49103,49104,49107,49109,49112,49114,49116],{"class":69,"line":706},[67,49105,49106],{"class":73},"sum_normalized_pixel_values ",[67,49108,85],{"class":84},[67,49110,49111],{"class":73}," np.zeros(",[67,49113,2071],{"class":77},[67,49115,47576],{"class":73},[67,49117,49118],{"class":2058},"# 如果是RGB图像，需要三个通道的均值和方差\n",[67,49120,49121],{"class":69,"line":712},[67,49122,631],{"emptyLinePlaceholder":630},[67,49124,49125],{"class":69,"line":717},[67,49126,49127],{"class":2058},"# 遍历文件夹中的图片文件\n",[67,49129,49130,49132,49135,49137],{"class":69,"line":723},[67,49131,1512],{"class":84},[67,49133,49134],{"class":73}," root, dirs, files ",[67,49136,941],{"class":84},[67,49138,49139],{"class":73}," os.walk(folder_path):\n",[67,49141,49142,49144,49147,49149],{"class":69,"line":729},[67,49143,935],{"class":84},[67,49145,49146],{"class":73}," filename ",[67,49148,941],{"class":84},[67,49150,49151],{"class":73}," files:\n",[67,49153,49154,49156,49159,49162,49164,49167,49169,49172,49174,49177,49180],{"class":69,"line":735},[67,49155,4329],{"class":84},[67,49157,49158],{"class":73}," filename.endswith((",[67,49160,49161],{"class":114},"'.jpg'",[67,49163,1868],{"class":73},[67,49165,49166],{"class":114},"'.jpeg'",[67,49168,1868],{"class":73},[67,49170,49171],{"class":114},"'.png'",[67,49173,1868],{"class":73},[67,49175,49176],{"class":114},"'.bmp'",[67,49178,49179],{"class":73},")):  ",[67,49181,49182],{"class":2058},"# 可根据实际情况添加其他格式\n",[67,49184,49185,49187,49189],{"class":69,"line":741},[67,49186,47441],{"class":73},[67,49188,85],{"class":84},[67,49190,49191],{"class":73}," os.path.join(root, filename)\n",[67,49193,49194,49197,49199],{"class":69,"line":747},[67,49195,49196],{"class":73},"            image ",[67,49198,85],{"class":84},[67,49200,49201],{"class":73}," Image.open(image_path)\n",[67,49203,49204,49207,49209],{"class":69,"line":753},[67,49205,49206],{"class":73},"            image_array ",[67,49208,85],{"class":84},[67,49210,49211],{"class":73}," np.array(image)\n",[67,49213,49214],{"class":69,"line":758},[67,49215,631],{"emptyLinePlaceholder":630},[67,49217,49218],{"class":69,"line":764},[67,49219,49220],{"class":2058},"            # 归一化像素值到0-1之间\n",[67,49222,49223,49226,49228,49231,49233],{"class":69,"line":770},[67,49224,49225],{"class":73},"            normalized_image_array ",[67,49227,85],{"class":84},[67,49229,49230],{"class":73}," image_array ",[67,49232,2573],{"class":84},[67,49234,49235],{"class":77}," 255.0\n",[67,49237,49238],{"class":69,"line":776},[67,49239,631],{"emptyLinePlaceholder":630},[67,49241,49242],{"class":69,"line":782},[67,49243,49244],{"class":2058},"            # print(image_path)\n",[67,49246,49247],{"class":69,"line":788},[67,49248,49249],{"class":2058},"            # print(normalized_image_array.shape)\n",[67,49251,49252],{"class":69,"line":793},[67,49253,49254],{"class":2058},"            # 累积归一化后的像素值和像素数量\n",[67,49256,49257,49260,49262],{"class":69,"line":798},[67,49258,49259],{"class":73},"            total_pixels ",[67,49261,11283],{"class":84},[67,49263,49264],{"class":73}," normalized_image_array.size\n",[67,49266,49267],{"class":69,"line":816},[67,49268,49269],{"class":2058},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[67,49271,49272,49275,49277,49280,49283,49285,49287,49289,49291,49293],{"class":69,"line":832},[67,49273,49274],{"class":73},"            sum_normalized_pixel_values ",[67,49276,11283],{"class":84},[67,49278,49279],{"class":73}," np.sum(normalized_image_array, ",[67,49281,49282],{"class":7033},"axis",[67,49284,85],{"class":84},[67,49286,854],{"class":73},[67,49288,78],{"class":77},[67,49290,1868],{"class":73},[67,49292,2209],{"class":77},[67,49294,1050],{"class":73},[67,49296,49297],{"class":69,"line":843},[67,49298,631],{"emptyLinePlaceholder":630},[67,49300,49301],{"class":69,"line":848},[67,49302,49303],{"class":2058},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[67,49305,49306,49309,49311,49314,49316],{"class":69,"line":863},[67,49307,49308],{"class":73},"mean ",[67,49310,85],{"class":84},[67,49312,49313],{"class":73}," sum_normalized_pixel_values ",[67,49315,2573],{"class":84},[67,49317,49318],{"class":73}," total_pixels\n",[67,49320,49321],{"class":69,"line":876},[67,49322,631],{"emptyLinePlaceholder":630},[67,49324,49325,49328,49330,49332,49334],{"class":69,"line":889},[67,49326,49327],{"class":73},"sum_squared_diff ",[67,49329,85],{"class":84},[67,49331,49111],{"class":73},[67,49333,2071],{"class":77},[67,49335,829],{"class":73},[67,49337,49338],{"class":69,"line":894},[67,49339,631],{"emptyLinePlaceholder":630},[67,49341,49342],{"class":69,"line":911},[67,49343,49344],{"class":2058},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[67,49346,49347],{"class":69,"line":927},[67,49348,49349],{"class":2058},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[67,49351,49352],{"class":69,"line":932},[67,49353,49354],{"class":2058},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[67,49356,49357],{"class":69,"line":955},[67,49358,49359],{"class":2058},"# Image.open(image_path)：打开图片\n",[67,49361,49362],{"class":69,"line":971},[67,49363,49364],{"class":2058},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[67,49366,49367,49369,49371,49373],{"class":69,"line":1010},[67,49368,1512],{"class":84},[67,49370,49134],{"class":73},[67,49372,941],{"class":84},[67,49374,49139],{"class":73},[67,49376,49377,49379,49381,49383],{"class":69,"line":1016},[67,49378,935],{"class":84},[67,49380,49146],{"class":73},[67,49382,941],{"class":84},[67,49384,49151],{"class":73},[67,49386,49387,49389,49391,49393,49395,49397,49399,49401,49403,49405],{"class":69,"line":1021},[67,49388,4329],{"class":84},[67,49390,49158],{"class":73},[67,49392,49161],{"class":114},[67,49394,1868],{"class":73},[67,49396,49166],{"class":114},[67,49398,1868],{"class":73},[67,49400,49171],{"class":114},[67,49402,1868],{"class":73},[67,49404,49176],{"class":114},[67,49406,49407],{"class":73},")):\n",[67,49409,49410,49412,49414],{"class":69,"line":1034},[67,49411,47441],{"class":73},[67,49413,85],{"class":84},[67,49415,49191],{"class":73},[67,49417,49418,49420,49422],{"class":69,"line":1053},[67,49419,49196],{"class":73},[67,49421,85],{"class":84},[67,49423,49201],{"class":73},[67,49425,49426,49428,49430],{"class":69,"line":1070},[67,49427,49206],{"class":73},[67,49429,85],{"class":84},[67,49431,49211],{"class":73},[67,49433,49434],{"class":69,"line":1083},[67,49435,49220],{"class":2058},[67,49437,49438,49440,49442,49444,49446],{"class":69,"line":1088},[67,49439,49225],{"class":73},[67,49441,85],{"class":84},[67,49443,49230],{"class":73},[67,49445,2573],{"class":84},[67,49447,49235],{"class":77},[67,49449,49450],{"class":69,"line":1093},[67,49451,49249],{"class":2058},[67,49453,49454],{"class":69,"line":1110},[67,49455,49456],{"class":2058},"            # print(mean.shape)\n",[67,49458,49459],{"class":69,"line":11603},[67,49460,49244],{"class":2058},[67,49462,49463],{"class":69,"line":11612},[67,49464,631],{"emptyLinePlaceholder":630},[67,49466,49467,49470],{"class":69,"line":11617},[67,49468,49469],{"class":84},"            try",[67,49471,813],{"class":73},[67,49473,49474,49477,49479,49482,49484,49487,49489],{"class":69,"line":11623},[67,49475,49476],{"class":73},"                diff ",[67,49478,85],{"class":84},[67,49480,49481],{"class":73}," (normalized_image_array ",[67,49483,1863],{"class":84},[67,49485,49486],{"class":73}," mean) ",[67,49488,12461],{"class":84},[67,49490,49491],{"class":77}," 2\n",[67,49493,49494,49497,49499,49502,49504,49506,49508,49510,49512,49514],{"class":69,"line":11644},[67,49495,49496],{"class":73},"                sum_squared_diff ",[67,49498,11283],{"class":84},[67,49500,49501],{"class":73}," np.sum(diff, ",[67,49503,49282],{"class":7033},[67,49505,85],{"class":84},[67,49507,854],{"class":73},[67,49509,78],{"class":77},[67,49511,1868],{"class":73},[67,49513,2209],{"class":77},[67,49515,1050],{"class":73},[67,49517,49518,49521],{"class":69,"line":11650},[67,49519,49520],{"class":84},"            except",[67,49522,813],{"class":73},[67,49524,49525,49528,49530,49532,49535],{"class":69,"line":11664},[67,49526,49527],{"class":77},"                print",[67,49529,854],{"class":73},[67,49531,2052],{"class":84},[67,49533,49534],{"class":114},"\"捕获到自定义异常\"",[67,49536,829],{"class":73},[67,49538,49539],{"class":69,"line":11670},[67,49540,49541],{"class":2058},"            # diff = (normalized_image_array - mean) ** 2\n",[67,49543,49544],{"class":69,"line":11697},[67,49545,49546],{"class":2058},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[67,49548,49549],{"class":69,"line":11706},[67,49550,631],{"emptyLinePlaceholder":630},[67,49552,49553,49556,49558,49561,49563],{"class":69,"line":11712},[67,49554,49555],{"class":73},"variance ",[67,49557,85],{"class":84},[67,49559,49560],{"class":73}," sum_squared_diff ",[67,49562,2573],{"class":84},[67,49564,49318],{"class":73},[67,49566,49567],{"class":69,"line":11720},[67,49568,631],{"emptyLinePlaceholder":630},[67,49570,49571,49573,49575,49578],{"class":69,"line":11725},[67,49572,1626],{"class":77},[67,49574,854],{"class":73},[67,49576,49577],{"class":114},"\"Mean:\"",[67,49579,49580],{"class":73},", mean)\n",[67,49582,49583,49585,49587,49590],{"class":69,"line":18401},[67,49584,1626],{"class":77},[67,49586,854],{"class":73},[67,49588,49589],{"class":114},"\"Variance:\"",[67,49591,49592],{"class":73},", variance)\n",[58,49594,49596],{"className":60,"code":49595,"language":62,"meta":63,"style":63},"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",[32,49597,49598,49604,49610,49620,49626,49636,49650,49660,49670,49680,49684,49694,49704,49708,49712,49720,49725,49730,49749,49753,49758,49763,49768,49773,49814,49819,49829,49834,49847,49852,49857,49862,49867,49872,49876,49881,49886,49908,49912,49944,49958,49968,49978,49982,49992,50006,50016,50026,50036,50042,50046,50050,50054,50058,50062,50070,50090,50094,50098,50102,50106,50122,50126,50130,50138,50142,50146,50154,50158,50162,50166,50174,50178,50182,50186,50194,50198,50206,50210,50218,50222,50230,50234,50242,50246,50250,50258,50262,50266,50278,50302,50316,50320,50324,50328,50336,50340,50348,50352,50360,50364,50372,50376,50384,50388,50396,50400,50412,50416,50424,50428,50436,50440,50444,50448,50452,50460,50464,50480,50484,50492,50496,50500,50504,50508,50512,50516,50520,50536,50540,50552,50556,50568,50572,50584,50588,50596,50600,50608,50612,50616,50620,50626,50630,50638,50642,50658,50662,50670,50674,50690,50702,50706,50718,50722,50726,50734,50738,50742,50750,50754,50762,50766,50774,50778,50782,50824,50866,50870,50874,50890,50894,50910,50914,50918,50926,50930,50934,50946,50984,50988,50992,51000,51004,51018,51028,51034,51040,51046,51052,51056,51060,51066,51070,51074,51082,51086,51104,51108,51112,51116,51132,51136,51140,51144,51148,51152,51172,51192,51196,51200,51204,51212,51220,51224,51240,51260,51280,51284,51289,51298,51307,51312,51317,51322,51335,51340,51349,51358,51375],{"__ignoreMap":63},[67,49599,49600,49602],{"class":69,"line":70},[67,49601,622],{"class":84},[67,49603,33593],{"class":73},[67,49605,49606,49608],{"class":69,"line":191},[67,49607,622],{"class":84},[67,49609,33600],{"class":73},[67,49611,49612,49614,49616,49618],{"class":69,"line":202},[67,49613,622],{"class":84},[67,49615,33611],{"class":73},[67,49617,649],{"class":84},[67,49619,33616],{"class":73},[67,49621,49622,49624],{"class":69,"line":641},[67,49623,622],{"class":84},[67,49625,32175],{"class":73},[67,49627,49628,49630,49632,49634],{"class":69,"line":655},[67,49629,32515],{"class":84},[67,49631,33187],{"class":73},[67,49633,622],{"class":84},[67,49635,33633],{"class":73},[67,49637,49638,49640,49642,49644,49647],{"class":69,"line":660},[67,49639,32515],{"class":84},[67,49641,33143],{"class":73},[67,49643,622],{"class":84},[67,49645,49646],{"class":73}," ImageFolder ",[67,49648,49649],{"class":2058},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[67,49651,49652,49654,49656,49658],{"class":69,"line":665},[67,49653,32515],{"class":84},[67,49655,33170],{"class":73},[67,49657,622],{"class":84},[67,49659,33175],{"class":73},[67,49661,49662,49664,49666,49668],{"class":69,"line":677},[67,49663,622],{"class":84},[67,49665,33187],{"class":73},[67,49667,649],{"class":84},[67,49669,33192],{"class":73},[67,49671,49672,49674,49676,49678],{"class":69,"line":683},[67,49673,622],{"class":84},[67,49675,33204],{"class":73},[67,49677,649],{"class":84},[67,49679,33209],{"class":73},[67,49681,49682],{"class":69,"line":689},[67,49683,33678],{"class":2058},[67,49685,49686,49688,49690,49692],{"class":69,"line":694},[67,49687,32515],{"class":84},[67,49689,33685],{"class":73},[67,49691,622],{"class":84},[67,49693,44799],{"class":73},[67,49695,49696,49698,49700,49702],{"class":69,"line":700},[67,49697,32515],{"class":84},[67,49699,32518],{"class":73},[67,49701,622],{"class":84},[67,49703,32523],{"class":73},[67,49705,49706],{"class":69,"line":706},[67,49707,631],{"emptyLinePlaceholder":630},[67,49709,49710],{"class":69,"line":712},[67,49711,33713],{"class":2058},[67,49713,49714,49716,49718],{"class":69,"line":717},[67,49715,801],{"class":84},[67,49717,33720],{"class":110},[67,49719,33723],{"class":73},[67,49721,49722],{"class":69,"line":723},[67,49723,49724],{"class":2058},"    # 导入自己的数据集，并进行数据处理\n",[67,49726,49727],{"class":69,"line":729},[67,49728,49729],{"class":2058},"    # 定义数据集的路径\n",[67,49731,49732,49735,49737,49739,49741,49743,49747],{"class":69,"line":735},[67,49733,49734],{"class":77},"    ROOT_PATH",[67,49736,85],{"class":84},[67,49738,2659],{"class":84},[67,49740,2243],{"class":114},[67,49742,2547],{"class":77},[67,49744,49746],{"class":49745},"sA_wV","\u002Fdata\u002Ftrain",[67,49748,26923],{"class":114},[67,49750,49751],{"class":69,"line":741},[67,49752,631],{"emptyLinePlaceholder":630},[67,49754,49755],{"class":69,"line":747},[67,49756,49757],{"class":2058},"    # 定义归一化方法\n",[67,49759,49760],{"class":69,"line":753},[67,49761,49762],{"class":2058},"    # 这里需要先计算一下数据集的均值和方差\n",[67,49764,49765],{"class":69,"line":758},[67,49766,49767],{"class":2058},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[67,49769,49770],{"class":69,"line":764},[67,49771,49772],{"class":2058},"    # 第一个参数是均值，第二个参数是方差\n",[67,49774,49775,49778,49780,49783,49786,49788,49791,49793,49796,49799,49802,49804,49807,49809,49812],{"class":69,"line":770},[67,49776,49777],{"class":73},"    normalize",[67,49779,85],{"class":84},[67,49781,49782],{"class":73},"transforms.Normalize([",[67,49784,49785],{"class":77},"0.162",[67,49787,2369],{"class":73},[67,49789,49790],{"class":77},"0.151",[67,49792,2369],{"class":73},[67,49794,49795],{"class":77},"0.138",[67,49797,49798],{"class":73},"],[",[67,49800,49801],{"class":77},"0.058",[67,49803,2369],{"class":73},[67,49805,49806],{"class":77},"0.052",[67,49808,2369],{"class":73},[67,49810,49811],{"class":77},"0.048",[67,49813,6476],{"class":73},[67,49815,49816],{"class":69,"line":776},[67,49817,49818],{"class":2058},"    # 定义数据集处理方法变量\n",[67,49820,49821,49824,49826],{"class":69,"line":782},[67,49822,49823],{"class":73},"    train_transform",[67,49825,85],{"class":84},[67,49827,49828],{"class":73},"transforms.Compose([\n",[67,49830,49831],{"class":69,"line":788},[67,49832,49833],{"class":2058},"        # 调整图像大小为224*224\n",[67,49835,49836,49839,49841,49843,49845],{"class":69,"line":793},[67,49837,49838],{"class":73},"        transforms.Resize((",[67,49840,33273],{"class":77},[67,49842,2369],{"class":73},[67,49844,33273],{"class":77},[67,49846,44390],{"class":73},[67,49848,49849],{"class":69,"line":798},[67,49850,49851],{"class":2058},"        # 将图像转换为张量\n",[67,49853,49854],{"class":69,"line":816},[67,49855,49856],{"class":73},"        transforms.ToTensor(),\n",[67,49858,49859],{"class":69,"line":832},[67,49860,49861],{"class":73},"        normalize])\n",[67,49863,49864],{"class":69,"line":843},[67,49865,49866],{"class":2058},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[67,49868,49869],{"class":69,"line":848},[67,49870,49871],{"class":2058},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[67,49873,49874],{"class":69,"line":863},[67,49875,631],{"emptyLinePlaceholder":630},[67,49877,49878],{"class":69,"line":876},[67,49879,49880],{"class":2058},"    # 加载数据集\n",[67,49882,49883],{"class":69,"line":889},[67,49884,49885],{"class":2058},"    # 传入数据集路径与处理方法\n",[67,49887,49888,49890,49892,49895,49898,49900,49903,49905],{"class":69,"line":894},[67,49889,33728],{"class":73},[67,49891,85],{"class":84},[67,49893,49894],{"class":73},"ImageFolder(",[67,49896,49897],{"class":77},"ROOT_PATH",[67,49899,2369],{"class":73},[67,49901,49902],{"class":7033},"transform",[67,49904,85],{"class":84},[67,49906,49907],{"class":73},"train_transform)\n",[67,49909,49910],{"class":69,"line":911},[67,49911,631],{"emptyLinePlaceholder":630},[67,49913,49914,49916,49918,49920,49922,49924,49926,49928,49930,49932,49934,49936,49938,49940,49942],{"class":69,"line":927},[67,49915,33780],{"class":73},[67,49917,85],{"class":84},[67,49919,33785],{"class":73},[67,49921,33788],{"class":77},[67,49923,854],{"class":73},[67,49925,33793],{"class":77},[67,49927,965],{"class":84},[67,49929,9174],{"class":77},[67,49931,33800],{"class":73},[67,49933,33788],{"class":77},[67,49935,854],{"class":73},[67,49937,33807],{"class":77},[67,49939,965],{"class":84},[67,49941,9174],{"class":77},[67,49943,33814],{"class":73},[67,49945,49946,49948,49950,49952,49954,49956],{"class":69,"line":932},[67,49947,33819],{"class":73},[67,49949,85],{"class":84},[67,49951,33824],{"class":73},[67,49953,33309],{"class":7033},[67,49955,85],{"class":84},[67,49957,33314],{"class":73},[67,49959,49960,49962,49964,49966],{"class":69,"line":955},[67,49961,33835],{"class":7033},[67,49963,85],{"class":84},[67,49965,2189],{"class":77},[67,49967,33238],{"class":73},[67,49969,49970,49972,49974,49976],{"class":69,"line":971},[67,49971,33847],{"class":7033},[67,49973,85],{"class":84},[67,49975,33248],{"class":77},[67,49977,33238],{"class":73},[67,49979,49980],{"class":69,"line":1010},[67,49981,33858],{"class":2058},[67,49983,49984,49986,49988,49990],{"class":69,"line":1016},[67,49985,33863],{"class":7033},[67,49987,85],{"class":84},[67,49989,2386],{"class":77},[67,49991,829],{"class":73},[67,49993,49994,49996,49998,50000,50002,50004],{"class":69,"line":1021},[67,49995,33874],{"class":73},[67,49997,85],{"class":84},[67,49999,33306],{"class":73},[67,50001,33309],{"class":7033},[67,50003,85],{"class":84},[67,50005,33885],{"class":73},[67,50007,50008,50010,50012,50014],{"class":69,"line":1034},[67,50009,33890],{"class":7033},[67,50011,85],{"class":84},[67,50013,2189],{"class":77},[67,50015,33238],{"class":73},[67,50017,50018,50020,50022,50024],{"class":69,"line":1053},[67,50019,33901],{"class":7033},[67,50021,85],{"class":84},[67,50023,33248],{"class":77},[67,50025,33238],{"class":73},[67,50027,50028,50030,50032,50034],{"class":69,"line":1070},[67,50029,33912],{"class":7033},[67,50031,85],{"class":84},[67,50033,2386],{"class":77},[67,50035,829],{"class":73},[67,50037,50038,50040],{"class":69,"line":1083},[67,50039,5910],{"class":84},[67,50041,33925],{"class":73},[67,50043,50044],{"class":69,"line":1088},[67,50045,631],{"emptyLinePlaceholder":630},[67,50047,50048],{"class":69,"line":1093},[67,50049,33934],{"class":2058},[67,50051,50052],{"class":69,"line":1110},[67,50053,33939],{"class":2058},[67,50055,50056],{"class":69,"line":11603},[67,50057,631],{"emptyLinePlaceholder":630},[67,50059,50060],{"class":69,"line":11612},[67,50061,33948],{"class":2058},[67,50063,50064,50066,50068],{"class":69,"line":11617},[67,50065,801],{"class":84},[67,50067,33955],{"class":110},[67,50069,33958],{"class":73},[67,50071,50072,50074,50076,50078,50080,50082,50084,50086,50088],{"class":69,"line":11623},[67,50073,33013],{"class":73},[67,50075,85],{"class":84},[67,50077,32230],{"class":73},[67,50079,33020],{"class":114},[67,50081,3547],{"class":84},[67,50083,33025],{"class":73},[67,50085,3544],{"class":84},[67,50087,33977],{"class":114},[67,50089,829],{"class":73},[67,50091,50092],{"class":69,"line":11644},[67,50093,631],{"emptyLinePlaceholder":630},[67,50095,50096],{"class":69,"line":11650},[67,50097,33992],{"class":2058},[67,50099,50100],{"class":69,"line":11664},[67,50101,33997],{"class":2058},[67,50103,50104],{"class":69,"line":11670},[67,50105,34002],{"class":2058},[67,50107,50108,50110,50112,50114,50116,50118,50120],{"class":69,"line":11697},[67,50109,34007],{"class":73},[67,50111,85],{"class":84},[67,50113,34012],{"class":73},[67,50115,34015],{"class":7033},[67,50117,85],{"class":84},[67,50119,34020],{"class":77},[67,50121,829],{"class":73},[67,50123,50124],{"class":69,"line":11706},[67,50125,631],{"emptyLinePlaceholder":630},[67,50127,50128],{"class":69,"line":11712},[67,50129,34031],{"class":2058},[67,50131,50132,50134,50136],{"class":69,"line":11720},[67,50133,34036],{"class":73},[67,50135,85],{"class":84},[67,50137,34041],{"class":73},[67,50139,50140],{"class":69,"line":11725},[67,50141,631],{"emptyLinePlaceholder":630},[67,50143,50144],{"class":69,"line":18401},[67,50145,34050],{"class":2058},[67,50147,50148,50150,50152],{"class":69,"line":18407},[67,50149,33065],{"class":73},[67,50151,85],{"class":84},[67,50153,34059],{"class":73},[67,50155,50156],{"class":69,"line":18430},[67,50157,34064],{"class":2058},[67,50159,50160],{"class":69,"line":18436},[67,50161,34069],{"class":2058},[67,50163,50164],{"class":69,"line":18459},[67,50165,34074],{"class":2058},[67,50167,50168,50170,50172],{"class":69,"line":18473},[67,50169,34079],{"class":73},[67,50171,85],{"class":84},[67,50173,34084],{"class":73},[67,50175,50176],{"class":69,"line":18493},[67,50177,631],{"emptyLinePlaceholder":630},[67,50179,50180],{"class":69,"line":18499},[67,50181,34097],{"class":2058},[67,50183,50184],{"class":69,"line":18510},[67,50185,34102],{"class":2058},[67,50187,50188,50190,50192],{"class":69,"line":18533},[67,50189,34107],{"class":73},[67,50191,85],{"class":84},[67,50193,34112],{"class":77},[67,50195,50196],{"class":69,"line":18555},[67,50197,34117],{"class":2058},[67,50199,50200,50202,50204],{"class":69,"line":18560},[67,50201,34122],{"class":73},[67,50203,85],{"class":84},[67,50205,34127],{"class":73},[67,50207,50208],{"class":69,"line":18566},[67,50209,34132],{"class":2058},[67,50211,50212,50214,50216],{"class":69,"line":18580},[67,50213,34137],{"class":73},[67,50215,85],{"class":84},[67,50217,34127],{"class":73},[67,50219,50220],{"class":69,"line":18593},[67,50221,34146],{"class":2058},[67,50223,50224,50226,50228],{"class":69,"line":18598},[67,50225,34151],{"class":73},[67,50227,85],{"class":84},[67,50229,34127],{"class":73},[67,50231,50232],{"class":69,"line":18612},[67,50233,34160],{"class":2058},[67,50235,50236,50238,50240],{"class":69,"line":18617},[67,50237,34165],{"class":73},[67,50239,85],{"class":84},[67,50241,34127],{"class":73},[67,50243,50244],{"class":69,"line":18623},[67,50245,631],{"emptyLinePlaceholder":630},[67,50247,50248],{"class":69,"line":18628},[67,50249,34178],{"class":2058},[67,50251,50252,50254,50256],{"class":69,"line":18642},[67,50253,34183],{"class":73},[67,50255,85],{"class":84},[67,50257,34188],{"class":73},[67,50259,50260],{"class":69,"line":18647},[67,50261,631],{"emptyLinePlaceholder":630},[67,50263,50264],{"class":69,"line":18652},[67,50265,34201],{"class":2058},[67,50267,50268,50270,50272,50274,50276],{"class":69,"line":18666},[67,50269,935],{"class":84},[67,50271,34208],{"class":73},[67,50273,941],{"class":84},[67,50275,944],{"class":77},[67,50277,34215],{"class":73},[67,50279,50280,50282,50284,50286,50288,50290,50292,50294,50296,50298,50300],{"class":69,"line":18678},[67,50281,34220],{"class":77},[67,50283,854],{"class":73},[67,50285,34225],{"class":114},[67,50287,34228],{"class":77},[67,50289,2573],{"class":114},[67,50291,34228],{"class":77},[67,50293,2243],{"class":114},[67,50295,34237],{"class":73},[67,50297,1863],{"class":84},[67,50299,2209],{"class":77},[67,50301,1050],{"class":73},[67,50303,50304,50306,50308,50310,50312,50314],{"class":69,"line":18683},[67,50305,34220],{"class":77},[67,50307,854],{"class":73},[67,50309,34252],{"class":114},[67,50311,965],{"class":84},[67,50313,2437],{"class":77},[67,50315,829],{"class":73},[67,50317,50318],{"class":69,"line":18696},[67,50319,631],{"emptyLinePlaceholder":630},[67,50321,50322],{"class":69,"line":18701},[67,50323,34267],{"class":2058},[67,50325,50326],{"class":69,"line":18706},[67,50327,34272],{"class":2058},[67,50329,50330,50332,50334],{"class":69,"line":18711},[67,50331,34277],{"class":73},[67,50333,85],{"class":84},[67,50335,34112],{"class":77},[67,50337,50338],{"class":69,"line":18724},[67,50339,34286],{"class":2058},[67,50341,50342,50344,50346],{"class":69,"line":18729},[67,50343,34291],{"class":73},[67,50345,85],{"class":84},[67,50347,4909],{"class":77},[67,50349,50350],{"class":69,"line":34402},[67,50351,34300],{"class":2058},[67,50353,50354,50356,50358],{"class":69,"line":34408},[67,50355,34305],{"class":73},[67,50357,85],{"class":84},[67,50359,34112],{"class":77},[67,50361,50362],{"class":69,"line":34414},[67,50363,34314],{"class":2058},[67,50365,50366,50368,50370],{"class":69,"line":34420},[67,50367,34319],{"class":73},[67,50369,85],{"class":84},[67,50371,4909],{"class":77},[67,50373,50374],{"class":69,"line":34426},[67,50375,34328],{"class":2058},[67,50377,50378,50380,50382],{"class":69,"line":34437},[67,50379,34333],{"class":73},[67,50381,85],{"class":84},[67,50383,4909],{"class":77},[67,50385,50386],{"class":69,"line":34443},[67,50387,34342],{"class":2058},[67,50389,50390,50392,50394],{"class":69,"line":34463},[67,50391,34347],{"class":73},[67,50393,85],{"class":84},[67,50395,4909],{"class":77},[67,50397,50398],{"class":69,"line":34469},[67,50399,34356],{"class":2058},[67,50401,50402,50404,50406,50408,50410],{"class":69,"line":34480},[67,50403,5225],{"class":84},[67,50405,33373],{"class":73},[67,50407,941],{"class":84},[67,50409,33378],{"class":77},[67,50411,34369],{"class":73},[67,50413,50414],{"class":69,"line":34486},[67,50415,34374],{"class":2058},[67,50417,50418,50420,50422],{"class":69,"line":34492},[67,50419,34379],{"class":73},[67,50421,85],{"class":84},[67,50423,34384],{"class":73},[67,50425,50426],{"class":69,"line":34498},[67,50427,34389],{"class":2058},[67,50429,50430,50432,50434],{"class":69,"line":34504},[67,50431,34394],{"class":73},[67,50433,85],{"class":84},[67,50435,34399],{"class":73},[67,50437,50438],{"class":69,"line":34510},[67,50439,34405],{"class":2058},[67,50441,50442],{"class":69,"line":34516},[67,50443,34411],{"class":73},[67,50445,50446],{"class":69,"line":34522},[67,50447,34417],{"class":2058},[67,50449,50450],{"class":69,"line":34542},[67,50451,34423],{"class":2058},[67,50453,50454,50456,50458],{"class":69,"line":34548},[67,50455,34429],{"class":73},[67,50457,85],{"class":84},[67,50459,34434],{"class":73},[67,50461,50462],{"class":69,"line":34564},[67,50463,34440],{"class":2058},[67,50465,50466,50468,50470,50472,50474,50476,50478],{"class":69,"line":34570},[67,50467,34446],{"class":73},[67,50469,85],{"class":84},[67,50471,34451],{"class":73},[67,50473,34454],{"class":7033},[67,50475,85],{"class":84},[67,50477,2209],{"class":77},[67,50479,829],{"class":73},[67,50481,50482],{"class":69,"line":34584},[67,50483,34466],{"class":2058},[67,50485,50486,50488,50490],{"class":69,"line":34590},[67,50487,34472],{"class":73},[67,50489,85],{"class":84},[67,50491,34477],{"class":73},[67,50493,50494],{"class":69,"line":34605},[67,50495,34483],{"class":2058},[67,50497,50498],{"class":69,"line":34611},[67,50499,34489],{"class":73},[67,50501,50502],{"class":69,"line":34620},[67,50503,34495],{"class":2058},[67,50505,50506],{"class":69,"line":34626},[67,50507,34501],{"class":73},[67,50509,50510],{"class":69,"line":34635},[67,50511,34507],{"class":2058},[67,50513,50514],{"class":69,"line":34641},[67,50515,34513],{"class":73},[67,50517,50518],{"class":69,"line":34647},[67,50519,34519],{"class":2058},[67,50521,50522,50524,50526,50528,50530,50532,50534],{"class":69,"line":34656},[67,50523,34525],{"class":73},[67,50525,11283],{"class":84},[67,50527,34530],{"class":73},[67,50529,965],{"class":84},[67,50531,34535],{"class":73},[67,50533,78],{"class":77},[67,50535,829],{"class":73},[67,50537,50538],{"class":69,"line":34662},[67,50539,34545],{"class":2058},[67,50541,50542,50544,50546,50548,50550],{"class":69,"line":34673},[67,50543,34551],{"class":73},[67,50545,11283],{"class":84},[67,50547,34556],{"class":73},[67,50549,4774],{"class":84},[67,50551,34561],{"class":73},[67,50553,50554],{"class":69,"line":34679},[67,50555,34567],{"class":2058},[67,50557,50558,50560,50562,50564,50566],{"class":69,"line":34698},[67,50559,34573],{"class":73},[67,50561,11283],{"class":84},[67,50563,34535],{"class":73},[67,50565,78],{"class":77},[67,50567,829],{"class":73},[67,50569,50570],{"class":69,"line":34704},[67,50571,34587],{"class":2058},[67,50573,50574,50576,50578,50580,50582],{"class":69,"line":34715},[67,50575,5225],{"class":84},[67,50577,34595],{"class":73},[67,50579,941],{"class":84},[67,50581,33378],{"class":77},[67,50583,34602],{"class":73},[67,50585,50586],{"class":69,"line":34721},[67,50587,34608],{"class":2058},[67,50589,50590,50592,50594],{"class":69,"line":34741},[67,50591,34379],{"class":73},[67,50593,85],{"class":84},[67,50595,34384],{"class":73},[67,50597,50598],{"class":69,"line":34757},[67,50599,34623],{"class":2058},[67,50601,50602,50604,50606],{"class":69,"line":34763},[67,50603,34394],{"class":73},[67,50605,85],{"class":84},[67,50607,34399],{"class":73},[67,50609,50610],{"class":69,"line":34777},[67,50611,34638],{"class":2058},[67,50613,50614],{"class":69,"line":34783},[67,50615,34644],{"class":73},[67,50617,50618],{"class":69,"line":34789},[67,50619,38124],{"class":2058},[67,50621,50622,50624],{"class":69,"line":34800},[67,50623,34650],{"class":84},[67,50625,34653],{"class":73},[67,50627,50628],{"class":69,"line":34806},[67,50629,34659],{"class":2058},[67,50631,50632,50634,50636],{"class":69,"line":34812},[67,50633,38139],{"class":73},[67,50635,85],{"class":84},[67,50637,34434],{"class":73},[67,50639,50640],{"class":69,"line":34822},[67,50641,34676],{"class":2058},[67,50643,50644,50646,50648,50650,50652,50654,50656],{"class":69,"line":34828},[67,50645,38152],{"class":73},[67,50647,85],{"class":84},[67,50649,34451],{"class":73},[67,50651,34454],{"class":7033},[67,50653,85],{"class":84},[67,50655,2209],{"class":77},[67,50657,829],{"class":73},[67,50659,50660],{"class":69,"line":34839},[67,50661,34701],{"class":2058},[67,50663,50664,50666,50668],{"class":69,"line":34845},[67,50665,38173],{"class":73},[67,50667,85],{"class":84},[67,50669,34477],{"class":73},[67,50671,50672],{"class":69,"line":34855},[67,50673,34718],{"class":2058},[67,50675,50676,50678,50680,50682,50684,50686,50688],{"class":69,"line":34860},[67,50677,38186],{"class":73},[67,50679,11283],{"class":84},[67,50681,38191],{"class":73},[67,50683,965],{"class":84},[67,50685,34535],{"class":73},[67,50687,78],{"class":77},[67,50689,829],{"class":73},[67,50691,50692,50694,50696,50698,50700],{"class":69,"line":34866},[67,50693,38204],{"class":73},[67,50695,11283],{"class":84},[67,50697,34556],{"class":73},[67,50699,4774],{"class":84},[67,50701,34561],{"class":73},[67,50703,50704],{"class":69,"line":34915},[67,50705,38217],{"class":2058},[67,50707,50708,50710,50712,50714,50716],{"class":69,"line":34962},[67,50709,38222],{"class":73},[67,50711,11283],{"class":84},[67,50713,34535],{"class":73},[67,50715,78],{"class":77},[67,50717,829],{"class":73},[67,50719,50720],{"class":69,"line":34967},[67,50721,34780],{"class":2058},[67,50723,50724],{"class":69,"line":34973},[67,50725,34786],{"class":2058},[67,50727,50728,50730,50732],{"class":69,"line":34992},[67,50729,34792],{"class":73},[67,50731,2573],{"class":84},[67,50733,34797],{"class":73},[67,50735,50736],{"class":69,"line":34998},[67,50737,34803],{"class":2058},[67,50739,50740],{"class":69,"line":35018},[67,50741,34809],{"class":2058},[67,50743,50744,50746,50748],{"class":69,"line":35024},[67,50745,34815],{"class":73},[67,50747,2573],{"class":84},[67,50749,34797],{"class":73},[67,50751,50752],{"class":69,"line":35030},[67,50753,34825],{"class":2058},[67,50755,50756,50758,50760],{"class":69,"line":35040},[67,50757,34831],{"class":73},[67,50759,2573],{"class":84},[67,50761,34836],{"class":73},[67,50763,50764],{"class":69,"line":35045},[67,50765,34842],{"class":2058},[67,50767,50768,50770,50772],{"class":69,"line":35051},[67,50769,34848],{"class":73},[67,50771,2573],{"class":84},[67,50773,34836],{"class":73},[67,50775,50776],{"class":69,"line":35067},[67,50777,631],{"emptyLinePlaceholder":630},[67,50779,50780],{"class":69,"line":35112},[67,50781,34863],{"class":2058},[67,50783,50784,50786,50788,50790,50792,50794,50796,50798,50800,50802,50804,50806,50808,50810,50812,50814,50816,50818,50820,50822],{"class":69,"line":35118},[67,50785,34220],{"class":77},[67,50787,854],{"class":73},[67,50789,5414],{"class":114},[67,50791,34228],{"class":77},[67,50793,34877],{"class":114},[67,50795,2885],{"class":77},[67,50797,34882],{"class":84},[67,50799,2934],{"class":77},[67,50801,34887],{"class":114},[67,50803,2885],{"class":77},[67,50805,34882],{"class":84},[67,50807,2934],{"class":77},[67,50809,5414],{"class":114},[67,50811,34898],{"class":73},[67,50813,1863],{"class":84},[67,50815,2209],{"class":77},[67,50817,34905],{"class":73},[67,50819,1863],{"class":84},[67,50821,2209],{"class":77},[67,50823,34912],{"class":73},[67,50825,50826,50828,50830,50832,50834,50836,50838,50840,50842,50844,50846,50848,50850,50852,50854,50856,50858,50860,50862,50864],{"class":69,"line":35124},[67,50827,34220],{"class":77},[67,50829,854],{"class":73},[67,50831,5414],{"class":114},[67,50833,34228],{"class":77},[67,50835,34926],{"class":114},[67,50837,2885],{"class":77},[67,50839,34882],{"class":84},[67,50841,2934],{"class":77},[67,50843,34935],{"class":114},[67,50845,2885],{"class":77},[67,50847,34882],{"class":84},[67,50849,2934],{"class":77},[67,50851,5414],{"class":114},[67,50853,34946],{"class":73},[67,50855,1863],{"class":84},[67,50857,2209],{"class":77},[67,50859,34953],{"class":73},[67,50861,1863],{"class":84},[67,50863,2209],{"class":77},[67,50865,34912],{"class":73},[67,50867,50868],{"class":69,"line":35130},[67,50869,631],{"emptyLinePlaceholder":630},[67,50871,50872],{"class":69,"line":35141},[67,50873,34970],{"class":2058},[67,50875,50876,50878,50880,50882,50884,50886,50888],{"class":69,"line":35147},[67,50877,4329],{"class":84},[67,50879,34978],{"class":73},[67,50881,1863],{"class":84},[67,50883,2209],{"class":77},[67,50885,2928],{"class":73},[67,50887,2948],{"class":84},[67,50889,34989],{"class":73},[67,50891,50892],{"class":69,"line":35153},[67,50893,34995],{"class":2058},[67,50895,50896,50898,50900,50902,50904,50906,50908],{"class":69,"line":35159},[67,50897,35001],{"class":73},[67,50899,2041],{"class":77},[67,50901,85],{"class":84},[67,50903,35008],{"class":73},[67,50905,1863],{"class":84},[67,50907,2209],{"class":77},[67,50909,35015],{"class":73},[67,50911,50912],{"class":69,"line":35177},[67,50913,35021],{"class":2058},[67,50915,50916],{"class":69,"line":35191},[67,50917,35027],{"class":2058},[67,50919,50920,50922,50924],{"class":69,"line":35200},[67,50921,35033],{"class":73},[67,50923,85],{"class":84},[67,50925,34084],{"class":73},[67,50927,50928],{"class":69,"line":35209},[67,50929,631],{"emptyLinePlaceholder":630},[67,50931,50932],{"class":69,"line":35218},[67,50933,35048],{"class":2058},[67,50935,50936,50938,50940,50942,50944],{"class":69,"line":35227},[67,50937,35054],{"class":73},[67,50939,85],{"class":84},[67,50941,35059],{"class":73},[67,50943,1863],{"class":84},[67,50945,35064],{"class":73},[67,50947,50948,50950,50952,50954,50956,50958,50960,50962,50964,50966,50968,50970,50972,50974,50976,50978,50980,50982],{"class":69,"line":35233},[67,50949,34220],{"class":77},[67,50951,854],{"class":73},[67,50953,35074],{"class":114},[67,50955,2885],{"class":77},[67,50957,35079],{"class":84},[67,50959,2934],{"class":77},[67,50961,2533],{"class":114},[67,50963,2885],{"class":77},[67,50965,35079],{"class":84},[67,50967,2934],{"class":77},[67,50969,35092],{"class":114},[67,50971,35095],{"class":73},[67,50973,35098],{"class":84},[67,50975,2896],{"class":77},[67,50977,35103],{"class":73},[67,50979,2319],{"class":84},[67,50981,2896],{"class":77},[67,50983,1050],{"class":73},[67,50985,50986],{"class":69,"line":35239},[67,50987,38501],{"class":2058},[67,50989,50990],{"class":69,"line":35247},[67,50991,38506],{"class":2058},[67,50993,50994,50996,50998],{"class":69,"line":35252},[67,50995,38511],{"class":73},[67,50997,35136],{"class":114},[67,50999,829],{"class":73},[67,51001,51002],{"class":69,"line":35258},[67,51003,35156],{"class":2058},[67,51005,51006,51008,51010,51012,51014,51016],{"class":69,"line":35269},[67,51007,35162],{"class":73},[67,51009,85],{"class":84},[67,51011,35167],{"class":73},[67,51013,35170],{"class":7033},[67,51015,85],{"class":84},[67,51017,3400],{"class":73},[67,51019,51020,51022,51024,51026],{"class":69,"line":35275},[67,51021,35180],{"class":114},[67,51023,2848],{"class":73},[67,51025,35185],{"class":77},[67,51027,35188],{"class":73},[67,51029,51030,51032],{"class":69,"line":35295},[67,51031,35194],{"class":114},[67,51033,35197],{"class":73},[67,51035,51036,51038],{"class":69,"line":35301},[67,51037,35203],{"class":114},[67,51039,35206],{"class":73},[67,51041,51042,51044],{"class":69,"line":35307},[67,51043,35212],{"class":114},[67,51045,35215],{"class":73},[67,51047,51048,51050],{"class":69,"line":35313},[67,51049,35221],{"class":114},[67,51051,35224],{"class":73},[67,51053,51054],{"class":69,"line":35330},[67,51055,35230],{"class":73},[67,51057,51058],{"class":69,"line":35336},[67,51059,35236],{"class":2058},[67,51061,51062,51064],{"class":69,"line":35342},[67,51063,5910],{"class":84},[67,51065,35244],{"class":73},[67,51067,51068],{"class":69,"line":35348},[67,51069,631],{"emptyLinePlaceholder":630},[67,51071,51072],{"class":69,"line":35354},[67,51073,35255],{"class":2058},[67,51075,51076,51078,51080],{"class":69,"line":35360},[67,51077,801],{"class":84},[67,51079,35263],{"class":110},[67,51081,35266],{"class":73},[67,51083,51084],{"class":69,"line":35387},[67,51085,35272],{"class":2058},[67,51087,51088,51090,51092,51094,51096,51098,51100,51102],{"class":69,"line":35411},[67,51089,35278],{"class":73},[67,51091,33464],{"class":7033},[67,51093,85],{"class":84},[67,51095,854],{"class":73},[67,51097,2488],{"class":77},[67,51099,2369],{"class":73},[67,51101,1047],{"class":77},[67,51103,1050],{"class":73},[67,51105,51106],{"class":69,"line":35417},[67,51107,35298],{"class":2058},[67,51109,51110],{"class":69,"line":35423},[67,51111,35304],{"class":2058},[67,51113,51114],{"class":69,"line":35429},[67,51115,35310],{"class":2058},[67,51117,51118,51120,51122,51124,51126,51128,51130],{"class":69,"line":35440},[67,51119,33498],{"class":73},[67,51121,2209],{"class":77},[67,51123,2369],{"class":73},[67,51125,2077],{"class":77},[67,51127,2369],{"class":73},[67,51129,2209],{"class":77},[67,51131,829],{"class":73},[67,51133,51134],{"class":69,"line":35451},[67,51135,35333],{"class":2058},[67,51137,51138],{"class":69,"line":35457},[67,51139,35339],{"class":2058},[67,51141,51142],{"class":69,"line":35474},[67,51143,35345],{"class":2058},[67,51145,51146],{"class":69,"line":35497},[67,51147,35351],{"class":2058},[67,51149,51150],{"class":69,"line":35520},[67,51151,35357],{"class":2058},[67,51153,51154,51156,51158,51160,51162,51164,51166,51168,51170],{"class":69,"line":35526},[67,51155,35363],{"class":73},[67,51157,35366],{"class":114},[67,51159,35369],{"class":73},[67,51161,35372],{"class":114},[67,51163,2369],{"class":73},[67,51165,35377],{"class":7033},[67,51167,85],{"class":84},[67,51169,35382],{"class":114},[67,51171,829],{"class":73},[67,51173,51174,51176,51178,51180,51182,51184,51186,51188,51190],{"class":69,"line":35531},[67,51175,35363],{"class":73},[67,51177,35366],{"class":114},[67,51179,35394],{"class":73},[67,51181,35397],{"class":114},[67,51183,2369],{"class":73},[67,51185,35377],{"class":7033},[67,51187,85],{"class":84},[67,51189,35406],{"class":114},[67,51191,829],{"class":73},[67,51193,51194],{"class":69,"line":35540},[67,51195,35414],{"class":2058},[67,51197,51198],{"class":69,"line":35550},[67,51199,35420],{"class":73},[67,51201,51202],{"class":69,"line":35556},[67,51203,35426],{"class":2058},[67,51205,51206,51208,51210],{"class":69,"line":35561},[67,51207,35432],{"class":73},[67,51209,35435],{"class":114},[67,51211,829],{"class":73},[67,51213,51214,51216,51218],{"class":69,"line":35567},[67,51215,35443],{"class":73},[67,51217,35446],{"class":114},[67,51219,829],{"class":73},[67,51221,51222],{"class":69,"line":35580},[67,51223,35454],{"class":2058},[67,51225,51226,51228,51230,51232,51234,51236,51238],{"class":69,"line":35586},[67,51227,33498],{"class":73},[67,51229,2209],{"class":77},[67,51231,2369],{"class":73},[67,51233,2077],{"class":77},[67,51235,2369],{"class":73},[67,51237,2077],{"class":77},[67,51239,829],{"class":73},[67,51241,51242,51244,51246,51248,51250,51252,51254,51256,51258],{"class":69,"line":35597},[67,51243,35363],{"class":73},[67,51245,35366],{"class":114},[67,51247,35481],{"class":73},[67,51249,35372],{"class":114},[67,51251,2369],{"class":73},[67,51253,35377],{"class":7033},[67,51255,85],{"class":84},[67,51257,35492],{"class":114},[67,51259,829],{"class":73},[67,51261,51262,51264,51266,51268,51270,51272,51274,51276,51278],{"class":69,"line":35608},[67,51263,35363],{"class":73},[67,51265,35366],{"class":114},[67,51267,35504],{"class":73},[67,51269,35397],{"class":114},[67,51271,2369],{"class":73},[67,51273,35377],{"class":7033},[67,51275,85],{"class":84},[67,51277,35515],{"class":114},[67,51279,829],{"class":73},[67,51281,51282],{"class":69,"line":35627},[67,51283,35523],{"class":2058},[67,51285,51287],{"class":69,"line":51286},219,[67,51288,35420],{"class":73},[67,51290,51292,51294,51296],{"class":69,"line":51291},220,[67,51293,35432],{"class":73},[67,51295,35366],{"class":114},[67,51297,829],{"class":73},[67,51299,51301,51303,51305],{"class":69,"line":51300},221,[67,51302,35443],{"class":73},[67,51304,35545],{"class":114},[67,51306,829],{"class":73},[67,51308,51310],{"class":69,"line":51309},222,[67,51311,35553],{"class":73},[67,51313,51315],{"class":69,"line":51314},223,[67,51316,631],{"emptyLinePlaceholder":630},[67,51318,51320],{"class":69,"line":51319},224,[67,51321,35564],{"class":2058},[67,51323,51325,51327,51329,51331,51333],{"class":69,"line":51324},225,[67,51326,1096],{"class":84},[67,51328,1099],{"class":77},[67,51330,4774],{"class":84},[67,51332,33001],{"class":114},[67,51334,813],{"class":73},[67,51336,51338],{"class":69,"line":51337},226,[67,51339,35583],{"class":2058},[67,51341,51343,51345,51347],{"class":69,"line":51342},227,[67,51344,46314],{"class":73},[67,51346,85],{"class":84},[67,51348,46319],{"class":73},[67,51350,51352,51354,51356],{"class":69,"line":51351},228,[67,51353,35600],{"class":73},[67,51355,85],{"class":84},[67,51357,35605],{"class":73},[67,51359,51361,51363,51365,51367,51369,51371,51373],{"class":69,"line":51360},229,[67,51362,35162],{"class":73},[67,51364,85],{"class":84},[67,51366,46336],{"class":73},[67,51368,35618],{"class":7033},[67,51370,85],{"class":84},[67,51372,2896],{"class":77},[67,51374,829],{"class":73},[67,51376,51378],{"class":69,"line":51377},230,[67,51379,35630],{"class":73},[23794,51381,51383],{"id":51382},"_242测试代码","2.4.2.测试代码",[19,51385,51386],{},"使用测试集进行测试与推理",[58,51388,51390],{"className":60,"code":51389,"language":62,"meta":63,"style":63},"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",[32,51391,51392,51398,51408,51418,51429,51439,51443,51447,51455,51460,51464,51481,51485,51489,51493,51497,51501,51533,51537,51545,51549,51561,51565,51569,51573,51577,51581,51585,51589,51593,51611,51625,51629,51639,51649,51659,51665,51669,51673,51681,51685,51701,51709,51713,51717,51725,51733,51737,51741,51745,51749,51755,51759,51769,51777,51785,51789,51793,51797,51805,51809,51825,51829,51833,51837,51849,51853,51865,51869,51873,51885,51889,51899,51903,51907,51919,51923,51931,51935,51939,51947,51951,51959,51963,51967,51971,51975,51979,51995,52003,52007,52011,52029,52035,52039,52049,52057,52065,52069,52073,52077,52081,52089,52093,52109,52113,52121,52129],{"__ignoreMap":63},[67,51393,51394,51396],{"class":69,"line":70},[67,51395,622],{"class":84},[67,51397,32175],{"class":73},[67,51399,51400,51402,51404,51406],{"class":69,"line":191},[67,51401,622],{"class":84},[67,51403,33187],{"class":73},[67,51405,649],{"class":84},[67,51407,33192],{"class":73},[67,51409,51410,51412,51414,51416],{"class":69,"line":202},[67,51411,32515],{"class":84},[67,51413,33170],{"class":73},[67,51415,622],{"class":84},[67,51417,33175],{"class":73},[67,51419,51420,51422,51424,51426],{"class":69,"line":641},[67,51421,32515],{"class":84},[67,51423,33143],{"class":73},[67,51425,622],{"class":84},[67,51427,51428],{"class":73}," ImageFolder\n",[67,51430,51431,51433,51435,51437],{"class":69,"line":655},[67,51432,32515],{"class":84},[67,51434,33685],{"class":73},[67,51436,622],{"class":84},[67,51438,46408],{"class":73},[67,51440,51441],{"class":69,"line":660},[67,51442,631],{"emptyLinePlaceholder":630},[67,51444,51445],{"class":69,"line":665},[67,51446,35720],{"class":2058},[67,51448,51449,51451,51453],{"class":69,"line":677},[67,51450,801],{"class":84},[67,51452,35727],{"class":110},[67,51454,33723],{"class":73},[67,51456,51457],{"class":69,"line":683},[67,51458,51459],{"class":2058},"   # 导入自己的数据集，并进行数据处理\n",[67,51461,51462],{"class":69,"line":689},[67,51463,49729],{"class":2058},[67,51465,51466,51468,51470,51472,51474,51476,51479],{"class":69,"line":694},[67,51467,49734],{"class":77},[67,51469,85],{"class":84},[67,51471,2659],{"class":84},[67,51473,2243],{"class":114},[67,51475,2547],{"class":77},[67,51477,51478],{"class":49745},"\u002Fdata\u002Ftest",[67,51480,26923],{"class":114},[67,51482,51483],{"class":69,"line":700},[67,51484,631],{"emptyLinePlaceholder":630},[67,51486,51487],{"class":69,"line":706},[67,51488,49757],{"class":2058},[67,51490,51491],{"class":69,"line":712},[67,51492,49762],{"class":2058},[67,51494,51495],{"class":69,"line":717},[67,51496,49767],{"class":2058},[67,51498,51499],{"class":69,"line":723},[67,51500,49772],{"class":2058},[67,51502,51503,51505,51507,51509,51511,51513,51515,51517,51519,51521,51523,51525,51527,51529,51531],{"class":69,"line":729},[67,51504,49777],{"class":73},[67,51506,85],{"class":84},[67,51508,49782],{"class":73},[67,51510,49785],{"class":77},[67,51512,2369],{"class":73},[67,51514,49790],{"class":77},[67,51516,2369],{"class":73},[67,51518,49795],{"class":77},[67,51520,49798],{"class":73},[67,51522,49801],{"class":77},[67,51524,2369],{"class":73},[67,51526,49806],{"class":77},[67,51528,2369],{"class":73},[67,51530,49811],{"class":77},[67,51532,6476],{"class":73},[67,51534,51535],{"class":69,"line":735},[67,51536,49818],{"class":2058},[67,51538,51539,51541,51543],{"class":69,"line":741},[67,51540,49823],{"class":73},[67,51542,85],{"class":84},[67,51544,49828],{"class":73},[67,51546,51547],{"class":69,"line":747},[67,51548,49833],{"class":2058},[67,51550,51551,51553,51555,51557,51559],{"class":69,"line":753},[67,51552,49838],{"class":73},[67,51554,33273],{"class":77},[67,51556,2369],{"class":73},[67,51558,33273],{"class":77},[67,51560,44390],{"class":73},[67,51562,51563],{"class":69,"line":758},[67,51564,49851],{"class":2058},[67,51566,51567],{"class":69,"line":764},[67,51568,49856],{"class":73},[67,51570,51571],{"class":69,"line":770},[67,51572,49861],{"class":73},[67,51574,51575],{"class":69,"line":776},[67,51576,49866],{"class":2058},[67,51578,51579],{"class":69,"line":782},[67,51580,49871],{"class":2058},[67,51582,51583],{"class":69,"line":788},[67,51584,631],{"emptyLinePlaceholder":630},[67,51586,51587],{"class":69,"line":793},[67,51588,49880],{"class":2058},[67,51590,51591],{"class":69,"line":798},[67,51592,49885],{"class":2058},[67,51594,51595,51597,51599,51601,51603,51605,51607,51609],{"class":69,"line":816},[67,51596,35734],{"class":73},[67,51598,85],{"class":84},[67,51600,49894],{"class":73},[67,51602,49897],{"class":77},[67,51604,2369],{"class":73},[67,51606,49902],{"class":7033},[67,51608,85],{"class":84},[67,51610,49907],{"class":73},[67,51612,51613,51615,51617,51619,51621,51623],{"class":69,"line":832},[67,51614,35791],{"class":73},[67,51616,85],{"class":84},[67,51618,33306],{"class":73},[67,51620,33309],{"class":7033},[67,51622,85],{"class":84},[67,51624,35802],{"class":73},[67,51626,51627],{"class":69,"line":843},[67,51628,35807],{"class":2058},[67,51630,51631,51633,51635,51637],{"class":69,"line":848},[67,51632,35812],{"class":7033},[67,51634,85],{"class":84},[67,51636,2209],{"class":77},[67,51638,33238],{"class":73},[67,51640,51641,51643,51645,51647],{"class":69,"line":863},[67,51642,35823],{"class":7033},[67,51644,85],{"class":84},[67,51646,33248],{"class":77},[67,51648,33238],{"class":73},[67,51650,51651,51653,51655,51657],{"class":69,"line":876},[67,51652,35834],{"class":7033},[67,51654,85],{"class":84},[67,51656,78],{"class":77},[67,51658,829],{"class":73},[67,51660,51661,51663],{"class":69,"line":889},[67,51662,5910],{"class":84},[67,51664,35847],{"class":73},[67,51666,51667],{"class":69,"line":894},[67,51668,631],{"emptyLinePlaceholder":630},[67,51670,51671],{"class":69,"line":911},[67,51672,35856],{"class":2058},[67,51674,51675,51677,51679],{"class":69,"line":927},[67,51676,801],{"class":84},[67,51678,35863],{"class":110},[67,51680,35866],{"class":73},[67,51682,51683],{"class":69,"line":932},[67,51684,35871],{"class":2058},[67,51686,51687,51689,51691,51693,51695,51697,51699],{"class":69,"line":955},[67,51688,33013],{"class":73},[67,51690,85],{"class":84},[67,51692,33020],{"class":114},[67,51694,3547],{"class":84},[67,51696,33025],{"class":73},[67,51698,3544],{"class":84},[67,51700,35888],{"class":114},[67,51702,51703,51705,51707],{"class":69,"line":971},[67,51704,33065],{"class":73},[67,51706,85],{"class":84},[67,51708,34059],{"class":73},[67,51710,51711],{"class":69,"line":1010},[67,51712,631],{"emptyLinePlaceholder":630},[67,51714,51715],{"class":69,"line":1016},[67,51716,35905],{"class":2058},[67,51718,51719,51721,51723],{"class":69,"line":1021},[67,51720,35910],{"class":73},[67,51722,85],{"class":84},[67,51724,34112],{"class":77},[67,51726,51727,51729,51731],{"class":69,"line":1034},[67,51728,35919],{"class":73},[67,51730,85],{"class":84},[67,51732,4909],{"class":77},[67,51734,51735],{"class":69,"line":1053},[67,51736,631],{"emptyLinePlaceholder":630},[67,51738,51739],{"class":69,"line":1070},[67,51740,35932],{"class":2058},[67,51742,51743],{"class":69,"line":1083},[67,51744,35937],{"class":2058},[67,51746,51747],{"class":69,"line":1088},[67,51748,35942],{"class":2058},[67,51750,51751,51753],{"class":69,"line":1093},[67,51752,35947],{"class":84},[67,51754,34653],{"class":73},[67,51756,51757],{"class":69,"line":1110},[67,51758,35954],{"class":2058},[67,51760,51761,51763,51765,51767],{"class":69,"line":11603},[67,51762,5225],{"class":84},[67,51764,35961],{"class":73},[67,51766,941],{"class":84},[67,51768,35966],{"class":73},[67,51770,51771,51773,51775],{"class":69,"line":11612},[67,51772,35971],{"class":73},[67,51774,85],{"class":84},[67,51776,35976],{"class":73},[67,51778,51779,51781,51783],{"class":69,"line":11617},[67,51780,35981],{"class":73},[67,51782,85],{"class":84},[67,51784,35986],{"class":73},[67,51786,51787],{"class":69,"line":11623},[67,51788,35991],{"class":2058},[67,51790,51791],{"class":69,"line":11644},[67,51792,34644],{"class":73},[67,51794,51795],{"class":69,"line":11650},[67,51796,36000],{"class":2058},[67,51798,51799,51801,51803],{"class":69,"line":11664},[67,51800,34429],{"class":73},[67,51802,85],{"class":84},[67,51804,36009],{"class":73},[67,51806,51807],{"class":69,"line":11670},[67,51808,36014],{"class":2058},[67,51810,51811,51813,51815,51817,51819,51821,51823],{"class":69,"line":11697},[67,51812,34446],{"class":73},[67,51814,85],{"class":84},[67,51816,34451],{"class":73},[67,51818,34454],{"class":7033},[67,51820,85],{"class":84},[67,51822,2209],{"class":77},[67,51824,829],{"class":73},[67,51826,51827],{"class":69,"line":11706},[67,51828,36035],{"class":2058},[67,51830,51831],{"class":69,"line":11712},[67,51832,36040],{"class":2058},[67,51834,51835],{"class":69,"line":11720},[67,51836,36045],{"class":2058},[67,51838,51839,51841,51843,51845,51847],{"class":69,"line":11725},[67,51840,36050],{"class":73},[67,51842,11283],{"class":84},[67,51844,34556],{"class":73},[67,51846,4774],{"class":84},[67,51848,36059],{"class":73},[67,51850,51851],{"class":69,"line":18401},[67,51852,36064],{"class":2058},[67,51854,51855,51857,51859,51861,51863],{"class":69,"line":18407},[67,51856,36069],{"class":73},[67,51858,11283],{"class":84},[67,51860,36074],{"class":73},[67,51862,78],{"class":77},[67,51864,829],{"class":73},[67,51866,51867],{"class":69,"line":18430},[67,51868,631],{"emptyLinePlaceholder":630},[67,51870,51871],{"class":69,"line":18436},[67,51872,36087],{"class":2058},[67,51874,51875,51877,51879,51881,51883],{"class":69,"line":18459},[67,51876,36092],{"class":73},[67,51878,85],{"class":84},[67,51880,36097],{"class":73},[67,51882,2573],{"class":84},[67,51884,36102],{"class":73},[67,51886,51887],{"class":69,"line":18473},[67,51888,36107],{"class":2058},[67,51890,51891,51893,51895,51897],{"class":69,"line":18493},[67,51892,34220],{"class":77},[67,51894,854],{"class":73},[67,51896,36116],{"class":114},[67,51898,36119],{"class":73},[67,51900,51901],{"class":69,"line":18499},[67,51902,631],{"emptyLinePlaceholder":630},[67,51904,51905],{"class":69,"line":18510},[67,51906,36128],{"class":2058},[67,51908,51909,51911,51913,51915,51917],{"class":69,"line":18533},[67,51910,1096],{"class":84},[67,51912,1099],{"class":77},[67,51914,4774],{"class":84},[67,51916,33001],{"class":114},[67,51918,813],{"class":73},[67,51920,51921],{"class":69,"line":18555},[67,51922,36145],{"class":2058},[67,51924,51925,51927,51929],{"class":69,"line":18560},[67,51926,33065],{"class":73},[67,51928,85],{"class":84},[67,51930,46319],{"class":73},[67,51932,51933],{"class":69,"line":18566},[67,51934,36158],{"class":2058},[67,51936,51937],{"class":69,"line":18580},[67,51938,36163],{"class":2058},[67,51940,51941,51943,51945],{"class":69,"line":18593},[67,51942,36168],{"class":73},[67,51944,36171],{"class":114},[67,51946,1050],{"class":73},[67,51948,51949],{"class":69,"line":18598},[67,51950,36178],{"class":2058},[67,51952,51953,51955,51957],{"class":69,"line":18612},[67,51954,35791],{"class":73},[67,51956,85],{"class":84},[67,51958,36187],{"class":73},[67,51960,51961],{"class":69,"line":18617},[67,51962,36192],{"class":2058},[67,51964,51965],{"class":69,"line":18623},[67,51966,36197],{"class":73},[67,51968,51969],{"class":69,"line":18628},[67,51970,631],{"emptyLinePlaceholder":630},[67,51972,51973],{"class":69,"line":18642},[67,51974,36206],{"class":2058},[67,51976,51977],{"class":69,"line":18647},[67,51978,36211],{"class":2058},[67,51980,51981,51983,51985,51987,51989,51991,51993],{"class":69,"line":18652},[67,51982,33013],{"class":73},[67,51984,85],{"class":84},[67,51986,33020],{"class":114},[67,51988,3547],{"class":84},[67,51990,33025],{"class":73},[67,51992,3544],{"class":84},[67,51994,35888],{"class":114},[67,51996,51997,51999,52001],{"class":69,"line":18666},[67,51998,33065],{"class":73},[67,52000,85],{"class":84},[67,52002,34059],{"class":73},[67,52004,52005],{"class":69,"line":18678},[67,52006,36240],{"class":2058},[67,52008,52009],{"class":69,"line":18683},[67,52010,36245],{"class":2058},[67,52012,52013,52015,52017,52019,52022,52024,52027],{"class":69,"line":18696},[67,52014,36250],{"class":73},[67,52016,85],{"class":84},[67,52018,2879],{"class":73},[67,52020,52021],{"class":114},"'猫'",[67,52023,2369],{"class":73},[67,52025,52026],{"class":114},"'狗'",[67,52028,35015],{"class":73},[67,52030,52031,52033],{"class":69,"line":18701},[67,52032,35947],{"class":84},[67,52034,34653],{"class":73},[67,52036,52037],{"class":69,"line":18706},[67,52038,36315],{"class":2058},[67,52040,52041,52043,52045,52047],{"class":69,"line":18711},[67,52042,5225],{"class":84},[67,52044,36322],{"class":73},[67,52046,941],{"class":84},[67,52048,35966],{"class":73},[67,52050,52051,52053,52055],{"class":69,"line":18724},[67,52052,34379],{"class":73},[67,52054,85],{"class":84},[67,52056,34384],{"class":73},[67,52058,52059,52061,52063],{"class":69,"line":18729},[67,52060,34394],{"class":73},[67,52062,85],{"class":84},[67,52064,34399],{"class":73},[67,52066,52067],{"class":69,"line":34402},[67,52068,631],{"emptyLinePlaceholder":630},[67,52070,52071],{"class":69,"line":34408},[67,52072,36351],{"class":2058},[67,52074,52075],{"class":69,"line":34414},[67,52076,34644],{"class":73},[67,52078,52079],{"class":69,"line":34420},[67,52080,36360],{"class":2058},[67,52082,52083,52085,52087],{"class":69,"line":34426},[67,52084,34429],{"class":73},[67,52086,85],{"class":84},[67,52088,34434],{"class":73},[67,52090,52091],{"class":69,"line":34437},[67,52092,36373],{"class":2058},[67,52094,52095,52097,52099,52101,52103,52105,52107],{"class":69,"line":34443},[67,52096,34446],{"class":73},[67,52098,85],{"class":84},[67,52100,34451],{"class":73},[67,52102,34454],{"class":7033},[67,52104,85],{"class":84},[67,52106,2209],{"class":77},[67,52108,829],{"class":73},[67,52110,52111],{"class":69,"line":34463},[67,52112,36394],{"class":2058},[67,52114,52115,52117,52119],{"class":69,"line":34469},[67,52116,36399],{"class":73},[67,52118,85],{"class":84},[67,52120,36404],{"class":73},[67,52122,52123,52125,52127],{"class":69,"line":34480},[67,52124,36409],{"class":73},[67,52126,85],{"class":84},[67,52128,36414],{"class":73},[67,52130,52131,52133,52135,52137,52139,52141,52143,52145],{"class":69,"line":34486},[67,52132,36419],{"class":77},[67,52134,854],{"class":73},[67,52136,36424],{"class":114},[67,52138,36427],{"class":73},[67,52140,36430],{"class":114},[67,52142,2369],{"class":73},[67,52144,36435],{"class":114},[67,52146,36438],{"class":73},[1903,52148,52149],{},"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":63,"searchDepth":191,"depth":191,"links":52151},[52152,52153,52154,52155],{"id":32369,"depth":202,"text":32370},{"id":39607,"depth":202,"text":39608},{"id":43040,"depth":202,"text":43041},{"id":47049,"depth":202,"text":47050},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32361,"description":25173},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52162,"title":52163,"body":52164,"description":25173,"extension":1930,"meta":52171,"navigation":630,"path":52172,"seo":52173,"stem":52174,"__hash__":52175},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52165,"toc":52169},[52166],[10,52167,52163],{"id":52168},"_3yolo模型学习",{"title":63,"searchDepth":191,"depth":191,"links":52170},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52163,"description":25173},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52177,"title":52178,"body":52179,"description":52186,"extension":1930,"meta":52187,"navigation":630,"path":52189,"seo":52190,"stem":52191,"__hash__":52192},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52180,"toc":52184},[52181],[19,52182,52183],{},"yolo模型还未补充",{"title":63,"searchDepth":191,"depth":191,"links":52185},[],"深度学习学习",{"category":52188},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52178,"description":52186},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52194,"title":52195,"body":52196,"description":25173,"extension":1930,"meta":52221,"navigation":630,"path":52222,"seo":52223,"stem":52224,"__hash__":52225},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52197,"toc":52219},[52198,52201,52204,52209,52216],[10,52199,52195],{"id":52200},"_1工具",[19,52202,52203],{},"提示错误插件：有问题会提前报错",[19,52205,52206],{},[3317,52207],{"alt":63,"src":52208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52210,52211],{},[2230,52212,52215],{"href":52213,"rel":52214},"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",[25657],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52217,52218],{},"alt键加上下箭头可以实现语句的移动",{"title":63,"searchDepth":191,"depth":191,"links":52220},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52195,"description":25173},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52227,"title":52228,"body":52229,"description":25173,"extension":1930,"meta":55087,"navigation":630,"path":55088,"seo":55089,"stem":55090,"__hash__":55091},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52230,"toc":55038},[52231,52234,52238,52242,52247,52250,52255,52259,52266,52271,52278,52283,52290,52295,52299,52304,52307,52311,52316,52320,52325,52328,52331,52334,52337,52340,52343,52346,52349,52354,52359,52364,52368,52371,52374,52378,52383,52386,52394,52399,52416,52424,52429,52434,52439,52444,52449,52452,52457,52462,52466,52475,52480,52485,52489,52494,52497,52501,52506,52514,52519,52524,52527,52532,52537,52542,52545,52548,52551,52556,52561,52564,52569,52572,52577,52580,52583,52586,52591,52594,52597,52612,52617,52622,52627,52630,52633,52636,52650,52653,52658,52663,52666,52669,52672,52675,52678,52681,52684,52688,52692,52697,52701,52704,52709,52714,52717,52722,52725,52729,52734,52737,52740,52743,52746,52749,52752,52755,52758,52761,52765,52770,52775,52780,52783,52786,52790,52795,52798,52802,52805,52808,52813,52816,52819,52823,52827,52830,52835,52840,52843,52872,52877,52882,52887,52892,52896,52901,52905,52910,52913,52917,52921,52926,52930,52935,52940,52944,52949,52952,52954,52957,52962,52966,52971,52975,52979,52984,52989,52994,52999,53003,53008,53013,53018,53021,53024,53029,53032,53037,53042,53047,53052,53056,53860,53864,54206,54211,54214,54217,54220,54223,54226,54229,54232,54235,54237,54240,54242,54245,54249,54254,54257,54260,54263,54267,54272,54277,54297,54300,54304,54309,54314,54331,54335,54364,54368,54390,54392,54431,54439,54445,54449,54452,54455,54460,54465,54468,54471,54474,54479,54484,54487,54490,54493,54496,54499,54502,54505,54508,54511,54514,54517,54519,54522,54525,54528,54531,54534,54537,54540,54543,54547,54552,54555,54560,54563,54566,54569,54572,54575,54578,54581,54583,54586,54589,54592,54595,54598,54601,54605,54608,54617,54620,54625,54628,54633,54636,54639,54642,54645,54648,54651,54654,54658,54662,54665,54668,54673,54678,54683,54687,54692,54697,54700,54703,54706,54709,54712,54717,54720,54725,54727,54732,54735,54739,54744,54747,54750,54755,54759,54762,54767,54770,54773,54802,54807,54810,54813,54816,54819,54822,54826,54829,54913,54917,54920,54925,54930,54937,54940,54943,54946,54949,54952,54957,54962,54965,54968,54971,54974,54977,54980,54983,54986,54989,54991,54994,54998,55003,55008,55013,55016,55021,55026,55029,55032,55035],[10,52232,52228],{"id":52233},"_2基础语法",[14,52235,52237],{"id":52236},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[391,52239,52241],{"id":52240},"_211-js组成","2.1.1 js组成",[26,52243,52244],{},[29,52245,52246],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52248,52249],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[26,52251,52252],{"start":191},[29,52253,52254],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[391,52256,52258],{"id":52257},"_212-js书写位置","2.1.2 js书写位置",[26,52260,52261],{},[29,52262,52263],{},[2144,52264,52265],{},"内部 JavaScript",[19,52267,52268],{},[3317,52269],{"alt":63,"src":52270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[26,52272,52273],{"start":191},[29,52274,52275],{},[2144,52276,52277],{},"外部 JavaScript",[19,52279,52280],{},[3317,52281],{"alt":63,"src":52282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[26,52284,52285],{"start":202},[29,52286,52287],{},[2144,52288,52289],{},"内联 JavaScript",[19,52291,52292],{},[3317,52293],{"alt":63,"src":52294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[391,52296,52298],{"id":52297},"_213-javascript注释","2.1.3 JavaScript注释",[19,52300,52301],{},[3317,52302],{"alt":63,"src":52303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52305,52306],{},"alt+shift+a一定要记住！",[391,52308,52310],{"id":52309},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52312,52313],{},[3317,52314],{"alt":63,"src":52315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[391,52317,52319],{"id":52318},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[26,52321,52322],{},[29,52323,52324],{},"输出语法：",[19,52326,52327],{},"①document.write('要出的内容')",[19,52329,52330],{},"向body内输出内容；",[19,52332,52333],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52335,52336],{},"②alert('要出的内容')",[19,52338,52339],{},"页面弹出警告对话框",[19,52341,52342],{},"③console.log('控制台打印')",[19,52344,52345],{},"控制台输出语法，程序员调试使用",[19,52347,52348],{},"输入log就行，自动生成：",[19,52350,52351],{},[3317,52352],{"alt":63,"src":52353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[26,52355,52356],{"start":191},[29,52357,52358],{},"输入语法：",[19,52360,52361],{},[3317,52362],{"alt":63,"src":52363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[391,52365,52367],{"id":52366},"_2116-字面量","21.1.6 字面量",[19,52369,52370],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52372,52373],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52375,52377],{"id":52376},"_22-变量","2.2 变量",[26,52379,52380],{},[29,52381,52382],{},"变量声明",[19,52384,52385],{},"let 变量名",[2994,52387,52388,52391],{},[29,52389,52390],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[29,52392,52393],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[26,52395,52396],{"start":191},[29,52397,52398],{},"变量赋值",[58,52400,52404],{"className":52401,"code":52402,"language":52403,"meta":63,"style":63},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[32,52405,52406,52411],{"__ignoreMap":63},[67,52407,52408],{"class":69,"line":70},[67,52409,52410],{"class":73},"let age\n",[67,52412,52413],{"class":69,"line":191},[67,52414,52415],{"class":73},"age=18\n",[26,52417,52418,52421],{"start":202},[29,52419,52420],{},"连这些（变量的初始化）：let age=18",[29,52422,52423],{},"更新变量",[19,52425,52426],{},[3317,52427],{"alt":63,"src":52428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[26,52430,52431],{"start":655},[29,52432,52433],{},"声明多个变量",[19,52435,52436],{},[3317,52437],{"alt":63,"src":52438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[26,52440,52441],{"start":660},[29,52442,52443],{},"变量命名规则与规范",[19,52445,52446],{},[3317,52447],{"alt":63,"src":52448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52450,52451],{},"遵守小驼峰！",[26,52453,52454],{"start":665},[29,52455,52456],{},"变量拓展-let和var的区别",[19,52458,52459],{},[3317,52460],{"alt":63,"src":52461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52463,52465],{"id":52464},"_23-数组","2.3 数组",[58,52467,52469],{"className":52401,"code":52468,"language":52403,"meta":63,"style":63},"let arr = []\n",[32,52470,52471],{"__ignoreMap":63},[67,52472,52473],{"class":69,"line":70},[67,52474,52468],{"class":73},[19,52476,52477],{},[3317,52478],{"alt":63,"src":52479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52481,52482],{},[3317,52483],{"alt":63,"src":52484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52486,52488],{"id":52487},"_24-常量","2.4 常量",[19,52490,52491],{},[3317,52492],{"alt":63,"src":52493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52495,52496],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52498,52500],{"id":52499},"_25-数据类型","2.5 数据类型",[19,52502,52503],{},[3317,52504],{"alt":63,"src":52505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[26,52507,52508,52511],{},[29,52509,52510],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[29,52512,52513],{},"算数运算符：",[19,52515,52516],{},[3317,52517],{"alt":63,"src":52518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[26,52520,52521],{"start":202},[29,52522,52523],{},"数字类型（Number）",[19,52525,52526],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52528,52529],{},[3317,52530],{"alt":63,"src":52531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[26,52533,52534],{"start":641},[29,52535,52536],{},"字符串类型（string）",[19,52538,52539],{},[3317,52540],{"alt":63,"src":52541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52543,52544],{},"反引号也是可以使用的",[19,52546,52547],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52549,52550],{},"例如：document.write(\"我今年\"+age+\"岁\")",[26,52552,52553],{"start":655},[29,52554,52555],{},"模板字符串",[19,52557,52558],{},[3317,52559],{"alt":63,"src":52560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52562,52563],{},"类似于python的字符串格式化",[26,52565,52566],{"start":660},[29,52567,52568],{},"布尔类型",[19,52570,52571],{},"true 和 false",[26,52573,52574],{"start":665},[29,52575,52576],{},"未定义类型（underfined）",[19,52578,52579],{},"表示没有赋值",[19,52581,52582],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52584,52585],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[26,52587,52588],{"start":677},[29,52589,52590],{},"null（空类型）",[19,52592,52593],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52595,52596],{},"赋值了，但是内容为空",[58,52598,52600],{"className":52401,"code":52599,"language":52403,"meta":63,"style":63},"typeof null\n输出的是'object'，是一个对象数据类型\n",[32,52601,52602,52607],{"__ignoreMap":63},[67,52603,52604],{"class":69,"line":70},[67,52605,52606],{"class":73},"typeof null\n",[67,52608,52609],{"class":69,"line":191},[67,52610,52611],{"class":73},"输出的是'object'，是一个对象数据类型\n",[26,52613,52614],{"start":683},[29,52615,52616],{},"控制台检测数据类型",[19,52618,52619],{},[3317,52620],{"alt":63,"src":52621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[26,52623,52624],{"start":689},[29,52625,52626],{},"类型转换",[19,52628,52629],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52631,52632],{},"转换方式：隐式转换和显示转换",[19,52634,52635],{},"①隐式转换",[2994,52637,52638,52641,52644,52647],{},[29,52639,52640],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[29,52642,52643],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[29,52645,52646],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[29,52648,52649],{},"任何数据和字符串相加结果都是字符串",[19,52651,52652],{},"②显示转换",[19,52654,52655],{},[3317,52656],{"alt":63,"src":52657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52659,52660],{},[3317,52661],{"alt":63,"src":52662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52664,52665],{},"在输入的时候要用好隐式转换，简单写起来",[19,52667,52668],{},"let num = +prompt(’请输入数字：‘)",[19,52670,52671],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52673,52674],{},"console.log(parseInt('12.333px'))",[19,52676,52677],{},"输出为：12",[19,52679,52680],{},"console.log(parseInt('a'a'a12.333px'))",[19,52682,52683],{},"输出：NaN",[14,52685,52687],{"id":52686},"_26-运算符","2.6 运算符",[391,52689,52691],{"id":52690},"_261-赋值运算符","2.6.1 赋值运算符",[19,52693,52694],{},[3317,52695],{"alt":63,"src":52696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[391,52698,52700],{"id":52699},"_262-一元运算符","2.6.2 一元运算符",[19,52702,52703],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52705,52706],{},[3317,52707],{"alt":63,"src":52708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52710,52711],{},[3317,52712],{"alt":63,"src":52713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52715,52716],{},"两者的区别：",[19,52718,52719],{},[3317,52720],{"alt":63,"src":52721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52723,52724],{},"前置先自加；后置后加，代码执行完之后再加",[391,52726,52728],{"id":52727},"_263-比较运算符","2.6.3 比较运算符",[19,52730,52731],{},[3317,52732],{"alt":63,"src":52733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52735,52736],{},"比较运算符也有隐式转换",[19,52738,52739],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52741,52742],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52744,52745],{},"要使用三等，开发的时候",[19,52747,52748],{},"NaN不等于任何人，包括它自己",[19,52750,52751],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52753,52754],{},"7\u002F10=0.7",[19,52756,52757],{},"最后：0.5+0.2=0.7",[19,52759,52760],{},"字符串比较，比较的是字符对应的ASCII码",[391,52762,52764],{"id":52763},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52766,52767],{},[3317,52768],{"alt":63,"src":52769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52771,52772],{},[3317,52773],{"alt":63,"src":52774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52776,52777],{},[3317,52778],{"alt":63,"src":52779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52781,52782],{},"上述题目选D",[19,52784,52785],{},"与真2假1；或真1假2",[391,52787,52789],{"id":52788},"_265-运算符优先级","2.6.5 运算符优先级",[19,52791,52792],{},[3317,52793],{"alt":63,"src":52794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52796,52797],{},"先算逻辑与，后算逻辑或",[14,52799,52801],{"id":52800},"_27-语句","2.7 语句",[19,52803,52804],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52806,52807],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52809,52810],{},[3317,52811],{"alt":63,"src":52812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52814,52815],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52817,52818],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[391,52820,52822],{"id":52821},"_271-分支语句","2.7.1 分支语句",[23794,52824,52826],{"id":52825},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52828,52829],{},"if语句单行简单的话，可以不写{}，写在一行就行",[26,52831,52832],{},[29,52833,52834],{},"单分支语句",[19,52836,52837],{},[3317,52838],{"alt":63,"src":52839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52841,52842],{},"除了0，所有数字都为真",[58,52844,52846],{"className":52401,"code":52845,"language":52403,"meta":63,"style":63},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[32,52847,52848,52853,52858,52863,52867],{"__ignoreMap":63},[67,52849,52850],{"class":69,"line":70},[67,52851,52852],{"class":73},"if（0) {\n",[67,52854,52855],{"class":69,"line":191},[67,52856,52857],{"class":73},"    let a=1\n",[67,52859,52860],{"class":69,"line":202},[67,52861,52862],{"class":73},"    alert(typeof a)\n",[67,52864,52865],{"class":69,"line":641},[67,52866,3419],{"class":73},[67,52868,52869],{"class":69,"line":655},[67,52870,52871],{"class":73},"不输出，括号为假\n",[26,52873,52874],{"start":191},[29,52875,52876],{},"双分支语句",[19,52878,52879],{},[3317,52880],{"alt":63,"src":52881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[26,52883,52884],{"start":202},[29,52885,52886],{},"多分支语句",[19,52888,52889],{},[3317,52890],{"alt":63,"src":52891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23794,52893,52895],{"id":52894},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52897,52898],{},[3317,52899],{"alt":63,"src":52900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23794,52902,52904],{"id":52903},"_2713-switch语句","2.7.1.3 switch语句",[19,52906,52907],{},[3317,52908],{"alt":63,"src":52909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52911,52912],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[391,52914,52916],{"id":52915},"_272-循环语句","2.7.2 循环语句",[23794,52918,52920],{"id":52919},"_2721-断点演示","2.7.2.1 断点演示",[19,52922,52923],{},[3317,52924],{"alt":63,"src":52925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23794,52927,52929],{"id":52928},"_2722-while循环","2.7.2.2 while循环",[19,52931,52932],{},[3317,52933],{"alt":63,"src":52934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52936,52937],{},[3317,52938],{"alt":63,"src":52939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23794,52941,52943],{"id":52942},"_2723-for循环","2.7.2.3 for循环",[19,52945,52946],{},[3317,52947],{"alt":63,"src":52948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52950,52951],{},"for(;;) {",[19,52953,2934],{},[19,52955,52956],{},"表示无限循环",[19,52958,52959],{},[3317,52960],{"alt":63,"src":52961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23794,52963,52965],{"id":52964},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52967,52968],{},[3317,52969],{"alt":63,"src":52970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52972,52974],{"id":52973},"_28-数组","2.8 数组",[391,52976,52978],{"id":52977},"_281-基础认识","2.8.1 基础认识",[19,52980,52981],{},[3317,52982],{"alt":63,"src":52983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52985,52986],{},[3317,52987],{"alt":63,"src":52988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52990,52991],{},[3317,52992],{"alt":63,"src":52993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52995,52996],{},[3317,52997],{"alt":63,"src":52998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[391,53000,53002],{"id":53001},"_282-操作数组","2.8.2 操作数组",[19,53004,53005],{},[3317,53006],{"alt":63,"src":53007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[26,53009,53010],{},[29,53011,53012],{},"添加元素",[19,53014,53015],{},[3317,53016],{"alt":63,"src":53017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53019,53020],{},"console.log(arr.push('green'))",[19,53022,53023],{},"输出结果：为新数组的长度",[19,53025,53026],{},[3317,53027],{"alt":63,"src":53028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53030,53031],{},"push用的非常多，一定要记住",[26,53033,53034],{},[29,53035,53036],{},"删除元素",[19,53038,53039],{},[3317,53040],{"alt":63,"src":53041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53043,53044],{},[3317,53045],{"alt":63,"src":53046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53048,53049],{},[3317,53050],{"alt":63,"src":53051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[391,53053,53055],{"id":53054},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[58,53057,53059],{"className":52401,"code":53058,"language":52403,"meta":63,"style":63},"\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",[32,53060,53061,53074,53090,53094,53103,53121,53145,53167,53181,53189,53196,53208,53219,53223,53227,53234,53246,53261,53274,53293,53310,53325,53337,53349,53361,53365,53369,53380,53390,53402,53414,53426,53437,53441,53445,53457,53461,53475,53479,53483,53494,53508,53520,53534,53538,53547,53555,53559,53568,53572,53581,53586,53591,53604,53632,53637,53642,53667,53672,53676,53681,53686,53701,53705,53710,53740,53752,53768,53784,53798,53803,53810,53814,53819,53832,53840,53848,53852],{"__ignoreMap":63},[67,53062,53063,53066,53069,53072],{"class":69,"line":70},[67,53064,53065],{"class":73},"\u003C!",[67,53067,53068],{"class":262},"DOCTYPE",[67,53070,53071],{"class":110}," html",[67,53073,323],{"class":73},[67,53075,53076,53078,53080,53083,53085,53088],{"class":69,"line":191},[67,53077,259],{"class":73},[67,53079,52403],{"class":262},[67,53081,53082],{"class":110}," lang",[67,53084,85],{"class":73},[67,53086,53087],{"class":114},"\"en\"",[67,53089,323],{"class":73},[67,53091,53092],{"class":69,"line":202},[67,53093,631],{"emptyLinePlaceholder":630},[67,53095,53096,53098,53101],{"class":69,"line":641},[67,53097,259],{"class":73},[67,53099,53100],{"class":262},"head",[67,53102,323],{"class":73},[67,53104,53105,53108,53111,53114,53116,53119],{"class":69,"line":655},[67,53106,53107],{"class":73},"    \u003C",[67,53109,53110],{"class":262},"meta",[67,53112,53113],{"class":110}," charset",[67,53115,85],{"class":73},[67,53117,53118],{"class":114},"\"UTF-8\"",[67,53120,323],{"class":73},[67,53122,53123,53125,53127,53130,53132,53135,53138,53140,53143],{"class":69,"line":660},[67,53124,53107],{"class":73},[67,53126,53110],{"class":262},[67,53128,53129],{"class":110}," http-equiv",[67,53131,85],{"class":73},[67,53133,53134],{"class":114},"\"X-UA-Compatible\"",[67,53136,53137],{"class":110}," content",[67,53139,85],{"class":73},[67,53141,53142],{"class":114},"\"IE=edge\"",[67,53144,323],{"class":73},[67,53146,53147,53149,53151,53153,53155,53158,53160,53162,53165],{"class":69,"line":665},[67,53148,53107],{"class":73},[67,53150,53110],{"class":262},[67,53152,266],{"class":110},[67,53154,85],{"class":73},[67,53156,53157],{"class":114},"\"viewport\"",[67,53159,53137],{"class":110},[67,53161,85],{"class":73},[67,53163,53164],{"class":114},"\"width=device-width, initial-scale=1.0\"",[67,53166,323],{"class":73},[67,53168,53169,53171,53174,53177,53179],{"class":69,"line":677},[67,53170,53107],{"class":73},[67,53172,53173],{"class":262},"title",[67,53175,53176],{"class":73},">Document\u003C\u002F",[67,53178,53173],{"class":262},[67,53180,323],{"class":73},[67,53182,53183,53185,53187],{"class":69,"line":683},[67,53184,53107],{"class":73},[67,53186,1903],{"class":262},[67,53188,323],{"class":73},[67,53190,53191,53194],{"class":69,"line":689},[67,53192,53193],{"class":262},"        *",[67,53195,17369],{"class":73},[67,53197,53198,53201,53204,53206],{"class":69,"line":694},[67,53199,53200],{"class":77},"            margin",[67,53202,53203],{"class":73},": ",[67,53205,78],{"class":77},[67,53207,3148],{"class":73},[67,53209,53210,53213,53215,53217],{"class":69,"line":700},[67,53211,53212],{"class":77},"            padding",[67,53214,53203],{"class":73},[67,53216,78],{"class":77},[67,53218,3148],{"class":73},[67,53220,53221],{"class":69,"line":706},[67,53222,4361],{"class":73},[67,53224,53225],{"class":69,"line":712},[67,53226,631],{"emptyLinePlaceholder":630},[67,53228,53229,53232],{"class":69,"line":717},[67,53230,53231],{"class":110},"        .box",[67,53233,17369],{"class":73},[67,53235,53236,53239,53241,53244],{"class":69,"line":723},[67,53237,53238],{"class":77},"            display",[67,53240,53203],{"class":73},[67,53242,53243],{"class":77},"flex",[67,53245,3148],{"class":73},[67,53247,53248,53251,53253,53256,53259],{"class":69,"line":729},[67,53249,53250],{"class":77},"            width",[67,53252,53203],{"class":73},[67,53254,53255],{"class":77},"700",[67,53257,53258],{"class":84},"px",[67,53260,3148],{"class":73},[67,53262,53263,53266,53268,53270,53272],{"class":69,"line":735},[67,53264,53265],{"class":77},"            height",[67,53267,53203],{"class":73},[67,53269,5793],{"class":77},[67,53271,53258],{"class":84},[67,53273,3148],{"class":73},[67,53275,53276,53279,53281,53283,53285,53288,53291],{"class":69,"line":741},[67,53277,53278],{"class":77},"            border-left",[67,53280,53203],{"class":73},[67,53282,2209],{"class":77},[67,53284,53258],{"class":84},[67,53286,53287],{"class":77}," solid",[67,53289,53290],{"class":77}," pink",[67,53292,3148],{"class":73},[67,53294,53295,53298,53300,53302,53304,53306,53308],{"class":69,"line":747},[67,53296,53297],{"class":77},"            border-bottom",[67,53299,53203],{"class":73},[67,53301,2209],{"class":77},[67,53303,53258],{"class":84},[67,53305,53287],{"class":77},[67,53307,53290],{"class":77},[67,53309,3148],{"class":73},[67,53311,53312,53314,53316,53318,53320,53323],{"class":69,"line":753},[67,53313,53200],{"class":77},[67,53315,53203],{"class":73},[67,53317,2645],{"class":77},[67,53319,53258],{"class":84},[67,53321,53322],{"class":77}," auto",[67,53324,3148],{"class":73},[67,53326,53327,53330,53332,53335],{"class":69,"line":758},[67,53328,53329],{"class":77},"            justify-content",[67,53331,53203],{"class":73},[67,53333,53334],{"class":77},"space-around",[67,53336,3148],{"class":73},[67,53338,53339,53342,53344,53347],{"class":69,"line":764},[67,53340,53341],{"class":77},"            align-items",[67,53343,53203],{"class":73},[67,53345,53346],{"class":77},"flex-end",[67,53348,3148],{"class":73},[67,53350,53351,53354,53356,53359],{"class":69,"line":770},[67,53352,53353],{"class":77},"            text-align",[67,53355,53203],{"class":73},[67,53357,53358],{"class":77},"center",[67,53360,3148],{"class":73},[67,53362,53363],{"class":69,"line":776},[67,53364,4361],{"class":73},[67,53366,53367],{"class":69,"line":782},[67,53368,631],{"emptyLinePlaceholder":630},[67,53370,53371,53373,53375,53378],{"class":69,"line":788},[67,53372,53231],{"class":110},[67,53374,2948],{"class":84},[67,53376,53377],{"class":262},"div",[67,53379,17369],{"class":73},[67,53381,53382,53384,53386,53388],{"class":69,"line":793},[67,53383,53238],{"class":77},[67,53385,53203],{"class":73},[67,53387,53243],{"class":77},[67,53389,3148],{"class":73},[67,53391,53392,53394,53396,53398,53400],{"class":69,"line":798},[67,53393,53250],{"class":77},[67,53395,53203],{"class":73},[67,53397,2645],{"class":77},[67,53399,53258],{"class":84},[67,53401,3148],{"class":73},[67,53403,53404,53407,53409,53412],{"class":69,"line":816},[67,53405,53406],{"class":77},"            background-color",[67,53408,53203],{"class":73},[67,53410,53411],{"class":77},"pink",[67,53413,3148],{"class":73},[67,53415,53416,53419,53421,53424],{"class":69,"line":832},[67,53417,53418],{"class":77},"            flex-direction",[67,53420,53203],{"class":73},[67,53422,53423],{"class":77},"column",[67,53425,3148],{"class":73},[67,53427,53428,53430,53432,53435],{"class":69,"line":843},[67,53429,53329],{"class":77},[67,53431,53203],{"class":73},[67,53433,53434],{"class":77},"space-between",[67,53436,3148],{"class":73},[67,53438,53439],{"class":69,"line":848},[67,53440,4361],{"class":73},[67,53442,53443],{"class":69,"line":863},[67,53444,631],{"emptyLinePlaceholder":630},[67,53446,53447,53449,53452,53455],{"class":69,"line":876},[67,53448,53231],{"class":110},[67,53450,53451],{"class":262}," div",[67,53453,53454],{"class":262}," span",[67,53456,17369],{"class":73},[67,53458,53459],{"class":69,"line":889},[67,53460,631],{"emptyLinePlaceholder":630},[67,53462,53463,53466,53468,53471,53473],{"class":69,"line":894},[67,53464,53465],{"class":77},"            margin-top",[67,53467,53203],{"class":73},[67,53469,53470],{"class":77},"-20",[67,53472,53258],{"class":84},[67,53474,3148],{"class":73},[67,53476,53477],{"class":69,"line":911},[67,53478,4361],{"class":73},[67,53480,53481],{"class":69,"line":927},[67,53482,631],{"emptyLinePlaceholder":630},[67,53484,53485,53487,53489,53492],{"class":69,"line":932},[67,53486,53231],{"class":110},[67,53488,53451],{"class":262},[67,53490,53491],{"class":262}," h4",[67,53493,17369],{"class":73},[67,53495,53496,53499,53501,53504,53506],{"class":69,"line":955},[67,53497,53498],{"class":77},"            margin-bottom",[67,53500,53203],{"class":73},[67,53502,53503],{"class":77},"-35",[67,53505,53258],{"class":84},[67,53507,3148],{"class":73},[67,53509,53510,53512,53514,53516,53518],{"class":69,"line":971},[67,53511,53250],{"class":77},[67,53513,53203],{"class":73},[67,53515,2347],{"class":77},[67,53517,53258],{"class":84},[67,53519,3148],{"class":73},[67,53521,53522,53525,53527,53530,53532],{"class":69,"line":1010},[67,53523,53524],{"class":77},"            margin-left",[67,53526,53203],{"class":73},[67,53528,53529],{"class":77},"-10",[67,53531,53258],{"class":84},[67,53533,3148],{"class":73},[67,53535,53536],{"class":69,"line":1016},[67,53537,4361],{"class":73},[67,53539,53540,53543,53545],{"class":69,"line":1021},[67,53541,53542],{"class":73},"    \u003C\u002F",[67,53544,1903],{"class":262},[67,53546,323],{"class":73},[67,53548,53549,53551,53553],{"class":69,"line":1034},[67,53550,376],{"class":73},[67,53552,53100],{"class":262},[67,53554,323],{"class":73},[67,53556,53557],{"class":69,"line":1053},[67,53558,631],{"emptyLinePlaceholder":630},[67,53560,53561,53563,53566],{"class":69,"line":1070},[67,53562,259],{"class":73},[67,53564,53565],{"class":262},"body",[67,53567,323],{"class":73},[67,53569,53570],{"class":69,"line":1083},[67,53571,631],{"emptyLinePlaceholder":630},[67,53573,53574,53576,53579],{"class":69,"line":1088},[67,53575,53107],{"class":73},[67,53577,53578],{"class":262},"script",[67,53580,323],{"class":73},[67,53582,53583],{"class":69,"line":1093},[67,53584,53585],{"class":2058},"        \u002F\u002F 1. 四次弹框效果\n",[67,53587,53588],{"class":69,"line":1110},[67,53589,53590],{"class":2058},"        \u002F\u002F 声明一个新的数组\n",[67,53592,53593,53596,53599,53601],{"class":69,"line":11603},[67,53594,53595],{"class":84},"        let",[67,53597,53598],{"class":73}," arr ",[67,53600,85],{"class":84},[67,53602,53603],{"class":73}," []\n",[67,53605,53606,53608,53610,53613,53615,53617,53619,53621,53623,53626,53628,53630],{"class":69,"line":11612},[67,53607,5225],{"class":84},[67,53609,3505],{"class":73},[67,53611,53612],{"class":84},"let",[67,53614,11244],{"class":73},[67,53616,85],{"class":84},[67,53618,906],{"class":77},[67,53620,11251],{"class":73},[67,53622,3442],{"class":84},[67,53624,53625],{"class":77}," 4",[67,53627,5036],{"class":73},[67,53629,4125],{"class":84},[67,53631,14241],{"class":73},[67,53633,53634],{"class":69,"line":11617},[67,53635,53636],{"class":2058},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[67,53638,53639],{"class":69,"line":11623},[67,53640,53641],{"class":2058},"            \u002F\u002F arr.push(num)\n",[67,53643,53644,53647,53650,53652,53655,53657,53660,53662,53665],{"class":69,"line":11644},[67,53645,53646],{"class":73},"            arr.",[67,53648,53649],{"class":110},"push",[67,53651,854],{"class":73},[67,53653,53654],{"class":110},"prompt",[67,53656,854],{"class":73},[67,53658,53659],{"class":114},"`请输入第${",[67,53661,2432],{"class":73},[67,53663,53664],{"class":114},"}季度的数据:`",[67,53666,1050],{"class":73},[67,53668,53669],{"class":69,"line":11650},[67,53670,53671],{"class":2058},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[67,53673,53674],{"class":69,"line":11664},[67,53675,4361],{"class":73},[67,53677,53678],{"class":69,"line":11670},[67,53679,53680],{"class":2058},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[67,53682,53683],{"class":69,"line":11697},[67,53684,53685],{"class":2058},"        \u002F\u002F 盒子开头\n",[67,53687,53688,53691,53694,53696,53699],{"class":69,"line":11706},[67,53689,53690],{"class":73},"        document.",[67,53692,53693],{"class":110},"write",[67,53695,854],{"class":73},[67,53697,53698],{"class":114},"` \u003Cdiv class=\"box\">`",[67,53700,829],{"class":73},[67,53702,53703],{"class":69,"line":11712},[67,53704,631],{"emptyLinePlaceholder":630},[67,53706,53707],{"class":69,"line":11720},[67,53708,53709],{"class":2058},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[67,53711,53712,53714,53716,53718,53720,53722,53724,53726,53728,53731,53734,53736,53738],{"class":69,"line":11725},[67,53713,5225],{"class":84},[67,53715,3505],{"class":73},[67,53717,53612],{"class":84},[67,53719,11244],{"class":73},[67,53721,85],{"class":84},[67,53723,5913],{"class":77},[67,53725,11251],{"class":73},[67,53727,259],{"class":84},[67,53729,53730],{"class":73}," arr.",[67,53732,53733],{"class":77},"length",[67,53735,5036],{"class":73},[67,53737,4125],{"class":84},[67,53739,14241],{"class":73},[67,53741,53742,53745,53747,53749],{"class":69,"line":18401},[67,53743,53744],{"class":73},"            document.",[67,53746,53693],{"class":110},[67,53748,854],{"class":73},[67,53750,53751],{"class":114},"`\n",[67,53753,53754,53757,53759,53761,53763,53765],{"class":69,"line":18407},[67,53755,53756],{"class":114},"              \u003Cdiv style=\"height: ${",[67,53758,5700],{"class":73},[67,53760,2879],{"class":114},[67,53762,2432],{"class":73},[67,53764,2928],{"class":114},[67,53766,53767],{"class":114},"}px;\">\n",[67,53769,53770,53773,53775,53777,53779,53781],{"class":69,"line":18430},[67,53771,53772],{"class":114},"                \u003Cspan>${",[67,53774,5700],{"class":73},[67,53776,2879],{"class":114},[67,53778,2432],{"class":73},[67,53780,2928],{"class":114},[67,53782,53783],{"class":114},"}\u003C\u002Fspan>\n",[67,53785,53786,53789,53791,53793,53795],{"class":69,"line":18436},[67,53787,53788],{"class":114},"                \u003Ch4>第${",[67,53790,2432],{"class":73},[67,53792,47334],{"class":84},[67,53794,906],{"class":77},[67,53796,53797],{"class":114},"}季度\u003C\u002Fh4>\n",[67,53799,53800],{"class":69,"line":18459},[67,53801,53802],{"class":114},"              \u003C\u002Fdiv>          \n",[67,53804,53805,53808],{"class":69,"line":18473},[67,53806,53807],{"class":114},"            `",[67,53809,829],{"class":73},[67,53811,53812],{"class":69,"line":18493},[67,53813,4361],{"class":73},[67,53815,53816],{"class":69,"line":18499},[67,53817,53818],{"class":2058},"        \u002F\u002F 盒子结尾\n",[67,53820,53821,53823,53825,53827,53830],{"class":69,"line":18510},[67,53822,53690],{"class":73},[67,53824,53693],{"class":110},[67,53826,854],{"class":73},[67,53828,53829],{"class":114},"` \u003C\u002Fdiv>`",[67,53831,829],{"class":73},[67,53833,53834,53836,53838],{"class":69,"line":18533},[67,53835,53542],{"class":73},[67,53837,53578],{"class":262},[67,53839,323],{"class":73},[67,53841,53842,53844,53846],{"class":69,"line":18555},[67,53843,376],{"class":73},[67,53845,53565],{"class":262},[67,53847,323],{"class":73},[67,53849,53850],{"class":69,"line":18560},[67,53851,631],{"emptyLinePlaceholder":630},[67,53853,53854,53856,53858],{"class":69,"line":18566},[67,53855,376],{"class":73},[67,53857,52403],{"class":262},[67,53859,323],{"class":73},[391,53861,53863],{"id":53862},"_284-冒泡排序","2.8.4 冒泡排序",[58,53865,53867],{"className":52401,"code":53866,"language":52403,"meta":63,"style":63},"\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",[32,53868,53869,53879,53893,53897,53905,53919,53939,53951,53959,53963,53971,53979,54011,54044,54081,54086,54105,54110,54123,54138,54154,54158,54163,54167,54177,54186,54194,54198],{"__ignoreMap":63},[67,53870,53871,53873,53875,53877],{"class":69,"line":70},[67,53872,53065],{"class":73},[67,53874,53068],{"class":262},[67,53876,53071],{"class":110},[67,53878,323],{"class":73},[67,53880,53881,53883,53885,53887,53889,53891],{"class":69,"line":191},[67,53882,259],{"class":73},[67,53884,52403],{"class":262},[67,53886,53082],{"class":110},[67,53888,85],{"class":73},[67,53890,53087],{"class":114},[67,53892,323],{"class":73},[67,53894,53895],{"class":69,"line":202},[67,53896,631],{"emptyLinePlaceholder":630},[67,53898,53899,53901,53903],{"class":69,"line":641},[67,53900,259],{"class":73},[67,53902,53100],{"class":262},[67,53904,323],{"class":73},[67,53906,53907,53909,53911,53913,53915,53917],{"class":69,"line":655},[67,53908,328],{"class":73},[67,53910,53110],{"class":262},[67,53912,53113],{"class":110},[67,53914,85],{"class":73},[67,53916,53118],{"class":114},[67,53918,323],{"class":73},[67,53920,53921,53923,53925,53927,53929,53931,53933,53935,53937],{"class":69,"line":660},[67,53922,328],{"class":73},[67,53924,53110],{"class":262},[67,53926,266],{"class":110},[67,53928,85],{"class":73},[67,53930,53157],{"class":114},[67,53932,53137],{"class":110},[67,53934,85],{"class":73},[67,53936,53164],{"class":114},[67,53938,323],{"class":73},[67,53940,53941,53943,53945,53947,53949],{"class":69,"line":665},[67,53942,328],{"class":73},[67,53944,53173],{"class":262},[67,53946,53176],{"class":73},[67,53948,53173],{"class":262},[67,53950,323],{"class":73},[67,53952,53953,53955,53957],{"class":69,"line":677},[67,53954,376],{"class":73},[67,53956,53100],{"class":262},[67,53958,323],{"class":73},[67,53960,53961],{"class":69,"line":683},[67,53962,631],{"emptyLinePlaceholder":630},[67,53964,53965,53967,53969],{"class":69,"line":689},[67,53966,259],{"class":73},[67,53968,53565],{"class":262},[67,53970,323],{"class":73},[67,53972,53973,53975,53977],{"class":69,"line":694},[67,53974,328],{"class":73},[67,53976,53578],{"class":262},[67,53978,323],{"class":73},[67,53980,53981,53984,53986,53988,53991,53993,53995,53997,53999,54001,54003,54005,54007,54009],{"class":69,"line":700},[67,53982,53983],{"class":84},"    let",[67,53985,53598],{"class":73},[67,53987,85],{"class":84},[67,53989,53990],{"class":73}," [",[67,53992,2310],{"class":77},[67,53994,1868],{"class":73},[67,53996,1047],{"class":77},[67,53998,1868],{"class":73},[67,54000,2071],{"class":77},[67,54002,1868],{"class":73},[67,54004,2077],{"class":77},[67,54006,1868],{"class":73},[67,54008,2209],{"class":77},[67,54010,35015],{"class":73},[67,54012,54013,54015,54017,54019,54021,54023,54025,54027,54029,54031,54033,54036,54038,54040,54042],{"class":69,"line":706},[67,54014,935],{"class":84},[67,54016,3505],{"class":73},[67,54018,53612],{"class":84},[67,54020,11244],{"class":73},[67,54022,85],{"class":84},[67,54024,5913],{"class":77},[67,54026,11251],{"class":73},[67,54028,259],{"class":84},[67,54030,53730],{"class":73},[67,54032,53733],{"class":77},[67,54034,54035],{"class":84}," -",[67,54037,906],{"class":77},[67,54039,5036],{"class":73},[67,54041,4125],{"class":84},[67,54043,14241],{"class":73},[67,54045,54046,54049,54051,54053,54055,54057,54059,54061,54063,54065,54067,54069,54071,54073,54075,54077,54079],{"class":69,"line":712},[67,54047,54048],{"class":84},"      for",[67,54050,3505],{"class":73},[67,54052,53612],{"class":84},[67,54054,11306],{"class":73},[67,54056,85],{"class":84},[67,54058,5913],{"class":77},[67,54060,11313],{"class":73},[67,54062,259],{"class":84},[67,54064,53730],{"class":73},[67,54066,53733],{"class":77},[67,54068,54035],{"class":84},[67,54070,11244],{"class":73},[67,54072,1863],{"class":84},[67,54074,906],{"class":77},[67,54076,11320],{"class":73},[67,54078,4125],{"class":84},[67,54080,14241],{"class":73},[67,54082,54083],{"class":69,"line":717},[67,54084,54085],{"class":2058},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[67,54087,54088,54090,54093,54095,54098,54100,54102],{"class":69,"line":723},[67,54089,4329],{"class":84},[67,54091,54092],{"class":73}," (arr[j] ",[67,54094,2948],{"class":84},[67,54096,54097],{"class":73}," arr[j ",[67,54099,2471],{"class":84},[67,54101,906],{"class":77},[67,54103,54104],{"class":73},"]) {\n",[67,54106,54107],{"class":69,"line":729},[67,54108,54109],{"class":2058},"          \u002F\u002F 交换两个变量\n",[67,54111,54112,54115,54118,54120],{"class":69,"line":735},[67,54113,54114],{"class":84},"          let",[67,54116,54117],{"class":73}," tmp ",[67,54119,85],{"class":84},[67,54121,54122],{"class":73}," arr[j]\n",[67,54124,54125,54128,54130,54132,54134,54136],{"class":69,"line":741},[67,54126,54127],{"class":73},"          arr[j] ",[67,54129,85],{"class":84},[67,54131,54097],{"class":73},[67,54133,2471],{"class":84},[67,54135,906],{"class":77},[67,54137,35015],{"class":73},[67,54139,54140,54143,54145,54147,54149,54151],{"class":69,"line":747},[67,54141,54142],{"class":73},"          arr[j ",[67,54144,2471],{"class":84},[67,54146,906],{"class":77},[67,54148,81],{"class":73},[67,54150,85],{"class":84},[67,54152,54153],{"class":73}," tmp\n",[67,54155,54156],{"class":69,"line":753},[67,54157,4361],{"class":73},[67,54159,54160],{"class":69,"line":758},[67,54161,54162],{"class":73},"      }\n",[67,54164,54165],{"class":69,"line":764},[67,54166,4020],{"class":73},[67,54168,54169,54172,54174],{"class":69,"line":770},[67,54170,54171],{"class":73},"    document.",[67,54173,53693],{"class":110},[67,54175,54176],{"class":73},"(arr)\n",[67,54178,54179,54182,54184],{"class":69,"line":776},[67,54180,54181],{"class":73},"  \u003C\u002F",[67,54183,53578],{"class":262},[67,54185,323],{"class":73},[67,54187,54188,54190,54192],{"class":69,"line":782},[67,54189,376],{"class":73},[67,54191,53565],{"class":262},[67,54193,323],{"class":73},[67,54195,54196],{"class":69,"line":788},[67,54197,631],{"emptyLinePlaceholder":630},[67,54199,54200,54202,54204],{"class":69,"line":793},[67,54201,376],{"class":73},[67,54203,52403],{"class":262},[67,54205,323],{"class":73},[19,54207,54208],{},[3317,54209],{"alt":63,"src":54210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54212,54213],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54215,54216],{},"let arr = [4, 2, 5, 1, 3]",[19,54218,54219],{},"\u002F\u002F 1.升序排列写法",[19,54221,54222],{},"arr.sort(function (a, b) {",[19,54224,54225],{},"return a - b",[19,54227,54228],{},"})",[19,54230,54231],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54233,54234],{},"\u002F\u002F 降序排列写法",[19,54236,54222],{},[19,54238,54239],{},"return b - a",[19,54241,54228],{},[19,54243,54244],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54246,54248],{"id":54247},"_29-函数","2.9 函数",[19,54250,54251],{},[3317,54252],{"alt":63,"src":54253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54255,54256],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54258,54259],{},"函数的声明用function",[19,54261,54262],{},"函数里边可以嵌套函数",[391,54264,54266],{"id":54265},"_291-函数传参","2.9.1 函数传参",[19,54268,54269],{},[3317,54270],{"alt":63,"src":54271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54273,54274],{},[3317,54275],{"alt":63,"src":54276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[2994,54278,54279,54282,54285,54288,54291,54294],{},[29,54280,54281],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[29,54283,54284],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[29,54286,54287],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[29,54289,54290],{},"开发中尽量保持形参和实参个数一致",[29,54292,54293],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[29,54295,54296],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54298,54299],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[391,54301,54303],{"id":54302},"_292-函数的返回值","2.9.2 函数的返回值",[19,54305,54306],{},[3317,54307],{"alt":63,"src":54308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54310,54311],{},[3317,54312],{"alt":63,"src":54313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[2994,54315,54316,54319,54322,54325,54328],{},[29,54317,54318],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[29,54320,54321],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[29,54323,54324],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[29,54326,54327],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[29,54329,54330],{},"断点调试:进入函数内部看执行过程F11",[391,54332,54334],{"id":54333},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[58,54336,54338],{"className":52401,"code":54337,"language":52403,"meta":63,"style":63},"    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",[32,54339,54340,54345,54350,54354,54359],{"__ignoreMap":63},[67,54341,54342],{"class":69,"line":70},[67,54343,54344],{"class":73},"    function fn(a, b) {\n",[67,54346,54347],{"class":69,"line":191},[67,54348,54349],{"class":73},"      console.log(a + b);\n",[67,54351,54352],{"class":69,"line":202},[67,54353,4020],{"class":73},[67,54355,54356],{"class":69,"line":641},[67,54357,54358],{"class":73},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[67,54360,54361],{"class":69,"line":655},[67,54362,54363],{"class":73},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[391,54365,54367],{"id":54366},"_294-作用域","2.9.4 作用域",[2994,54369,54370,54376,54381,54384,54387],{},[29,54371,54372,54373],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2144,54374,54375],{},"作用域",[29,54377,54378],{},[2144,54379,54380],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[29,54382,54383],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[29,54385,54386],{},"函数内部可以直接所使用全局变量",[29,54388,54389],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54391,16431],{},[58,54393,54395],{"className":52401,"code":54394,"language":52403,"meta":63,"style":63},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[32,54396,54397,54402,54407,54411,54416,54421,54426],{"__ignoreMap":63},[67,54398,54399],{"class":69,"line":70},[67,54400,54401],{"class":73},"    function fun() {\n",[67,54403,54404],{"class":69,"line":191},[67,54405,54406],{"class":73},"      num = 10\n",[67,54408,54409],{"class":69,"line":202},[67,54410,4020],{"class":73},[67,54412,54413],{"class":69,"line":641},[67,54414,54415],{"class":73},"    fun()\n",[67,54417,54418],{"class":69,"line":655},[67,54419,54420],{"class":73},"    console.log(num)\n",[67,54422,54423],{"class":69,"line":660},[67,54424,54425],{"class":73},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[67,54427,54428],{"class":69,"line":665},[67,54429,54430],{"class":73},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[2994,54432,54433,54436],{},[29,54434,54435],{},"函数内部的形参可以看做是局部变量",[29,54437,54438],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54440,54441,54442],{},"变量访问原则： ",[2144,54443,54444],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[391,54446,54448],{"id":54447},"_295-匿名函数","2.9.5 匿名函数",[19,54450,54451],{},"函数可以分为具名函数和匿名函数",[19,54453,54454],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[26,54456,54457],{},[29,54458,54459],{},"函数表达式",[19,54461,54462],{},[3317,54463],{"alt":63,"src":54464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54466,54467],{},"里边也可以写参数",[19,54469,54470],{},"具名函数调用位置可以随意调整；",[19,54472,54473],{},"匿名函数函数表达式形式只能在声明后才可以使用",[26,54475,54476],{"start":191},[29,54477,54478],{},"立即执行函数",[19,54480,54481],{},[3317,54482],{"alt":63,"src":54483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54485,54486],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54488,54489],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54491,54492],{},"(function () {})();",[19,54494,54495],{},"不要落下最后的;",[19,54497,54498],{},"立即执行函数必须要加;",[19,54500,54501],{},"分号写前写后都没问题",[19,54503,54504],{},"写前：",[19,54506,54507],{},"(function() {})()",[19,54509,54510],{},";(function () {})();",[19,54512,54513],{},"写后:",[19,54515,54516],{},"(function() {})();",[19,54518,54492],{},[19,54520,54521],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54523,54524],{},"还有一种写法：",[19,54526,54527],{},"(function(){}());",[19,54529,54530],{},"或者:",[19,54532,54533],{},"!function(){}();",[19,54535,54536],{},"立即执行函数有时候也是可以加名字的：",[19,54538,54539],{},"(function flexible(window,document) {}(window,document));",[19,54541,54542],{},"省一些调用方法",[391,54544,54546],{"id":54545},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54548,54549],{},[3317,54550],{"alt":63,"src":54551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54553,54554],{},"这样就不用非得给x,y初始化了",[19,54556,54557],{},[3317,54558],{"alt":63,"src":54559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54561,54562],{},"代码执行时先看左边",[19,54564,54565],{},"例如：console.log(false && 3+5)",[19,54567,54568],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54570,54571],{},"&&都是真时，就返回最后一个真值",[19,54573,54574],{},"console.log(11 && 22)",[19,54576,54577],{},"输出22",[19,54579,54580],{},"逻辑与：遇真则真",[19,54582,16431],{},[19,54584,54585],{},"let age=1",[19,54587,54588],{},"console.log(11 || age++)",[19,54590,54591],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54593,54594],{},"console.log(11 || 22)",[19,54596,54597],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54599,54600],{},"||如果都是假的话，就取最后一个假的值了",[391,54602,54604],{"id":54603},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54606,54607],{},"显示转换：",[19,54609,54610,54613,54614],{},[2144,54611,54612],{},"记忆","： ",[2144,54615,54616],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54618,54619],{},"空字符串为假，其他字符串全为真",[19,54621,54622],{},[3317,54623],{"alt":63,"src":54624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54626,54627],{},"隐式转换：",[19,54629,54630],{},[3317,54631],{"alt":63,"src":54632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54634,54635],{},"隐式转换:",[19,54637,54638],{},"null+3=3",[19,54640,54641],{},"undefined+3=NaN",[19,54643,54644],{},"null==undefined 输出true,他两个都当0看",[19,54646,54647],{},"null===undefined 输出false",[19,54649,54650],{},"undefined做任何操作都是NaN",[19,54652,54653],{},"NaN不等于NaN，NaN表示计算错误",[14,54655,54657],{"id":54656},"_210-对象","2.10 对象",[391,54659,54661],{"id":54660},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54663,54664],{},"对象也是一种数据类型，里边的数据是无序的",[19,54666,54667],{},"对象由属性和方法组成",[19,54669,54670],{},[3317,54671],{"alt":63,"src":54672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54674,54675],{},[3317,54676],{"alt":63,"src":54677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54679,54680],{},[3317,54681],{"alt":63,"src":54682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[391,54684,54686],{"id":54685},"_2102-对象属性","2.10.2 对象属性",[19,54688,54689],{},[3317,54690],{"alt":63,"src":54691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[26,54693,54694],{},[29,54695,54696],{},"查询对象",[19,54698,54699],{},"对象名.属性 goods.uname",[19,54701,54702],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54704,54705],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54707,54708],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54710,54711],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[26,54713,54714],{"start":191},[29,54715,54716],{},"重新赋值",[19,54718,54719],{},"对象名.属性=新值",[26,54721,54722],{"start":202},[29,54723,54724],{},"增加新数据",[19,54726,54719],{},[26,54728,54729],{"start":641},[29,54730,54731],{},"删除对象中的属性",[19,54733,54734],{},"delete 对象名.属性",[391,54736,54738],{"id":54737},"_2103-对象方法","2.10.3 对象方法",[19,54740,54741],{},[3317,54742],{"alt":63,"src":54743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54745,54746],{},"后边跟的是匿名函数",[19,54748,54749],{},"对象外面的叫函数；对象内部的叫方法",[19,54751,54752],{},[3317,54753],{"alt":63,"src":54754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[391,54756,54758],{"id":54757},"_2104-遍历对象","2.10.4 遍历对象",[19,54760,54761],{},"理解为加括号的python字典遍历",[19,54763,54764],{},[3317,54765],{"alt":63,"src":54766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54768,54769],{},"k是字符串类型",[19,54771,54772],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[58,54774,54776],{"className":52401,"code":54775,"language":52403,"meta":63,"style":63},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[32,54777,54778,54783,54788,54793,54798],{"__ignoreMap":63},[67,54779,54780],{"class":69,"line":70},[67,54781,54782],{"class":73},"   let arr = [1, 2, 3]\n",[67,54784,54785],{"class":69,"line":191},[67,54786,54787],{"class":73},"    for (let k in arr) {\n",[67,54789,54790],{"class":69,"line":202},[67,54791,54792],{"class":73},"      console.log(k)\n",[67,54794,54795],{"class":69,"line":641},[67,54796,54797],{"class":73},"      console.log(arr[k])\n",[67,54799,54800],{"class":69,"line":655},[67,54801,4020],{"class":73},[19,54803,54804],{},[3317,54805],{"alt":63,"src":54806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54808,54809],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54811,54812],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54814,54815],{},"for in 得到的k是属性名",[53578,54817,54818],{},"\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,54820,54821],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[391,54823,54825],{"id":54824},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54827,54828],{},"数组中放对象信息",[58,54830,54832],{"className":250,"code":54831,"language":252,"meta":63,"style":63},"\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",[32,54833,54834,54842,54847,54852,54857,54862,54867,54872,54877,54882,54887,54892,54897,54901,54905],{"__ignoreMap":63},[67,54835,54836,54838,54840],{"class":69,"line":70},[67,54837,259],{"class":73},[67,54839,53578],{"class":262},[67,54841,323],{"class":73},[67,54843,54844],{"class":69,"line":191},[67,54845,54846],{"class":73},"    let students = [\n",[67,54848,54849],{"class":69,"line":202},[67,54850,54851],{"class":73},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[67,54853,54854],{"class":69,"line":641},[67,54855,54856],{"class":73},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[67,54858,54859],{"class":69,"line":655},[67,54860,54861],{"class":73},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[67,54863,54864],{"class":69,"line":660},[67,54865,54866],{"class":73},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[67,54868,54869],{"class":69,"line":665},[67,54870,54871],{"class":73},"    ]\n",[67,54873,54874],{"class":69,"line":677},[67,54875,54876],{"class":73},"    for (let i = 0; i \u003C students.length; i++) {\n",[67,54878,54879],{"class":69,"line":683},[67,54880,54881],{"class":73},"      for (let k in students[i]) {\n",[67,54883,54884],{"class":69,"line":689},[67,54885,54886],{"class":73},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[67,54888,54889],{"class":69,"line":694},[67,54890,54891],{"class":73},"        \u002F\u002F输出每个人的名字：\n",[67,54893,54894],{"class":69,"line":700},[67,54895,54896],{"class":73},"        \u002F\u002Fconsole.log(students[i].name)\n",[67,54898,54899],{"class":69,"line":706},[67,54900,54162],{"class":73},[67,54902,54903],{"class":69,"line":712},[67,54904,4020],{"class":73},[67,54906,54907,54909,54911],{"class":69,"line":717},[67,54908,54181],{"class":73},[67,54910,53578],{"class":262},[67,54912,323],{"class":73},[391,54914,54916],{"id":54915},"_2106-内置对象","2.10.6 内置对象",[19,54918,54919],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[26,54921,54922],{},[29,54923,54924],{},"数学对象Math",[19,54926,54927],{},[3317,54928],{"alt":63,"src":54929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54931,54932],{},[2230,54933,54936],{"href":54934,"rel":54935},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25657],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54938,54939],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54941,54942],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54944,54945],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54947,54948],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54950,54951],{},"null属于对象数据类型",[26,54953,54954],{"start":191},[29,54955,54956],{},"生成任意范围随机数",[19,54958,54959],{},[3317,54960],{"alt":63,"src":54961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54963,54964],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54966,54967],{},"乘以几就取不到几",[19,54969,54970],{},"取数组中的随机元素：",[19,54972,54973],{},"let arr = ['red', 'green', 'blue']",[19,54975,54976],{},"let random = Math.floor(Math.random() * arr.length)",[19,54978,54979],{},"console.log(arr[random])",[19,54981,54982],{},"这个函数得到的是全闭区间",[19,54984,54985],{},"function getRandom(N, M) {",[19,54987,54988],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54990,2934],{},[19,54992,54993],{},"console.log(getRandom(4, 8))",[391,54995,54997],{"id":54996},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54999,55000],{},[3317,55001],{"alt":63,"src":55002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55004,55005],{},[3317,55006],{"alt":63,"src":55007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55009,55010],{},[3317,55011],{"alt":63,"src":55012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55014,55015],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55017,55018],{},[3317,55019],{"alt":63,"src":55020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55022,55023],{},[3317,55024],{"alt":63,"src":55025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55027,55028],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55030,55031],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55033,55034],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1903,55036,55037],{},"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":63,"searchDepth":191,"depth":191,"links":55039},[55040,55048,55049,55050,55051,55052,55059,55063,55069,55078],{"id":52236,"depth":191,"text":52237,"children":55041},[55042,55043,55044,55045,55046,55047],{"id":52240,"depth":202,"text":52241},{"id":52257,"depth":202,"text":52258},{"id":52297,"depth":202,"text":52298},{"id":52309,"depth":202,"text":52310},{"id":52318,"depth":202,"text":52319},{"id":52366,"depth":202,"text":52367},{"id":52376,"depth":191,"text":52377},{"id":52464,"depth":191,"text":52465},{"id":52487,"depth":191,"text":52488},{"id":52499,"depth":191,"text":52500},{"id":52686,"depth":191,"text":52687,"children":55053},[55054,55055,55056,55057,55058],{"id":52690,"depth":202,"text":52691},{"id":52699,"depth":202,"text":52700},{"id":52727,"depth":202,"text":52728},{"id":52763,"depth":202,"text":52764},{"id":52788,"depth":202,"text":52789},{"id":52800,"depth":191,"text":52801,"children":55060},[55061,55062],{"id":52821,"depth":202,"text":52822},{"id":52915,"depth":202,"text":52916},{"id":52973,"depth":191,"text":52974,"children":55064},[55065,55066,55067,55068],{"id":52977,"depth":202,"text":52978},{"id":53001,"depth":202,"text":53002},{"id":53054,"depth":202,"text":53055},{"id":53862,"depth":202,"text":53863},{"id":54247,"depth":191,"text":54248,"children":55070},[55071,55072,55073,55074,55075,55076,55077],{"id":54265,"depth":202,"text":54266},{"id":54302,"depth":202,"text":54303},{"id":54333,"depth":202,"text":54334},{"id":54366,"depth":202,"text":54367},{"id":54447,"depth":202,"text":54448},{"id":54545,"depth":202,"text":54546},{"id":54603,"depth":202,"text":54604},{"id":54656,"depth":191,"text":54657,"children":55079},[55080,55081,55082,55083,55084,55085,55086],{"id":54660,"depth":202,"text":54661},{"id":54685,"depth":202,"text":54686},{"id":54737,"depth":202,"text":54738},{"id":54757,"depth":202,"text":54758},{"id":54824,"depth":202,"text":54825},{"id":54915,"depth":202,"text":54916},{"id":54996,"depth":202,"text":54997},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52228,"description":25173},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55093,"title":55094,"body":55095,"description":25173,"extension":1930,"meta":78433,"navigation":630,"path":78434,"seo":78435,"stem":78436,"__hash__":78437},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55096,"toc":78373},[55097,55100,55103,55106,55111,55114,55117,55120,55124,55128,55134,55139,55147,55154,55157,55161,55166,55171,55176,55179,55182,55193,55196,55200,55203,55206,55211,55216,55221,55224,55227,55319,55322,55327,55330,55335,55338,55341,55346,55349,55354,55358,55361,55375,55379,55384,55387,55390,55394,55399,55402,55406,55410,55415,55419,55424,55427,55430,55433,55436,55439,55442,55447,55452,55480,55483,55486,55489,55494,55497,55500,55503,55506,55510,55539,55543,55548,55553,55556,55559,55562,55567,55681,55686,55691,55852,55857,55860,55864,55869,55874,55877,55880,55883,55886,55889,55892,55895,55898,55901,55904,55907,55910,55913,55916,55918,55921,55924,55927,55932,55936,56333,56336,56342,56346,56351,57633,57638,57641,57644,57647,57652,58848,58852,58858,58863,58866,58871,58876,58880,58884,58889,58892,58897,58900,58903,58907,59815,59818,59822,60043,60046,60049,60052,60278,60281,60505,60508,60512,60517,60520,60523,60751,60754,60787,60790,60794,60799,60803,60806,60809,60812,60815,60818,60821,60824,60829,62109,62113,62116,63209,63213,63216,63219,63222,63225,63229,63232,63235,63237,63245,64725,64729,64732,64735,64738,64947,64950,64954,64958,64963,64968,64971,64974,64979,64983,64988,64991,65100,65104,65109,65114,65117,65120,65124,65129,65134,65139,65142,65145,65156,65159,65164,65169,65172,65175,65248,65252,65257,65260,65262,65273,65277,65282,66608,66611,66614,66617,66619,66622,66625,66628,66631,66634,66637,66640,66643,66646,66649,66652,66655,66657,66659,66662,66666,67760,67763,67766,67782,67796,67799,67804,67810,67815,67819,67823,67828,67832,67837,68279,68284,68287,68291,68296,68299,68302,68306,68311,68315,68320,68325,68329,68334,68339,68342,68347,68352,68356,68361,68366,68470,68473,68477,68482,68848,68851,68854,68857,68860,68863,68866,68869,68872,70168,70172,70177,70182,70185,70188,70191,70194,70196,70201,70206,70209,70213,70218,70223,70228,70231,70234,70237,70240,70243,70248,70251,70255,70260,70265,70269,70274,70277,70282,70285,70288,70291,70294,70297,70302,70305,70308,70311,70314,70318,70323,70326,70330,70335,70338,70341,70345,70374,70377,70381,70385,70390,70394,70399,70402,70405,70408,70411,70414,70417,70420,70423,70426,70429,70432,70435,70438,70441,70445,70450,70455,70458,70462,70466,70471,70474,70478,70481,70484,70489,70494,70499,70504,70509,70512,70515,70520,70525,70529,70534,70537,70542,70545,70548,70551,70554,70559,70562,70571,70575,70580,70583,70586,70590,70593,70598,70602,70605,70611,70617,70621,70647,70650,72211,72214,72710,72713,72718,72723,72728,72732,72737,72742,72747,72751,72756,72759,72762,72765,72768,72772,72775,72780,72783,72788,72792,72797,72800,72805,72810,72815,72818,72821,72826,72831,72834,72837,72841,72844,72849,72852,72857,72860,72865,72870,72875,72878,72883,72948,72951,72962,72966,72971,73143,73147,73152,73155,73158,73161,73165,73176,73180,73183,73188,73193,73196,73199,73202,73205,73208,73210,73213,73216,73219,73224,73227,73232,73235,73239,73242,73245,73259,73263,73266,73321,73326,73329,73332,73337,73340,73344,73349,73479,73483,73488,73493,73574,73579,73583,73586,73591,73596,73602,73605,73608,73611,73615,73620,73623,73634,73638,73655,76702,76706,76709,76712,76715,76736,76740,76743,76751,76754,76759,76762,76765,76770,76775,76779,76800,76804,76809,76812,76815,76818,76821,76825,76830,76833,76837,76842,76845,76850,76853,76858,76861,76866,78069,78073,78078,78081,78086,78370],[10,55098,55094],{"id":55099},"_3web-apis",[19,55101,55102],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55104,55105],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55107,55108],{},[3317,55109],{"alt":63,"src":55110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55112,55113],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55115,55116],{},"建议数组和对象使用 const 来声明",[19,55118,55119],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55121,55123],{"id":55122},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[391,55125,55127],{"id":55126},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55129,55130,55133],{},[32,55131,55132],{},"document"," = HTML 文件解析后的对象化表示；",[19,55135,55136,55138],{},[32,55137,55132],{}," ≠ HTML 文件本身",[19,55140,55141,55146],{},[2144,55142,55143],{},[32,55144,55145],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55148,55149,55153],{},[2144,55150,55151],{},[32,55152,55132],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55155,55156],{},"document实际上为window.document的简写",[391,55158,55160],{"id":55159},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55162,55163],{},[3317,55164],{"alt":63,"src":55165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55167,55168],{},[3317,55169],{"alt":63,"src":55170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55172,55173],{},[3317,55174],{"alt":63,"src":55175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55177,55178],{},"console.dir()",[19,55180,55181],{},"dir用来打印对象",[2994,55183,55184,55187,55190],{},[29,55185,55186],{},"任何一个标签，都是一个对象",[29,55188,55189],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[29,55191,55192],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55194,55195],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[391,55197,55199],{"id":55198},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55201,55202],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55204,55205],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55207,55208],{},[2144,55209,55210],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[26,55212,55213],{},[29,55214,55215],{},"利用CSS选择器来获取标签元素",[19,55217,55218],{},[3317,55219],{"alt":63,"src":55220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55222,55223],{},"里边的选择器必须必须加引号！！！",[19,55225,55226],{},"只选择第一个元素",[58,55228,55230],{"className":250,"code":55229,"language":252,"meta":63,"style":63},"\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",[32,55231,55232,55240,55261,55280,55288,55293,55298,55303,55311],{"__ignoreMap":63},[67,55233,55234,55236,55238],{"class":69,"line":70},[67,55235,259],{"class":73},[67,55237,53565],{"class":262},[67,55239,323],{"class":73},[67,55241,55242,55244,55246,55249,55251,55254,55257,55259],{"class":69,"line":191},[67,55243,328],{"class":73},[67,55245,53377],{"class":262},[67,55247,55248],{"class":110}," class",[67,55250,85],{"class":73},[67,55252,55253],{"class":114},"\"box\"",[67,55255,55256],{"class":73},">123\u003C\u002F",[67,55258,53377],{"class":262},[67,55260,323],{"class":73},[67,55262,55263,55265,55267,55269,55271,55273,55276,55278],{"class":69,"line":202},[67,55264,328],{"class":73},[67,55266,53377],{"class":262},[67,55268,55248],{"class":110},[67,55270,85],{"class":73},[67,55272,55253],{"class":114},[67,55274,55275],{"class":73},">456\u003C\u002F",[67,55277,53377],{"class":262},[67,55279,323],{"class":73},[67,55281,55282,55284,55286],{"class":69,"line":641},[67,55283,328],{"class":73},[67,55285,53578],{"class":262},[67,55287,323],{"class":73},[67,55289,55290],{"class":69,"line":655},[67,55291,55292],{"class":73},"    \u002F\u002F 1.获取匹配的第一个元素\n",[67,55294,55295],{"class":69,"line":660},[67,55296,55297],{"class":73},"    const box = document.querySelector('div')\n",[67,55299,55300],{"class":69,"line":665},[67,55301,55302],{"class":73},"    console.dir(box)\n",[67,55304,55305,55307,55309],{"class":69,"line":677},[67,55306,54181],{"class":73},[67,55308,53578],{"class":262},[67,55310,323],{"class":73},[67,55312,55313,55315,55317],{"class":69,"line":683},[67,55314,376],{"class":73},[67,55316,53565],{"class":262},[67,55318,323],{"class":73},[19,55320,55321],{},"只选123，不选456",[19,55323,55324],{},[3317,55325],{"alt":63,"src":55326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55328,55329],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55331,55332],{},[3317,55333],{"alt":63,"src":55334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55336,55337],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55339,55340],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[26,55342,55343],{"start":191},[29,55344,55345],{},"其他方法来获取标签元素",[19,55347,55348],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55350,55351],{},[3317,55352],{"alt":63,"src":55353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[391,55355,55357],{"id":55356},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55359,55360],{},"设置修改DOM元素内容有两种方式：",[2994,55362,55363,55366,55369,55372],{},[29,55364,55365],{},"元素.innerText=''",[29,55367,55368],{},"元素.innerHTML=''",[29,55370,55371],{},"不写字符串输出数字也是可以的",[29,55373,55374],{},"元素.innerHtml=1",[23794,55376,55378],{"id":55377},"_3131-innertext","3.1.3.1 innerText",[19,55380,55381],{},[3317,55382],{"alt":63,"src":55383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55385,55386],{},"思路：实现了修改盒子中的内容！",[19,55388,55389],{},"它只显示纯文本，不解析标签",[23794,55391,55393],{"id":55392},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55395,55396],{},[3317,55397],{"alt":63,"src":55398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55400,55401],{},"相比于innerText，他的强大之处在于可以解析标签",[391,55403,55405],{"id":55404},"_314-操作元素属性","3.1.4 操作元素属性",[23794,55407,55409],{"id":55408},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55411,55412],{},[3317,55413],{"alt":63,"src":55414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23794,55416,55418],{"id":55417},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55420,55421],{},[3317,55422],{"alt":63,"src":55423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55425,55426],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55428,55429],{},"div.style.backgroundColor = 'hotpink'",[19,55431,55432],{},"如果按照css的写法，-表示减，就会出错",[19,55434,55435],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55437,55438],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55440,55441],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55443,55444],{},[3317,55445],{"alt":63,"src":55446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55448,55449],{},[3317,55450],{"alt":63,"src":55451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[26,55453,55454,55457,55460,55463,55466,55469],{},[29,55455,55456],{},"className这个方式就是修改很多样式的时候来使用的！",[29,55458,55459],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[29,55461,55462],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[29,55464,55465],{},"className为属性名，如果还用class的话就导致与关键字冲突",[29,55467,55468],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[29,55470,55471,55472,55477],{},"解析标签的时候就变为了",[53377,55473],{"className":55474},[55475,55476],"nav","box",[55478,55479],"br",{},[19,55481,55482],{},"例子：",[53377,55484],{"className":55485},[55475],[53578,55487,55488],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55490,55491],{},[3317,55492],{"alt":63,"src":55493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55495,55496],{},"追加和删除类名用classList",[19,55498,55499],{},"常用于类似于开关的操作",[19,55501,55502],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55504,55505],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23794,55507,55509],{"id":55508},"_3143-牢记点","3.1.4.3 牢记点",[26,55511,55512,55515,55518,55521,55524,55527,55530,55533,55536],{},[29,55513,55514],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[29,55516,55517],{},"使用style属性操作css时不要忘记引号",[29,55519,55520],{},"使用className或者classList时也不要忘记引号",[29,55522,55523],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[29,55525,55526],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[29,55528,55529],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[29,55531,55532],{},"若： let arr=['1','2',3] arr[0]=1",[29,55534,55535],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[29,55537,55538],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[391,55540,55542],{"id":55541},"_315-操作表单元素","3.1.5 操作表单元素",[26,55544,55545],{},[29,55546,55547],{},"天生的属性",[19,55549,55550],{},[3317,55551],{"alt":63,"src":55552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55554,55555],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55557,55558],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55560,55561],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55563,55564],{},[3317,55565],{"alt":63,"src":55566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[58,55568,55570],{"className":52401,"code":55569,"language":52403,"meta":63,"style":63},"在复选框中如果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",[32,55571,55572,55577,55608,55613,55618,55623,55628,55632,55637,55642,55659,55671,55676],{"__ignoreMap":63},[67,55573,55574],{"class":69,"line":70},[67,55575,55576],{"class":73},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[67,55578,55579,55581,55584,55586,55588,55591,55593,55595,55597,55599,55601,55603,55606],{"class":69,"line":191},[67,55580,259],{"class":73},[67,55582,55583],{"class":262},"input",[67,55585,274],{"class":110},[67,55587,85],{"class":73},[67,55589,55590],{"class":114},"\"checkbox\"",[67,55592,266],{"class":110},[67,55594,85],{"class":73},[67,55596,9468],{"class":114},[67,55598,16756],{"class":110},[67,55600,85],{"class":73},[67,55602,9468],{"class":114},[67,55604,55605],{"class":110}," checked",[67,55607,323],{"class":73},[67,55609,55610],{"class":69,"line":202},[67,55611,55612],{"class":73},"不选的话：\n",[67,55614,55615],{"class":69,"line":641},[67,55616,55617],{"class":73},"const input = document.querySelector('input')\n",[67,55619,55620],{"class":69,"line":655},[67,55621,55622],{"class":73},"input.checked=false\n",[67,55624,55625],{"class":69,"line":660},[67,55626,55627],{"class":73},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[67,55629,55630],{"class":69,"line":665},[67,55631,631],{"emptyLinePlaceholder":630},[67,55633,55634],{"class":69,"line":677},[67,55635,55636],{"class":73},"禁用按钮：\n",[67,55638,55639],{"class":69,"line":683},[67,55640,55641],{"class":73},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[67,55643,55644,55646,55649,55652,55655,55657],{"class":69,"line":689},[67,55645,259],{"class":73},[67,55647,55648],{"class":262},"button",[67,55650,55651],{"class":110}," disabled",[67,55653,55654],{"class":73},">点击\u003C\u002F",[67,55656,55648],{"class":262},[67,55658,323],{"class":73},[67,55660,55661,55663,55665,55667,55669],{"class":69,"line":694},[67,55662,259],{"class":73},[67,55664,55648],{"class":262},[67,55666,55654],{"class":73},[67,55668,55648],{"class":262},[67,55670,323],{"class":73},[67,55672,55673],{"class":69,"line":700},[67,55674,55675],{"class":73},"const bt = document.querySelector('button')\n",[67,55677,55678],{"class":69,"line":706},[67,55679,55680],{"class":73},"bt.disabled = false\n",[26,55682,55683],{"start":191},[29,55684,55685],{},"自定义属性",[19,55687,55688],{},[3317,55689],{"alt":63,"src":55690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[58,55692,55694],{"className":250,"code":55693,"language":252,"meta":63,"style":63},"\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",[32,55695,55696,55704,55732,55751,55770,55789,55808,55816,55821,55826,55831,55836,55844],{"__ignoreMap":63},[67,55697,55698,55700,55702],{"class":69,"line":70},[67,55699,259],{"class":73},[67,55701,53565],{"class":262},[67,55703,323],{"class":73},[67,55705,55706,55708,55710,55713,55715,55717,55720,55722,55725,55728,55730],{"class":69,"line":191},[67,55707,328],{"class":73},[67,55709,53377],{"class":262},[67,55711,55712],{"class":110}," data-id",[67,55714,85],{"class":73},[67,55716,353],{"class":114},[67,55718,55719],{"class":110}," data-spm",[67,55721,85],{"class":73},[67,55723,55724],{"class":114},"\"我不知道\"",[67,55726,55727],{"class":73},">1\u003C\u002F",[67,55729,53377],{"class":262},[67,55731,323],{"class":73},[67,55733,55734,55736,55738,55740,55742,55744,55747,55749],{"class":69,"line":202},[67,55735,328],{"class":73},[67,55737,53377],{"class":262},[67,55739,55712],{"class":110},[67,55741,85],{"class":73},[67,55743,5522],{"class":114},[67,55745,55746],{"class":73},">2\u003C\u002F",[67,55748,53377],{"class":262},[67,55750,323],{"class":73},[67,55752,55753,55755,55757,55759,55761,55763,55766,55768],{"class":69,"line":641},[67,55754,328],{"class":73},[67,55756,53377],{"class":262},[67,55758,55712],{"class":110},[67,55760,85],{"class":73},[67,55762,5535],{"class":114},[67,55764,55765],{"class":73},">3\u003C\u002F",[67,55767,53377],{"class":262},[67,55769,323],{"class":73},[67,55771,55772,55774,55776,55778,55780,55782,55785,55787],{"class":69,"line":655},[67,55773,328],{"class":73},[67,55775,53377],{"class":262},[67,55777,55712],{"class":110},[67,55779,85],{"class":73},[67,55781,5548],{"class":114},[67,55783,55784],{"class":73},">4\u003C\u002F",[67,55786,53377],{"class":262},[67,55788,323],{"class":73},[67,55790,55791,55793,55795,55797,55799,55801,55804,55806],{"class":69,"line":660},[67,55792,328],{"class":73},[67,55794,53377],{"class":262},[67,55796,55712],{"class":110},[67,55798,85],{"class":73},[67,55800,5568],{"class":114},[67,55802,55803],{"class":73},">5\u003C\u002F",[67,55805,53377],{"class":262},[67,55807,323],{"class":73},[67,55809,55810,55812,55814],{"class":69,"line":665},[67,55811,328],{"class":73},[67,55813,53578],{"class":262},[67,55815,323],{"class":73},[67,55817,55818],{"class":69,"line":677},[67,55819,55820],{"class":73},"    const one = document.querySelector('div')\n",[67,55822,55823],{"class":69,"line":683},[67,55824,55825],{"class":73},"    console.log(one.dataset)\n",[67,55827,55828],{"class":69,"line":689},[67,55829,55830],{"class":73},"    console.log(one.dataset.id)\n",[67,55832,55833],{"class":69,"line":694},[67,55834,55835],{"class":73},"    console.log(one.dataset.spm)\n",[67,55837,55838,55840,55842],{"class":69,"line":700},[67,55839,54181],{"class":73},[67,55841,53578],{"class":262},[67,55843,323],{"class":73},[67,55845,55846,55848,55850],{"class":69,"line":706},[67,55847,376],{"class":73},[67,55849,53565],{"class":262},[67,55851,323],{"class":73},[19,55853,55854],{},[3317,55855],{"alt":63,"src":55856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55858,55859],{},"document.querySelector选择的是第一个对象（元素）",[391,55861,55863],{"id":55862},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55865,55866],{},[3317,55867],{"alt":63,"src":55868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55870,55871],{},[3317,55872],{"alt":63,"src":55873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55875,55876],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53578,55878,55879],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55881,55882],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53578,55884,55885],{},"\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,55887,55888],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55890,55891],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55893,55894],{},"单位为毫秒！！！",[19,55896,55897],{},"可以搭配匿名函数来用！！！",[19,55899,55900],{},"setInterval(function () {",[19,55902,55903],{},"alert('两秒执行一次')",[19,55905,55906],{},"}, 2000)",[19,55908,55909],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55911,55912],{},"function fn() {",[19,55914,55915],{},"document.write(1)",[19,55917,2934],{},[19,55919,55920],{},"setInterval(fn, 1000)",[19,55922,55923],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55925,55926],{},"setInterval('fn()', 1000)",[19,55928,55929],{},[3317,55930],{"alt":63,"src":55931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23794,55933,55935],{"id":55934},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[58,55937,55939],{"className":52401,"code":55938,"language":52403,"meta":63,"style":63},"\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",[32,55940,55941,55951,55965,55969,55977,55991,56011,56023,56031,56035,56043,56080,56085,56090,56095,56103,56111,56133,56141,56146,56168,56173,56178,56189,56194,56214,56222,56237,56252,56263,56268,56278,56288,56292,56301,56305,56313,56321,56325],{"__ignoreMap":63},[67,55942,55943,55945,55947,55949],{"class":69,"line":70},[67,55944,53065],{"class":73},[67,55946,53068],{"class":262},[67,55948,53071],{"class":110},[67,55950,323],{"class":73},[67,55952,55953,55955,55957,55959,55961,55963],{"class":69,"line":191},[67,55954,259],{"class":73},[67,55956,52403],{"class":262},[67,55958,53082],{"class":110},[67,55960,85],{"class":73},[67,55962,53087],{"class":114},[67,55964,323],{"class":73},[67,55966,55967],{"class":69,"line":202},[67,55968,631],{"emptyLinePlaceholder":630},[67,55970,55971,55973,55975],{"class":69,"line":641},[67,55972,259],{"class":73},[67,55974,53100],{"class":262},[67,55976,323],{"class":73},[67,55978,55979,55981,55983,55985,55987,55989],{"class":69,"line":655},[67,55980,328],{"class":73},[67,55982,53110],{"class":262},[67,55984,53113],{"class":110},[67,55986,85],{"class":73},[67,55988,53118],{"class":114},[67,55990,323],{"class":73},[67,55992,55993,55995,55997,55999,56001,56003,56005,56007,56009],{"class":69,"line":660},[67,55994,328],{"class":73},[67,55996,53110],{"class":262},[67,55998,266],{"class":110},[67,56000,85],{"class":73},[67,56002,53157],{"class":114},[67,56004,53137],{"class":110},[67,56006,85],{"class":73},[67,56008,53164],{"class":114},[67,56010,323],{"class":73},[67,56012,56013,56015,56017,56019,56021],{"class":69,"line":665},[67,56014,328],{"class":73},[67,56016,53173],{"class":262},[67,56018,53176],{"class":73},[67,56020,53173],{"class":262},[67,56022,323],{"class":73},[67,56024,56025,56027,56029],{"class":69,"line":677},[67,56026,376],{"class":73},[67,56028,53100],{"class":262},[67,56030,323],{"class":73},[67,56032,56033],{"class":69,"line":683},[67,56034,631],{"emptyLinePlaceholder":630},[67,56036,56037,56039,56041],{"class":69,"line":689},[67,56038,259],{"class":73},[67,56040,53565],{"class":262},[67,56042,323],{"class":73},[67,56044,56045,56047,56050,56052,56054,56056,56058,56060,56062,56065,56067,56070,56073,56075,56078],{"class":69,"line":694},[67,56046,328],{"class":73},[67,56048,56049],{"class":262},"textarea",[67,56051,266],{"class":110},[67,56053,85],{"class":73},[67,56055,9468],{"class":114},[67,56057,16756],{"class":110},[67,56059,85],{"class":73},[67,56061,9468],{"class":114},[67,56063,56064],{"class":110}," cols",[67,56066,85],{"class":73},[67,56068,56069],{"class":114},"\"30\"",[67,56071,56072],{"class":110}," rows",[67,56074,85],{"class":73},[67,56076,56077],{"class":114},"\"10\"",[67,56079,323],{"class":73},[67,56081,56082],{"class":69,"line":700},[67,56083,56084],{"class":73},"        用户注册协议\n",[67,56086,56087],{"class":69,"line":706},[67,56088,56089],{"class":73},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[67,56091,56092],{"class":69,"line":712},[67,56093,56094],{"class":73},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[67,56096,56097,56099,56101],{"class":69,"line":717},[67,56098,53542],{"class":73},[67,56100,56049],{"class":262},[67,56102,323],{"class":73},[67,56104,56105,56107,56109],{"class":69,"line":723},[67,56106,328],{"class":73},[67,56108,55478],{"class":262},[67,56110,323],{"class":73},[67,56112,56113,56115,56117,56119,56121,56124,56126,56129,56131],{"class":69,"line":729},[67,56114,328],{"class":73},[67,56116,55648],{"class":262},[67,56118,55248],{"class":110},[67,56120,85],{"class":73},[67,56122,56123],{"class":114},"\"btn\"",[67,56125,55651],{"class":110},[67,56127,56128],{"class":73},">我已经阅读用户协议(5)\u003C\u002F",[67,56130,55648],{"class":262},[67,56132,323],{"class":73},[67,56134,56135,56137,56139],{"class":69,"line":735},[67,56136,328],{"class":73},[67,56138,53578],{"class":262},[67,56140,323],{"class":73},[67,56142,56143],{"class":69,"line":741},[67,56144,56145],{"class":2058},"    \u002F\u002F 1. 获取元素\n",[67,56147,56148,56150,56153,56155,56158,56161,56163,56166],{"class":69,"line":747},[67,56149,13021],{"class":84},[67,56151,56152],{"class":77}," btn",[67,56154,671],{"class":84},[67,56156,56157],{"class":73}," document.",[67,56159,56160],{"class":110},"querySelector",[67,56162,854],{"class":73},[67,56164,56165],{"class":114},"'.btn'",[67,56167,829],{"class":73},[67,56169,56170],{"class":69,"line":753},[67,56171,56172],{"class":2058},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[67,56174,56175],{"class":69,"line":758},[67,56176,56177],{"class":2058},"    \u002F\u002F 2. 倒计时\n",[67,56179,56180,56182,56184,56186],{"class":69,"line":764},[67,56181,53983],{"class":84},[67,56183,11244],{"class":73},[67,56185,85],{"class":84},[67,56187,56188],{"class":77}," 5\n",[67,56190,56191],{"class":69,"line":770},[67,56192,56193],{"class":2058},"    \u002F\u002F 2.1 开启定时器\n",[67,56195,56196,56198,56201,56203,56206,56208,56211],{"class":69,"line":776},[67,56197,53983],{"class":84},[67,56199,56200],{"class":73}," n ",[67,56202,85],{"class":84},[67,56204,56205],{"class":110}," setInterval",[67,56207,854],{"class":73},[67,56209,56210],{"class":84},"function",[67,56212,56213],{"class":73}," () {\n",[67,56215,56216,56219],{"class":69,"line":782},[67,56217,56218],{"class":73},"      i",[67,56220,56221],{"class":84},"--\n",[67,56223,56224,56227,56229,56232,56234],{"class":69,"line":788},[67,56225,56226],{"class":73},"      btn.innerHTML ",[67,56228,85],{"class":84},[67,56230,56231],{"class":114}," `我已经阅读用户协议(${",[67,56233,2432],{"class":73},[67,56235,56236],{"class":114},"})`\n",[67,56238,56239,56242,56245,56248,56250],{"class":69,"line":793},[67,56240,56241],{"class":84},"      if",[67,56243,56244],{"class":73}," (i ",[67,56246,56247],{"class":84},"===",[67,56249,5913],{"class":77},[67,56251,14241],{"class":73},[67,56253,56254,56257,56260],{"class":69,"line":798},[67,56255,56256],{"class":110},"        clearInterval",[67,56258,56259],{"class":73},"(n)  ",[67,56261,56262],{"class":2058},"\u002F\u002F 关闭定时器\n",[67,56264,56265],{"class":69,"line":816},[67,56266,56267],{"class":2058},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[67,56269,56270,56273,56275],{"class":69,"line":832},[67,56271,56272],{"class":73},"        btn.disabled ",[67,56274,85],{"class":84},[67,56276,56277],{"class":77}," false\n",[67,56279,56280,56283,56285],{"class":69,"line":843},[67,56281,56282],{"class":73},"        btn.innerHTML ",[67,56284,85],{"class":84},[67,56286,56287],{"class":114}," '同意'\n",[67,56289,56290],{"class":69,"line":848},[67,56291,54162],{"class":73},[67,56293,56294,56297,56299],{"class":69,"line":863},[67,56295,56296],{"class":73},"    }, ",[67,56298,8227],{"class":77},[67,56300,829],{"class":73},[67,56302,56303],{"class":69,"line":876},[67,56304,631],{"emptyLinePlaceholder":630},[67,56306,56307,56309,56311],{"class":69,"line":889},[67,56308,54181],{"class":73},[67,56310,53578],{"class":262},[67,56312,323],{"class":73},[67,56314,56315,56317,56319],{"class":69,"line":894},[67,56316,376],{"class":73},[67,56318,53565],{"class":262},[67,56320,323],{"class":73},[67,56322,56323],{"class":69,"line":911},[67,56324,631],{"emptyLinePlaceholder":630},[67,56326,56327,56329,56331],{"class":69,"line":927},[67,56328,376],{"class":73},[67,56330,52403],{"class":262},[67,56332,323],{"class":73},[19,56334,56335],{},"不要一直想着用死循环,避免死循环",[19,56337,56338,56341],{},[32,56339,56340],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23794,56343,56345],{"id":56344},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[26,56347,56348],{},[29,56349,56350],{},"法1",[58,56352,56354],{"className":52401,"code":56353,"language":52403,"meta":63,"style":63},"\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",[32,56355,56356,56366,56380,56384,56392,56406,56426,56438,56446,56452,56463,56474,56478,56482,56489,56501,56505,56509,56516,56528,56542,56555,56569,56573,56577,56584,56595,56606,56617,56629,56641,56653,56657,56661,56669,56679,56692,56704,56717,56721,56725,56732,56742,56754,56766,56777,56788,56798,56810,56822,56826,56830,56839,56851,56863,56891,56904,56908,56912,56919,56930,56934,56942,56950,56954,56962,56976,56991,57015,57023,57038,57051,57059,57080,57092,57104,57116,57128,57140,57152,57164,57173,57181,57189,57197,57209,57232,57251,57270,57289,57308,57327,57346,57366,57370,57390,57409,57429,57450,57461,57478,57488,57498,57508,57513,57518,57523,57528,57553,57566,57570,57593,57597,57605,57613,57621,57625],{"__ignoreMap":63},[67,56357,56358,56360,56362,56364],{"class":69,"line":70},[67,56359,53065],{"class":73},[67,56361,53068],{"class":262},[67,56363,53071],{"class":110},[67,56365,323],{"class":73},[67,56367,56368,56370,56372,56374,56376,56378],{"class":69,"line":191},[67,56369,259],{"class":73},[67,56371,52403],{"class":262},[67,56373,53082],{"class":110},[67,56375,85],{"class":73},[67,56377,53087],{"class":114},[67,56379,323],{"class":73},[67,56381,56382],{"class":69,"line":202},[67,56383,631],{"emptyLinePlaceholder":630},[67,56385,56386,56388,56390],{"class":69,"line":641},[67,56387,259],{"class":73},[67,56389,53100],{"class":262},[67,56391,323],{"class":73},[67,56393,56394,56396,56398,56400,56402,56404],{"class":69,"line":655},[67,56395,328],{"class":73},[67,56397,53110],{"class":262},[67,56399,53113],{"class":110},[67,56401,85],{"class":73},[67,56403,53118],{"class":114},[67,56405,323],{"class":73},[67,56407,56408,56410,56412,56414,56416,56418,56420,56422,56424],{"class":69,"line":660},[67,56409,328],{"class":73},[67,56411,53110],{"class":262},[67,56413,266],{"class":110},[67,56415,85],{"class":73},[67,56417,53157],{"class":114},[67,56419,53137],{"class":110},[67,56421,85],{"class":73},[67,56423,53164],{"class":114},[67,56425,323],{"class":73},[67,56427,56428,56430,56432,56434,56436],{"class":69,"line":665},[67,56429,328],{"class":73},[67,56431,53173],{"class":262},[67,56433,53176],{"class":73},[67,56435,53173],{"class":262},[67,56437,323],{"class":73},[67,56439,56440,56442,56444],{"class":69,"line":677},[67,56441,328],{"class":73},[67,56443,1903],{"class":262},[67,56445,323],{"class":73},[67,56447,56448,56450],{"class":69,"line":683},[67,56449,8220],{"class":262},[67,56451,17369],{"class":73},[67,56453,56454,56457,56459,56461],{"class":69,"line":689},[67,56455,56456],{"class":77},"      padding",[67,56458,53203],{"class":73},[67,56460,78],{"class":77},[67,56462,3148],{"class":73},[67,56464,56465,56468,56470,56472],{"class":69,"line":694},[67,56466,56467],{"class":77},"      margin",[67,56469,53203],{"class":73},[67,56471,78],{"class":77},[67,56473,3148],{"class":73},[67,56475,56476],{"class":69,"line":700},[67,56477,4020],{"class":73},[67,56479,56480],{"class":69,"line":706},[67,56481,631],{"emptyLinePlaceholder":630},[67,56483,56484,56487],{"class":69,"line":712},[67,56485,56486],{"class":262},"    li",[67,56488,17369],{"class":73},[67,56490,56491,56494,56496,56499],{"class":69,"line":717},[67,56492,56493],{"class":77},"      list-style",[67,56495,53203],{"class":73},[67,56497,56498],{"class":77},"none",[67,56500,3148],{"class":73},[67,56502,56503],{"class":69,"line":723},[67,56504,4020],{"class":73},[67,56506,56507],{"class":69,"line":729},[67,56508,631],{"emptyLinePlaceholder":630},[67,56510,56511,56514],{"class":69,"line":735},[67,56512,56513],{"class":110},"    .box",[67,56515,17369],{"class":73},[67,56517,56518,56521,56523,56526],{"class":69,"line":741},[67,56519,56520],{"class":77},"      position",[67,56522,53203],{"class":73},[67,56524,56525],{"class":77},"relative",[67,56527,3148],{"class":73},[67,56529,56530,56533,56535,56538,56540],{"class":69,"line":747},[67,56531,56532],{"class":77},"      width",[67,56534,53203],{"class":73},[67,56536,56537],{"class":77},"976",[67,56539,53258],{"class":84},[67,56541,3148],{"class":73},[67,56543,56544,56547,56549,56551,56553],{"class":69,"line":753},[67,56545,56546],{"class":77},"      height",[67,56548,53203],{"class":73},[67,56550,3393],{"class":77},[67,56552,53258],{"class":84},[67,56554,3148],{"class":73},[67,56556,56557,56559,56561,56563,56565,56567],{"class":69,"line":758},[67,56558,56467],{"class":77},[67,56560,53203],{"class":73},[67,56562,2302],{"class":77},[67,56564,53258],{"class":84},[67,56566,53322],{"class":77},[67,56568,3148],{"class":73},[67,56570,56571],{"class":69,"line":764},[67,56572,4020],{"class":73},[67,56574,56575],{"class":69,"line":770},[67,56576,631],{"emptyLinePlaceholder":630},[67,56578,56579,56582],{"class":69,"line":776},[67,56580,56581],{"class":110},"    .slider-footer",[67,56583,17369],{"class":73},[67,56585,56586,56588,56590,56593],{"class":69,"line":782},[67,56587,56520],{"class":77},[67,56589,53203],{"class":73},[67,56591,56592],{"class":77},"absolute",[67,56594,3148],{"class":73},[67,56596,56597,56600,56602,56604],{"class":69,"line":788},[67,56598,56599],{"class":77},"      left",[67,56601,53203],{"class":73},[67,56603,78],{"class":77},[67,56605,3148],{"class":73},[67,56607,56608,56611,56613,56615],{"class":69,"line":793},[67,56609,56610],{"class":77},"      bottom",[67,56612,53203],{"class":73},[67,56614,78],{"class":77},[67,56616,3148],{"class":73},[67,56618,56619,56621,56623,56625,56627],{"class":69,"line":798},[67,56620,56532],{"class":77},[67,56622,53203],{"class":73},[67,56624,2302],{"class":77},[67,56626,2319],{"class":84},[67,56628,3148],{"class":73},[67,56630,56631,56633,56635,56637,56639],{"class":69,"line":816},[67,56632,56546],{"class":77},[67,56634,53203],{"class":73},[67,56636,2564],{"class":77},[67,56638,2319],{"class":84},[67,56640,3148],{"class":73},[67,56642,56643,56646,56648,56651],{"class":69,"line":832},[67,56644,56645],{"class":77},"      background-color",[67,56647,53203],{"class":73},[67,56649,56650],{"class":77},"skyblue",[67,56652,3148],{"class":73},[67,56654,56655],{"class":69,"line":843},[67,56656,4020],{"class":73},[67,56658,56659],{"class":69,"line":848},[67,56660,631],{"emptyLinePlaceholder":630},[67,56662,56663,56665,56667],{"class":69,"line":863},[67,56664,56581],{"class":110},[67,56666,8641],{"class":262},[67,56668,17369],{"class":73},[67,56670,56671,56673,56675,56677],{"class":69,"line":876},[67,56672,56520],{"class":77},[67,56674,53203],{"class":73},[67,56676,56592],{"class":77},[67,56678,3148],{"class":73},[67,56680,56681,56684,56686,56688,56690],{"class":69,"line":889},[67,56682,56683],{"class":77},"      font-size",[67,56685,53203],{"class":73},[67,56687,2890],{"class":77},[67,56689,53258],{"class":84},[67,56691,3148],{"class":73},[67,56693,56694,56696,56698,56700,56702],{"class":69,"line":894},[67,56695,56599],{"class":77},[67,56697,53203],{"class":73},[67,56699,2689],{"class":77},[67,56701,53258],{"class":84},[67,56703,3148],{"class":73},[67,56705,56706,56709,56711,56713,56715],{"class":69,"line":911},[67,56707,56708],{"class":77},"      top",[67,56710,53203],{"class":73},[67,56712,2310],{"class":77},[67,56714,53258],{"class":84},[67,56716,3148],{"class":73},[67,56718,56719],{"class":69,"line":927},[67,56720,4020],{"class":73},[67,56722,56723],{"class":69,"line":932},[67,56724,631],{"emptyLinePlaceholder":630},[67,56726,56727,56730],{"class":69,"line":955},[67,56728,56729],{"class":262},"    ul",[67,56731,17369],{"class":73},[67,56733,56734,56736,56738,56740],{"class":69,"line":971},[67,56735,56520],{"class":77},[67,56737,53203],{"class":73},[67,56739,56592],{"class":77},[67,56741,3148],{"class":73},[67,56743,56744,56746,56748,56750,56752],{"class":69,"line":1010},[67,56745,56708],{"class":77},[67,56747,53203],{"class":73},[67,56749,2770],{"class":77},[67,56751,53258],{"class":84},[67,56753,3148],{"class":73},[67,56755,56756,56758,56760,56762,56764],{"class":69,"line":1016},[67,56757,56599],{"class":77},[67,56759,53203],{"class":73},[67,56761,2689],{"class":77},[67,56763,53258],{"class":84},[67,56765,3148],{"class":73},[67,56767,56768,56771,56773,56775],{"class":69,"line":1021},[67,56769,56770],{"class":77},"      display",[67,56772,53203],{"class":73},[67,56774,53243],{"class":77},[67,56776,3148],{"class":73},[67,56778,56779,56782,56784,56786],{"class":69,"line":1034},[67,56780,56781],{"class":77},"      justify-content",[67,56783,53203],{"class":73},[67,56785,53434],{"class":77},[67,56787,3148],{"class":73},[67,56789,56790,56792,56794,56796],{"class":69,"line":1053},[67,56791,56520],{"class":77},[67,56793,53203],{"class":73},[67,56795,56592],{"class":77},[67,56797,3148],{"class":73},[67,56799,56800,56802,56804,56806,56808],{"class":69,"line":1070},[67,56801,56532],{"class":77},[67,56803,53203],{"class":73},[67,56805,5812],{"class":77},[67,56807,53258],{"class":84},[67,56809,3148],{"class":73},[67,56811,56812,56814,56816,56818,56820],{"class":69,"line":1083},[67,56813,56546],{"class":77},[67,56815,53203],{"class":73},[67,56817,2689],{"class":77},[67,56819,53258],{"class":84},[67,56821,3148],{"class":73},[67,56823,56824],{"class":69,"line":1088},[67,56825,4020],{"class":73},[67,56827,56828],{"class":69,"line":1093},[67,56829,631],{"emptyLinePlaceholder":630},[67,56831,56832,56834,56837],{"class":69,"line":1110},[67,56833,56729],{"class":262},[67,56835,56836],{"class":262}," li",[67,56838,17369],{"class":73},[67,56840,56841,56843,56845,56847,56849],{"class":69,"line":11603},[67,56842,56532],{"class":77},[67,56844,53203],{"class":73},[67,56846,2689],{"class":77},[67,56848,53258],{"class":84},[67,56850,3148],{"class":73},[67,56852,56853,56855,56857,56859,56861],{"class":69,"line":11612},[67,56854,56546],{"class":77},[67,56856,53203],{"class":73},[67,56858,2689],{"class":77},[67,56860,53258],{"class":84},[67,56862,3148],{"class":73},[67,56864,56865,56867,56869,56872,56874,56876,56878,56880,56882,56884,56886,56889],{"class":69,"line":11617},[67,56866,56645],{"class":77},[67,56868,53203],{"class":73},[67,56870,56871],{"class":77},"rgba",[67,56873,854],{"class":73},[67,56875,78],{"class":77},[67,56877,1868],{"class":73},[67,56879,78],{"class":77},[67,56881,1868],{"class":73},[67,56883,78],{"class":77},[67,56885,1868],{"class":73},[67,56887,56888],{"class":77},".4",[67,56890,4544],{"class":73},[67,56892,56893,56896,56898,56900,56902],{"class":69,"line":11623},[67,56894,56895],{"class":77},"      border-radius",[67,56897,53203],{"class":73},[67,56899,2437],{"class":77},[67,56901,53258],{"class":84},[67,56903,3148],{"class":73},[67,56905,56906],{"class":69,"line":11644},[67,56907,4020],{"class":73},[67,56909,56910],{"class":69,"line":11650},[67,56911,631],{"emptyLinePlaceholder":630},[67,56913,56914,56917],{"class":69,"line":11664},[67,56915,56916],{"class":110},"    .activate",[67,56918,17369],{"class":73},[67,56920,56921,56923,56925,56928],{"class":69,"line":11670},[67,56922,56645],{"class":77},[67,56924,53203],{"class":73},[67,56926,56927],{"class":77},"#f7f7f7",[67,56929,3148],{"class":73},[67,56931,56932],{"class":69,"line":11697},[67,56933,4020],{"class":73},[67,56935,56936,56938,56940],{"class":69,"line":11706},[67,56937,54181],{"class":73},[67,56939,1903],{"class":262},[67,56941,323],{"class":73},[67,56943,56944,56946,56948],{"class":69,"line":11712},[67,56945,376],{"class":73},[67,56947,53100],{"class":262},[67,56949,323],{"class":73},[67,56951,56952],{"class":69,"line":11720},[67,56953,631],{"emptyLinePlaceholder":630},[67,56955,56956,56958,56960],{"class":69,"line":11725},[67,56957,259],{"class":73},[67,56959,53565],{"class":262},[67,56961,323],{"class":73},[67,56963,56964,56966,56968,56970,56972,56974],{"class":69,"line":18401},[67,56965,328],{"class":73},[67,56967,53377],{"class":262},[67,56969,55248],{"class":110},[67,56971,85],{"class":73},[67,56973,55253],{"class":114},[67,56975,323],{"class":73},[67,56977,56978,56980,56982,56984,56986,56989],{"class":69,"line":18407},[67,56979,53107],{"class":73},[67,56981,53377],{"class":262},[67,56983,55248],{"class":110},[67,56985,85],{"class":73},[67,56987,56988],{"class":114},"\"slider-wrapper\"",[67,56990,323],{"class":73},[67,56992,56993,56996,56998,57001,57003,57006,57009,57011,57013],{"class":69,"line":18430},[67,56994,56995],{"class":73},"      \u003C",[67,56997,3317],{"class":262},[67,56999,57000],{"class":110}," src",[67,57002,85],{"class":73},[67,57004,57005],{"class":114},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[67,57007,57008],{"class":110}," alt",[67,57010,85],{"class":73},[67,57012,9468],{"class":114},[67,57014,323],{"class":73},[67,57016,57017,57019,57021],{"class":69,"line":18436},[67,57018,53542],{"class":73},[67,57020,53377],{"class":262},[67,57022,323],{"class":73},[67,57024,57025,57027,57029,57031,57033,57036],{"class":69,"line":18459},[67,57026,53107],{"class":73},[67,57028,53377],{"class":262},[67,57030,55248],{"class":110},[67,57032,85],{"class":73},[67,57034,57035],{"class":114},"\"slider-footer\"",[67,57037,323],{"class":73},[67,57039,57040,57042,57044,57047,57049],{"class":69,"line":18473},[67,57041,56995],{"class":73},[67,57043,19],{"class":262},[67,57045,57046],{"class":73},">对人类来说会不会太超前了?\u003C\u002F",[67,57048,19],{"class":262},[67,57050,323],{"class":73},[67,57052,57053,57055,57057],{"class":69,"line":18493},[67,57054,56995],{"class":73},[67,57056,2994],{"class":262},[67,57058,323],{"class":73},[67,57060,57061,57064,57066,57068,57070,57073,57076,57078],{"class":69,"line":18499},[67,57062,57063],{"class":73},"        \u003C",[67,57065,29],{"class":262},[67,57067,55248],{"class":110},[67,57069,85],{"class":73},[67,57071,57072],{"class":114},"\"activate\"",[67,57074,57075],{"class":73},">\u003C\u002F",[67,57077,29],{"class":262},[67,57079,323],{"class":73},[67,57081,57082,57084,57086,57088,57090],{"class":69,"line":18510},[67,57083,57063],{"class":73},[67,57085,29],{"class":262},[67,57087,57075],{"class":73},[67,57089,29],{"class":262},[67,57091,323],{"class":73},[67,57093,57094,57096,57098,57100,57102],{"class":69,"line":18533},[67,57095,57063],{"class":73},[67,57097,29],{"class":262},[67,57099,57075],{"class":73},[67,57101,29],{"class":262},[67,57103,323],{"class":73},[67,57105,57106,57108,57110,57112,57114],{"class":69,"line":18555},[67,57107,57063],{"class":73},[67,57109,29],{"class":262},[67,57111,57075],{"class":73},[67,57113,29],{"class":262},[67,57115,323],{"class":73},[67,57117,57118,57120,57122,57124,57126],{"class":69,"line":18560},[67,57119,57063],{"class":73},[67,57121,29],{"class":262},[67,57123,57075],{"class":73},[67,57125,29],{"class":262},[67,57127,323],{"class":73},[67,57129,57130,57132,57134,57136,57138],{"class":69,"line":18566},[67,57131,57063],{"class":73},[67,57133,29],{"class":262},[67,57135,57075],{"class":73},[67,57137,29],{"class":262},[67,57139,323],{"class":73},[67,57141,57142,57144,57146,57148,57150],{"class":69,"line":18580},[67,57143,57063],{"class":73},[67,57145,29],{"class":262},[67,57147,57075],{"class":73},[67,57149,29],{"class":262},[67,57151,323],{"class":73},[67,57153,57154,57156,57158,57160,57162],{"class":69,"line":18593},[67,57155,57063],{"class":73},[67,57157,29],{"class":262},[67,57159,57075],{"class":73},[67,57161,29],{"class":262},[67,57163,323],{"class":73},[67,57165,57166,57169,57171],{"class":69,"line":18598},[67,57167,57168],{"class":73},"      \u003C\u002F",[67,57170,2994],{"class":262},[67,57172,323],{"class":73},[67,57174,57175,57177,57179],{"class":69,"line":18612},[67,57176,53542],{"class":73},[67,57178,53377],{"class":262},[67,57180,323],{"class":73},[67,57182,57183,57185,57187],{"class":69,"line":18617},[67,57184,54181],{"class":73},[67,57186,53377],{"class":262},[67,57188,323],{"class":73},[67,57190,57191,57193,57195],{"class":69,"line":18623},[67,57192,328],{"class":73},[67,57194,53578],{"class":262},[67,57196,323],{"class":73},[67,57198,57199,57201,57204,57206],{"class":69,"line":18628},[67,57200,13021],{"class":84},[67,57202,57203],{"class":77}," arrImage",[67,57205,671],{"class":84},[67,57207,57208],{"class":73}," [\n",[67,57210,57211,57214,57217,57220,57223,57226,57229],{"class":69,"line":18642},[67,57212,57213],{"class":73},"      { url: ",[67,57215,57216],{"class":114},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[67,57218,57219],{"class":73},", title: ",[67,57221,57222],{"class":114},"'对人类来说会不会太超前了?'",[67,57224,57225],{"class":73},", color: ",[67,57227,57228],{"class":114},"'rgba(100,67,68)'",[67,57230,57231],{"class":73}," },\n",[67,57233,57234,57236,57239,57241,57244,57246,57249],{"class":69,"line":18647},[67,57235,57213],{"class":73},[67,57237,57238],{"class":114},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[67,57240,57219],{"class":73},[67,57242,57243],{"class":114},"'开启剑与雪的黑暗传说!'",[67,57245,57225],{"class":73},[67,57247,57248],{"class":114},"'rgba(43,35,26)'",[67,57250,57231],{"class":73},[67,57252,57253,57255,57258,57260,57263,57265,57268],{"class":69,"line":18652},[67,57254,57213],{"class":73},[67,57256,57257],{"class":114},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[67,57259,57219],{"class":73},[67,57261,57262],{"class":114},"'真正的jo厨出现了!'",[67,57264,57225],{"class":73},[67,57266,57267],{"class":114},"'rgba(36,31,33)'",[67,57269,57231],{"class":73},[67,57271,57272,57274,57277,57279,57282,57284,57287],{"class":69,"line":18666},[67,57273,57213],{"class":73},[67,57275,57276],{"class":114},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[67,57278,57219],{"class":73},[67,57280,57281],{"class":114},"'李玉刚:让世界通过b站看到东方大国文化'",[67,57283,57225],{"class":73},[67,57285,57286],{"class":114},"'rgba(139,98,66)'",[67,57288,57231],{"class":73},[67,57290,57291,57293,57296,57298,57301,57303,57306],{"class":69,"line":18678},[67,57292,57213],{"class":73},[67,57294,57295],{"class":114},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[67,57297,57219],{"class":73},[67,57299,57300],{"class":114},"'快来分享你的寒假日常吧'",[67,57302,57225],{"class":73},[67,57304,57305],{"class":114},"'rgba(67,90,92)'",[67,57307,57231],{"class":73},[67,57309,57310,57312,57315,57317,57320,57322,57325],{"class":69,"line":18683},[67,57311,57213],{"class":73},[67,57313,57314],{"class":114},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[67,57316,57219],{"class":73},[67,57318,57319],{"class":114},"'哔哩哔哩小年YEAR'",[67,57321,57225],{"class":73},[67,57323,57324],{"class":114},"'rgba(166,131,143)'",[67,57326,57231],{"class":73},[67,57328,57329,57331,57334,57336,57339,57341,57344],{"class":69,"line":18696},[67,57330,57213],{"class":73},[67,57332,57333],{"class":114},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[67,57335,57219],{"class":73},[67,57337,57338],{"class":114},"'一站式解决你的电脑配置问题'",[67,57340,57225],{"class":73},[67,57342,57343],{"class":114},"'rgba(53,29,25)'",[67,57345,57231],{"class":73},[67,57347,57348,57350,57353,57355,57358,57360,57363],{"class":69,"line":18701},[67,57349,57213],{"class":73},[67,57351,57352],{"class":114},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[67,57354,57219],{"class":73},[67,57356,57357],{"class":114},"'谁不想和小猫咪贴贴呢?'",[67,57359,57225],{"class":73},[67,57361,57362],{"class":114},"'rgba(99,72,114)'",[67,57364,57365],{"class":73}," }\n",[67,57367,57368],{"class":69,"line":18706},[67,57369,54871],{"class":73},[67,57371,57372,57374,57377,57379,57381,57383,57385,57388],{"class":69,"line":18711},[67,57373,13021],{"class":84},[67,57375,57376],{"class":77}," img",[67,57378,671],{"class":84},[67,57380,56157],{"class":73},[67,57382,56160],{"class":110},[67,57384,854],{"class":73},[67,57386,57387],{"class":114},"'.slider-wrapper img'",[67,57389,829],{"class":73},[67,57391,57392,57394,57396,57398,57400,57402,57404,57407],{"class":69,"line":18724},[67,57393,13021],{"class":84},[67,57395,8641],{"class":77},[67,57397,671],{"class":84},[67,57399,56157],{"class":73},[67,57401,56160],{"class":110},[67,57403,854],{"class":73},[67,57405,57406],{"class":114},"'.slider-footer p'",[67,57408,829],{"class":73},[67,57410,57411,57413,57416,57418,57420,57422,57424,57427],{"class":69,"line":18729},[67,57412,13021],{"class":84},[67,57414,57415],{"class":77}," color",[67,57417,671],{"class":84},[67,57419,56157],{"class":73},[67,57421,56160],{"class":110},[67,57423,854],{"class":73},[67,57425,57426],{"class":114},"'.slider-footer'",[67,57428,829],{"class":73},[67,57430,57431,57433,57436,57438,57440,57443,57445,57448],{"class":69,"line":34402},[67,57432,13021],{"class":84},[67,57434,57435],{"class":77}," lis",[67,57437,671],{"class":84},[67,57439,56157],{"class":73},[67,57441,57442],{"class":110},"querySelectorAll",[67,57444,854],{"class":73},[67,57446,57447],{"class":114},"'.slider-footer ul li'",[67,57449,829],{"class":73},[67,57451,57452,57454,57456,57458],{"class":69,"line":34408},[67,57453,53983],{"class":84},[67,57455,11244],{"class":73},[67,57457,85],{"class":84},[67,57459,57460],{"class":77}," 1\n",[67,57462,57463,57465,57468,57470,57472,57474,57476],{"class":69,"line":34414},[67,57464,53983],{"class":84},[67,57466,57467],{"class":73}," timer ",[67,57469,85],{"class":84},[67,57471,56205],{"class":110},[67,57473,854],{"class":73},[67,57475,56210],{"class":84},[67,57477,56213],{"class":73},[67,57479,57480,57483,57485],{"class":69,"line":34420},[67,57481,57482],{"class":73},"      img.src ",[67,57484,85],{"class":84},[67,57486,57487],{"class":73}," arrImage[i].url\n",[67,57489,57490,57493,57495],{"class":69,"line":34426},[67,57491,57492],{"class":73},"      p.innerHTML ",[67,57494,85],{"class":84},[67,57496,57497],{"class":73}," arrImage[i].title\n",[67,57499,57500,57503,57505],{"class":69,"line":34437},[67,57501,57502],{"class":73},"      color.style.backgroundColor ",[67,57504,85],{"class":84},[67,57506,57507],{"class":73}," arrImage[i].color\n",[67,57509,57510],{"class":69,"line":34443},[67,57511,57512],{"class":2058},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[67,57514,57515],{"class":69,"line":34463},[67,57516,57517],{"class":2058},"      \u002F\u002F li.classList.add('activate')\n",[67,57519,57520],{"class":69,"line":34469},[67,57521,57522],{"class":2058},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[67,57524,57525],{"class":69,"line":34480},[67,57526,57527],{"class":2058},"      \u002F\u002F lis[i].classList.remove('activate')\n",[67,57529,57530,57533,57535,57537,57540,57543,57546,57548,57551],{"class":69,"line":34486},[67,57531,57532],{"class":73},"      document.",[67,57534,56160],{"class":110},[67,57536,854],{"class":73},[67,57538,57539],{"class":114},"'.activate'",[67,57541,57542],{"class":73},")?.classList.",[67,57544,57545],{"class":110},"toggle",[67,57547,854],{"class":73},[67,57549,57550],{"class":114},"'activate'",[67,57552,829],{"class":73},[67,57554,57555,57558,57560,57562,57564],{"class":69,"line":34492},[67,57556,57557],{"class":73},"      lis[i].classList.",[67,57559,7151],{"class":110},[67,57561,854],{"class":73},[67,57563,57550],{"class":114},[67,57565,829],{"class":73},[67,57567,57568],{"class":69,"line":34498},[67,57569,631],{"emptyLinePlaceholder":630},[67,57571,57572,57575,57577,57579,57581,57583,57585,57587,57590],{"class":69,"line":34504},[67,57573,57574],{"class":73},"      i ",[67,57576,85],{"class":84},[67,57578,56244],{"class":73},[67,57580,2471],{"class":84},[67,57582,906],{"class":77},[67,57584,15512],{"class":73},[67,57586,2319],{"class":84},[67,57588,57589],{"class":73}," arrImage.",[67,57591,57592],{"class":77},"length\n",[67,57594,57595],{"class":69,"line":34510},[67,57596,631],{"emptyLinePlaceholder":630},[67,57598,57599,57601,57603],{"class":69,"line":34516},[67,57600,56296],{"class":73},[67,57602,8227],{"class":77},[67,57604,829],{"class":73},[67,57606,57607,57609,57611],{"class":69,"line":34522},[67,57608,54181],{"class":73},[67,57610,53578],{"class":262},[67,57612,323],{"class":73},[67,57614,57615,57617,57619],{"class":69,"line":34542},[67,57616,376],{"class":73},[67,57618,53565],{"class":262},[67,57620,323],{"class":73},[67,57622,57623],{"class":69,"line":34548},[67,57624,631],{"emptyLinePlaceholder":630},[67,57626,57627,57629,57631],{"class":69,"line":34564},[67,57628,376],{"class":73},[67,57630,52403],{"class":262},[67,57632,323],{"class":73},[19,57634,57635],{},[3317,57636],{"alt":63,"src":57637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57639,57640],{},"?.就是短路保护,确保输出正常进行",[19,57642,57643],{},"不要忘记取余%,有时候可以用",[19,57645,57646],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[26,57648,57649],{"start":191},[29,57650,57651],{},"法2",[58,57653,57655],{"className":52401,"code":57654,"language":52403,"meta":63,"style":63},"\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",[32,57656,57657,57667,57681,57685,57693,57707,57727,57739,57747,57753,57763,57773,57777,57781,57787,57797,57801,57805,57811,57821,57833,57845,57859,57863,57867,57873,57883,57893,57903,57915,57927,57937,57941,57945,57953,57963,57975,57987,57999,58003,58007,58013,58023,58035,58047,58057,58067,58077,58089,58101,58105,58109,58117,58129,58141,58167,58179,58183,58187,58193,58203,58207,58215,58223,58227,58235,58249,58263,58283,58291,58305,58317,58325,58343,58355,58367,58379,58391,58403,58415,58427,58435,58443,58451,58459,58470,58486,58502,58518,58534,58550,58566,58582,58598,58602,58607,58625,58643,58653,58658,58663,58674,58680,58695,58704,58708,58713,58722,58727,58736,58741,58746,58751,58774,58804,58808,58816,58820,58828,58836,58840],{"__ignoreMap":63},[67,57658,57659,57661,57663,57665],{"class":69,"line":70},[67,57660,53065],{"class":73},[67,57662,53068],{"class":262},[67,57664,53071],{"class":110},[67,57666,323],{"class":73},[67,57668,57669,57671,57673,57675,57677,57679],{"class":69,"line":191},[67,57670,259],{"class":73},[67,57672,52403],{"class":262},[67,57674,53082],{"class":110},[67,57676,85],{"class":73},[67,57678,53087],{"class":114},[67,57680,323],{"class":73},[67,57682,57683],{"class":69,"line":202},[67,57684,631],{"emptyLinePlaceholder":630},[67,57686,57687,57689,57691],{"class":69,"line":641},[67,57688,259],{"class":73},[67,57690,53100],{"class":262},[67,57692,323],{"class":73},[67,57694,57695,57697,57699,57701,57703,57705],{"class":69,"line":655},[67,57696,328],{"class":73},[67,57698,53110],{"class":262},[67,57700,53113],{"class":110},[67,57702,85],{"class":73},[67,57704,53118],{"class":114},[67,57706,323],{"class":73},[67,57708,57709,57711,57713,57715,57717,57719,57721,57723,57725],{"class":69,"line":660},[67,57710,328],{"class":73},[67,57712,53110],{"class":262},[67,57714,266],{"class":110},[67,57716,85],{"class":73},[67,57718,53157],{"class":114},[67,57720,53137],{"class":110},[67,57722,85],{"class":73},[67,57724,53164],{"class":114},[67,57726,323],{"class":73},[67,57728,57729,57731,57733,57735,57737],{"class":69,"line":665},[67,57730,328],{"class":73},[67,57732,53173],{"class":262},[67,57734,53176],{"class":73},[67,57736,53173],{"class":262},[67,57738,323],{"class":73},[67,57740,57741,57743,57745],{"class":69,"line":677},[67,57742,328],{"class":73},[67,57744,1903],{"class":262},[67,57746,323],{"class":73},[67,57748,57749,57751],{"class":69,"line":683},[67,57750,8220],{"class":262},[67,57752,17369],{"class":73},[67,57754,57755,57757,57759,57761],{"class":69,"line":689},[67,57756,56456],{"class":77},[67,57758,53203],{"class":73},[67,57760,78],{"class":77},[67,57762,3148],{"class":73},[67,57764,57765,57767,57769,57771],{"class":69,"line":694},[67,57766,56467],{"class":77},[67,57768,53203],{"class":73},[67,57770,78],{"class":77},[67,57772,3148],{"class":73},[67,57774,57775],{"class":69,"line":700},[67,57776,4020],{"class":73},[67,57778,57779],{"class":69,"line":706},[67,57780,631],{"emptyLinePlaceholder":630},[67,57782,57783,57785],{"class":69,"line":712},[67,57784,56486],{"class":262},[67,57786,17369],{"class":73},[67,57788,57789,57791,57793,57795],{"class":69,"line":717},[67,57790,56493],{"class":77},[67,57792,53203],{"class":73},[67,57794,56498],{"class":77},[67,57796,3148],{"class":73},[67,57798,57799],{"class":69,"line":723},[67,57800,4020],{"class":73},[67,57802,57803],{"class":69,"line":729},[67,57804,631],{"emptyLinePlaceholder":630},[67,57806,57807,57809],{"class":69,"line":735},[67,57808,56513],{"class":110},[67,57810,17369],{"class":73},[67,57812,57813,57815,57817,57819],{"class":69,"line":741},[67,57814,56520],{"class":77},[67,57816,53203],{"class":73},[67,57818,56525],{"class":77},[67,57820,3148],{"class":73},[67,57822,57823,57825,57827,57829,57831],{"class":69,"line":747},[67,57824,56532],{"class":77},[67,57826,53203],{"class":73},[67,57828,56537],{"class":77},[67,57830,53258],{"class":84},[67,57832,3148],{"class":73},[67,57834,57835,57837,57839,57841,57843],{"class":69,"line":753},[67,57836,56546],{"class":77},[67,57838,53203],{"class":73},[67,57840,3393],{"class":77},[67,57842,53258],{"class":84},[67,57844,3148],{"class":73},[67,57846,57847,57849,57851,57853,57855,57857],{"class":69,"line":758},[67,57848,56467],{"class":77},[67,57850,53203],{"class":73},[67,57852,2302],{"class":77},[67,57854,53258],{"class":84},[67,57856,53322],{"class":77},[67,57858,3148],{"class":73},[67,57860,57861],{"class":69,"line":764},[67,57862,4020],{"class":73},[67,57864,57865],{"class":69,"line":770},[67,57866,631],{"emptyLinePlaceholder":630},[67,57868,57869,57871],{"class":69,"line":776},[67,57870,56581],{"class":110},[67,57872,17369],{"class":73},[67,57874,57875,57877,57879,57881],{"class":69,"line":782},[67,57876,56520],{"class":77},[67,57878,53203],{"class":73},[67,57880,56592],{"class":77},[67,57882,3148],{"class":73},[67,57884,57885,57887,57889,57891],{"class":69,"line":788},[67,57886,56599],{"class":77},[67,57888,53203],{"class":73},[67,57890,78],{"class":77},[67,57892,3148],{"class":73},[67,57894,57895,57897,57899,57901],{"class":69,"line":793},[67,57896,56610],{"class":77},[67,57898,53203],{"class":73},[67,57900,78],{"class":77},[67,57902,3148],{"class":73},[67,57904,57905,57907,57909,57911,57913],{"class":69,"line":798},[67,57906,56532],{"class":77},[67,57908,53203],{"class":73},[67,57910,2302],{"class":77},[67,57912,2319],{"class":84},[67,57914,3148],{"class":73},[67,57916,57917,57919,57921,57923,57925],{"class":69,"line":816},[67,57918,56546],{"class":77},[67,57920,53203],{"class":73},[67,57922,2564],{"class":77},[67,57924,2319],{"class":84},[67,57926,3148],{"class":73},[67,57928,57929,57931,57933,57935],{"class":69,"line":832},[67,57930,56645],{"class":77},[67,57932,53203],{"class":73},[67,57934,56650],{"class":77},[67,57936,3148],{"class":73},[67,57938,57939],{"class":69,"line":843},[67,57940,4020],{"class":73},[67,57942,57943],{"class":69,"line":848},[67,57944,631],{"emptyLinePlaceholder":630},[67,57946,57947,57949,57951],{"class":69,"line":863},[67,57948,56581],{"class":110},[67,57950,8641],{"class":262},[67,57952,17369],{"class":73},[67,57954,57955,57957,57959,57961],{"class":69,"line":876},[67,57956,56520],{"class":77},[67,57958,53203],{"class":73},[67,57960,56592],{"class":77},[67,57962,3148],{"class":73},[67,57964,57965,57967,57969,57971,57973],{"class":69,"line":889},[67,57966,56683],{"class":77},[67,57968,53203],{"class":73},[67,57970,2890],{"class":77},[67,57972,53258],{"class":84},[67,57974,3148],{"class":73},[67,57976,57977,57979,57981,57983,57985],{"class":69,"line":894},[67,57978,56599],{"class":77},[67,57980,53203],{"class":73},[67,57982,2689],{"class":77},[67,57984,53258],{"class":84},[67,57986,3148],{"class":73},[67,57988,57989,57991,57993,57995,57997],{"class":69,"line":911},[67,57990,56708],{"class":77},[67,57992,53203],{"class":73},[67,57994,2310],{"class":77},[67,57996,53258],{"class":84},[67,57998,3148],{"class":73},[67,58000,58001],{"class":69,"line":927},[67,58002,4020],{"class":73},[67,58004,58005],{"class":69,"line":932},[67,58006,631],{"emptyLinePlaceholder":630},[67,58008,58009,58011],{"class":69,"line":955},[67,58010,56729],{"class":262},[67,58012,17369],{"class":73},[67,58014,58015,58017,58019,58021],{"class":69,"line":971},[67,58016,56520],{"class":77},[67,58018,53203],{"class":73},[67,58020,56592],{"class":77},[67,58022,3148],{"class":73},[67,58024,58025,58027,58029,58031,58033],{"class":69,"line":1010},[67,58026,56708],{"class":77},[67,58028,53203],{"class":73},[67,58030,2770],{"class":77},[67,58032,53258],{"class":84},[67,58034,3148],{"class":73},[67,58036,58037,58039,58041,58043,58045],{"class":69,"line":1016},[67,58038,56599],{"class":77},[67,58040,53203],{"class":73},[67,58042,2689],{"class":77},[67,58044,53258],{"class":84},[67,58046,3148],{"class":73},[67,58048,58049,58051,58053,58055],{"class":69,"line":1021},[67,58050,56770],{"class":77},[67,58052,53203],{"class":73},[67,58054,53243],{"class":77},[67,58056,3148],{"class":73},[67,58058,58059,58061,58063,58065],{"class":69,"line":1034},[67,58060,56781],{"class":77},[67,58062,53203],{"class":73},[67,58064,53434],{"class":77},[67,58066,3148],{"class":73},[67,58068,58069,58071,58073,58075],{"class":69,"line":1053},[67,58070,56520],{"class":77},[67,58072,53203],{"class":73},[67,58074,56592],{"class":77},[67,58076,3148],{"class":73},[67,58078,58079,58081,58083,58085,58087],{"class":69,"line":1070},[67,58080,56532],{"class":77},[67,58082,53203],{"class":73},[67,58084,5812],{"class":77},[67,58086,53258],{"class":84},[67,58088,3148],{"class":73},[67,58090,58091,58093,58095,58097,58099],{"class":69,"line":1083},[67,58092,56546],{"class":77},[67,58094,53203],{"class":73},[67,58096,2689],{"class":77},[67,58098,53258],{"class":84},[67,58100,3148],{"class":73},[67,58102,58103],{"class":69,"line":1088},[67,58104,4020],{"class":73},[67,58106,58107],{"class":69,"line":1093},[67,58108,631],{"emptyLinePlaceholder":630},[67,58110,58111,58113,58115],{"class":69,"line":1110},[67,58112,56729],{"class":262},[67,58114,56836],{"class":262},[67,58116,17369],{"class":73},[67,58118,58119,58121,58123,58125,58127],{"class":69,"line":11603},[67,58120,56532],{"class":77},[67,58122,53203],{"class":73},[67,58124,2689],{"class":77},[67,58126,53258],{"class":84},[67,58128,3148],{"class":73},[67,58130,58131,58133,58135,58137,58139],{"class":69,"line":11612},[67,58132,56546],{"class":77},[67,58134,53203],{"class":73},[67,58136,2689],{"class":77},[67,58138,53258],{"class":84},[67,58140,3148],{"class":73},[67,58142,58143,58145,58147,58149,58151,58153,58155,58157,58159,58161,58163,58165],{"class":69,"line":11617},[67,58144,56645],{"class":77},[67,58146,53203],{"class":73},[67,58148,56871],{"class":77},[67,58150,854],{"class":73},[67,58152,78],{"class":77},[67,58154,1868],{"class":73},[67,58156,78],{"class":77},[67,58158,1868],{"class":73},[67,58160,78],{"class":77},[67,58162,1868],{"class":73},[67,58164,56888],{"class":77},[67,58166,4544],{"class":73},[67,58168,58169,58171,58173,58175,58177],{"class":69,"line":11623},[67,58170,56895],{"class":77},[67,58172,53203],{"class":73},[67,58174,2437],{"class":77},[67,58176,53258],{"class":84},[67,58178,3148],{"class":73},[67,58180,58181],{"class":69,"line":11644},[67,58182,4020],{"class":73},[67,58184,58185],{"class":69,"line":11650},[67,58186,631],{"emptyLinePlaceholder":630},[67,58188,58189,58191],{"class":69,"line":11664},[67,58190,56916],{"class":110},[67,58192,17369],{"class":73},[67,58194,58195,58197,58199,58201],{"class":69,"line":11670},[67,58196,56645],{"class":77},[67,58198,53203],{"class":73},[67,58200,56927],{"class":77},[67,58202,3148],{"class":73},[67,58204,58205],{"class":69,"line":11697},[67,58206,4020],{"class":73},[67,58208,58209,58211,58213],{"class":69,"line":11706},[67,58210,54181],{"class":73},[67,58212,1903],{"class":262},[67,58214,323],{"class":73},[67,58216,58217,58219,58221],{"class":69,"line":11712},[67,58218,376],{"class":73},[67,58220,53100],{"class":262},[67,58222,323],{"class":73},[67,58224,58225],{"class":69,"line":11720},[67,58226,631],{"emptyLinePlaceholder":630},[67,58228,58229,58231,58233],{"class":69,"line":11725},[67,58230,259],{"class":73},[67,58232,53565],{"class":262},[67,58234,323],{"class":73},[67,58236,58237,58239,58241,58243,58245,58247],{"class":69,"line":18401},[67,58238,328],{"class":73},[67,58240,53377],{"class":262},[67,58242,55248],{"class":110},[67,58244,85],{"class":73},[67,58246,55253],{"class":114},[67,58248,323],{"class":73},[67,58250,58251,58253,58255,58257,58259,58261],{"class":69,"line":18407},[67,58252,53107],{"class":73},[67,58254,53377],{"class":262},[67,58256,55248],{"class":110},[67,58258,85],{"class":73},[67,58260,56988],{"class":114},[67,58262,323],{"class":73},[67,58264,58265,58267,58269,58271,58273,58275,58277,58279,58281],{"class":69,"line":18430},[67,58266,56995],{"class":73},[67,58268,3317],{"class":262},[67,58270,57000],{"class":110},[67,58272,85],{"class":73},[67,58274,57005],{"class":114},[67,58276,57008],{"class":110},[67,58278,85],{"class":73},[67,58280,9468],{"class":114},[67,58282,323],{"class":73},[67,58284,58285,58287,58289],{"class":69,"line":18436},[67,58286,53542],{"class":73},[67,58288,53377],{"class":262},[67,58290,323],{"class":73},[67,58292,58293,58295,58297,58299,58301,58303],{"class":69,"line":18459},[67,58294,53107],{"class":73},[67,58296,53377],{"class":262},[67,58298,55248],{"class":110},[67,58300,85],{"class":73},[67,58302,57035],{"class":114},[67,58304,323],{"class":73},[67,58306,58307,58309,58311,58313,58315],{"class":69,"line":18473},[67,58308,56995],{"class":73},[67,58310,19],{"class":262},[67,58312,57046],{"class":73},[67,58314,19],{"class":262},[67,58316,323],{"class":73},[67,58318,58319,58321,58323],{"class":69,"line":18493},[67,58320,56995],{"class":73},[67,58322,2994],{"class":262},[67,58324,323],{"class":73},[67,58326,58327,58329,58331,58333,58335,58337,58339,58341],{"class":69,"line":18499},[67,58328,57063],{"class":73},[67,58330,29],{"class":262},[67,58332,55248],{"class":110},[67,58334,85],{"class":73},[67,58336,57072],{"class":114},[67,58338,57075],{"class":73},[67,58340,29],{"class":262},[67,58342,323],{"class":73},[67,58344,58345,58347,58349,58351,58353],{"class":69,"line":18510},[67,58346,57063],{"class":73},[67,58348,29],{"class":262},[67,58350,57075],{"class":73},[67,58352,29],{"class":262},[67,58354,323],{"class":73},[67,58356,58357,58359,58361,58363,58365],{"class":69,"line":18533},[67,58358,57063],{"class":73},[67,58360,29],{"class":262},[67,58362,57075],{"class":73},[67,58364,29],{"class":262},[67,58366,323],{"class":73},[67,58368,58369,58371,58373,58375,58377],{"class":69,"line":18555},[67,58370,57063],{"class":73},[67,58372,29],{"class":262},[67,58374,57075],{"class":73},[67,58376,29],{"class":262},[67,58378,323],{"class":73},[67,58380,58381,58383,58385,58387,58389],{"class":69,"line":18560},[67,58382,57063],{"class":73},[67,58384,29],{"class":262},[67,58386,57075],{"class":73},[67,58388,29],{"class":262},[67,58390,323],{"class":73},[67,58392,58393,58395,58397,58399,58401],{"class":69,"line":18566},[67,58394,57063],{"class":73},[67,58396,29],{"class":262},[67,58398,57075],{"class":73},[67,58400,29],{"class":262},[67,58402,323],{"class":73},[67,58404,58405,58407,58409,58411,58413],{"class":69,"line":18580},[67,58406,57063],{"class":73},[67,58408,29],{"class":262},[67,58410,57075],{"class":73},[67,58412,29],{"class":262},[67,58414,323],{"class":73},[67,58416,58417,58419,58421,58423,58425],{"class":69,"line":18593},[67,58418,57063],{"class":73},[67,58420,29],{"class":262},[67,58422,57075],{"class":73},[67,58424,29],{"class":262},[67,58426,323],{"class":73},[67,58428,58429,58431,58433],{"class":69,"line":18598},[67,58430,57168],{"class":73},[67,58432,2994],{"class":262},[67,58434,323],{"class":73},[67,58436,58437,58439,58441],{"class":69,"line":18612},[67,58438,53542],{"class":73},[67,58440,53377],{"class":262},[67,58442,323],{"class":73},[67,58444,58445,58447,58449],{"class":69,"line":18617},[67,58446,54181],{"class":73},[67,58448,53377],{"class":262},[67,58450,323],{"class":73},[67,58452,58453,58455,58457],{"class":69,"line":18623},[67,58454,328],{"class":73},[67,58456,53578],{"class":262},[67,58458,323],{"class":73},[67,58460,58461,58463,58466,58468],{"class":69,"line":18628},[67,58462,13021],{"class":84},[67,58464,58465],{"class":77}," sliderData",[67,58467,671],{"class":84},[67,58469,57208],{"class":73},[67,58471,58472,58474,58476,58478,58480,58482,58484],{"class":69,"line":18642},[67,58473,57213],{"class":73},[67,58475,57216],{"class":114},[67,58477,57219],{"class":73},[67,58479,57222],{"class":114},[67,58481,57225],{"class":73},[67,58483,57228],{"class":114},[67,58485,57231],{"class":73},[67,58487,58488,58490,58492,58494,58496,58498,58500],{"class":69,"line":18647},[67,58489,57213],{"class":73},[67,58491,57238],{"class":114},[67,58493,57219],{"class":73},[67,58495,57243],{"class":114},[67,58497,57225],{"class":73},[67,58499,57248],{"class":114},[67,58501,57231],{"class":73},[67,58503,58504,58506,58508,58510,58512,58514,58516],{"class":69,"line":18652},[67,58505,57213],{"class":73},[67,58507,57257],{"class":114},[67,58509,57219],{"class":73},[67,58511,57262],{"class":114},[67,58513,57225],{"class":73},[67,58515,57267],{"class":114},[67,58517,57231],{"class":73},[67,58519,58520,58522,58524,58526,58528,58530,58532],{"class":69,"line":18666},[67,58521,57213],{"class":73},[67,58523,57276],{"class":114},[67,58525,57219],{"class":73},[67,58527,57281],{"class":114},[67,58529,57225],{"class":73},[67,58531,57286],{"class":114},[67,58533,57231],{"class":73},[67,58535,58536,58538,58540,58542,58544,58546,58548],{"class":69,"line":18678},[67,58537,57213],{"class":73},[67,58539,57295],{"class":114},[67,58541,57219],{"class":73},[67,58543,57300],{"class":114},[67,58545,57225],{"class":73},[67,58547,57305],{"class":114},[67,58549,57231],{"class":73},[67,58551,58552,58554,58556,58558,58560,58562,58564],{"class":69,"line":18683},[67,58553,57213],{"class":73},[67,58555,57314],{"class":114},[67,58557,57219],{"class":73},[67,58559,57319],{"class":114},[67,58561,57225],{"class":73},[67,58563,57324],{"class":114},[67,58565,57231],{"class":73},[67,58567,58568,58570,58572,58574,58576,58578,58580],{"class":69,"line":18696},[67,58569,57213],{"class":73},[67,58571,57333],{"class":114},[67,58573,57219],{"class":73},[67,58575,57338],{"class":114},[67,58577,57225],{"class":73},[67,58579,57343],{"class":114},[67,58581,57231],{"class":73},[67,58583,58584,58586,58588,58590,58592,58594,58596],{"class":69,"line":18701},[67,58585,57213],{"class":73},[67,58587,57352],{"class":114},[67,58589,57219],{"class":73},[67,58591,57357],{"class":114},[67,58593,57225],{"class":73},[67,58595,57362],{"class":114},[67,58597,57365],{"class":73},[67,58599,58600],{"class":69,"line":18706},[67,58601,54871],{"class":73},[67,58603,58604],{"class":69,"line":18711},[67,58605,58606],{"class":2058},"    \u002F\u002F 1.获取元素\n",[67,58608,58609,58611,58613,58615,58617,58619,58621,58623],{"class":69,"line":18724},[67,58610,13021],{"class":84},[67,58612,57376],{"class":77},[67,58614,671],{"class":84},[67,58616,56157],{"class":73},[67,58618,56160],{"class":110},[67,58620,854],{"class":73},[67,58622,57387],{"class":114},[67,58624,829],{"class":73},[67,58626,58627,58629,58631,58633,58635,58637,58639,58641],{"class":69,"line":18729},[67,58628,13021],{"class":84},[67,58630,8641],{"class":77},[67,58632,671],{"class":84},[67,58634,56157],{"class":73},[67,58636,56160],{"class":110},[67,58638,854],{"class":73},[67,58640,57406],{"class":114},[67,58642,829],{"class":73},[67,58644,58645,58647,58649,58651],{"class":69,"line":34402},[67,58646,53983],{"class":84},[67,58648,11244],{"class":73},[67,58650,85],{"class":84},[67,58652,49101],{"class":77},[67,58654,58655],{"class":69,"line":34408},[67,58656,58657],{"class":2058},"    \u002F\u002F 2.开启定时器\n",[67,58659,58660],{"class":69,"line":34414},[67,58661,58662],{"class":2058},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[67,58664,58665,58668,58670,58672],{"class":69,"line":34420},[67,58666,58667],{"class":110},"    setInterval",[67,58669,854],{"class":73},[67,58671,56210],{"class":84},[67,58673,56213],{"class":73},[67,58675,58676,58678],{"class":69,"line":34426},[67,58677,56218],{"class":73},[67,58679,4527],{"class":84},[67,58681,58682,58684,58686,58688,58691,58693],{"class":69,"line":34437},[67,58683,56241],{"class":84},[67,58685,56244],{"class":73},[67,58687,3553],{"class":84},[67,58689,58690],{"class":73}," sliderData.",[67,58692,53733],{"class":77},[67,58694,14241],{"class":73},[67,58696,58697,58700,58702],{"class":69,"line":34443},[67,58698,58699],{"class":73},"        i ",[67,58701,85],{"class":84},[67,58703,49101],{"class":77},[67,58705,58706],{"class":69,"line":34463},[67,58707,54162],{"class":73},[67,58709,58710],{"class":69,"line":34469},[67,58711,58712],{"class":2058},"      \u002F\u002F 更换图片路径\n",[67,58714,58715,58717,58719],{"class":69,"line":34480},[67,58716,57482],{"class":73},[67,58718,85],{"class":84},[67,58720,58721],{"class":73}," sliderData[i].url\n",[67,58723,58724],{"class":69,"line":34486},[67,58725,58726],{"class":2058},"      \u002F\u002F 把文字写到p里面\n",[67,58728,58729,58731,58733],{"class":69,"line":34492},[67,58730,57492],{"class":73},[67,58732,85],{"class":84},[67,58734,58735],{"class":73}," sliderData[i].title\n",[67,58737,58738],{"class":69,"line":34498},[67,58739,58740],{"class":2058},"      \u002F\u002F 小圆点\n",[67,58742,58743],{"class":69,"line":34504},[67,58744,58745],{"class":2058},"      \u002F\u002F 先删除以前的active\n",[67,58747,58748],{"class":69,"line":34510},[67,58749,58750],{"class":2058},"      \u002F\u002F 只让当前li添加active\n",[67,58752,58753,58755,58757,58759,58762,58765,58768,58770,58772],{"class":69,"line":34516},[67,58754,57532],{"class":73},[67,58756,56160],{"class":110},[67,58758,854],{"class":73},[67,58760,58761],{"class":114},"'.slider-footer .activate'",[67,58763,58764],{"class":73},").classList.",[67,58766,58767],{"class":110},"remove",[67,58769,854],{"class":73},[67,58771,57550],{"class":114},[67,58773,829],{"class":73},[67,58775,58776,58778,58780,58782,58785,58787,58789,58791,58794,58796,58798,58800,58802],{"class":69,"line":34522},[67,58777,57532],{"class":73},[67,58779,56160],{"class":110},[67,58781,854],{"class":73},[67,58783,58784],{"class":114},"`.slider-footer ul li:nth-child(${",[67,58786,2432],{"class":73},[67,58788,47334],{"class":84},[67,58790,906],{"class":77},[67,58792,58793],{"class":114},"})`",[67,58795,58764],{"class":73},[67,58797,7151],{"class":110},[67,58799,854],{"class":73},[67,58801,57550],{"class":114},[67,58803,829],{"class":73},[67,58805,58806],{"class":69,"line":34542},[67,58807,631],{"emptyLinePlaceholder":630},[67,58809,58810,58812,58814],{"class":69,"line":34548},[67,58811,56296],{"class":73},[67,58813,8227],{"class":77},[67,58815,829],{"class":73},[67,58817,58818],{"class":69,"line":34564},[67,58819,631],{"emptyLinePlaceholder":630},[67,58821,58822,58824,58826],{"class":69,"line":34570},[67,58823,54181],{"class":73},[67,58825,53578],{"class":262},[67,58827,323],{"class":73},[67,58829,58830,58832,58834],{"class":69,"line":34584},[67,58831,376],{"class":73},[67,58833,53565],{"class":262},[67,58835,323],{"class":73},[67,58837,58838],{"class":69,"line":34590},[67,58839,631],{"emptyLinePlaceholder":630},[67,58841,58842,58844,58846],{"class":69,"line":34605},[67,58843,376],{"class":73},[67,58845,52403],{"class":262},[67,58847,323],{"class":73},[391,58849,58851],{"id":58850},"_317-重要知识点","3.1.7 重要知识点",[19,58853,58854,58855],{},"浏览器在渲染文本时， ",[2144,58856,58857],{},"没有空格或换行符就没有“断行点”",[19,58859,58860],{},[3317,58861],{"alt":63,"src":58862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58864,58865],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58867,58868],{},[3317,58869],{"alt":63,"src":58870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58872,58873],{},[3317,58874],{"alt":63,"src":58875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58877,58879],{"id":58878},"_32-dom事件基础","3.2 DOM事件基础",[391,58881,58883],{"id":58882},"_321-事件监听","3.2.1 事件监听",[19,58885,58886],{},[3317,58887],{"alt":63,"src":58888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58890,58891],{},"事件监听有响应的发生",[19,58893,58894],{},[3317,58895],{"alt":63,"src":58896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58898,58899],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58901,58902],{},"对于有名函数,要执行的函数名后边不要加()",[391,58904,58906],{"id":58905},"_322-随机点名案例","3.2.2 随机点名案例",[58,58908,58910],{"className":52401,"code":58909,"language":52403,"meta":63,"style":63},"\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",[32,58911,58912,58922,58936,58940,58948,58962,58982,58994,59002,59008,59018,59028,59032,59036,59043,59054,59058,59062,59068,59080,59094,59104,59116,59129,59133,59137,59144,59148,59161,59173,59185,59189,59193,59197,59204,59214,59218,59222,59231,59243,59255,59270,59274,59282,59290,59294,59302,59315,59329,59342,59362,59370,59385,59405,59425,59433,59437,59445,59450,59486,59506,59511,59530,59535,59546,59551,59562,59567,59586,59601,59606,59632,59642,59651,59656,59672,59677,59682,59687,59702,59706,59710,59715,59734,59751,59759,59764,59779,59783,59787,59795,59803,59807],{"__ignoreMap":63},[67,58913,58914,58916,58918,58920],{"class":69,"line":70},[67,58915,53065],{"class":73},[67,58917,53068],{"class":262},[67,58919,53071],{"class":110},[67,58921,323],{"class":73},[67,58923,58924,58926,58928,58930,58932,58934],{"class":69,"line":191},[67,58925,259],{"class":73},[67,58927,52403],{"class":262},[67,58929,53082],{"class":110},[67,58931,85],{"class":73},[67,58933,53087],{"class":114},[67,58935,323],{"class":73},[67,58937,58938],{"class":69,"line":202},[67,58939,631],{"emptyLinePlaceholder":630},[67,58941,58942,58944,58946],{"class":69,"line":641},[67,58943,259],{"class":73},[67,58945,53100],{"class":262},[67,58947,323],{"class":73},[67,58949,58950,58952,58954,58956,58958,58960],{"class":69,"line":655},[67,58951,328],{"class":73},[67,58953,53110],{"class":262},[67,58955,53113],{"class":110},[67,58957,85],{"class":73},[67,58959,53118],{"class":114},[67,58961,323],{"class":73},[67,58963,58964,58966,58968,58970,58972,58974,58976,58978,58980],{"class":69,"line":660},[67,58965,328],{"class":73},[67,58967,53110],{"class":262},[67,58969,266],{"class":110},[67,58971,85],{"class":73},[67,58973,53157],{"class":114},[67,58975,53137],{"class":110},[67,58977,85],{"class":73},[67,58979,53164],{"class":114},[67,58981,323],{"class":73},[67,58983,58984,58986,58988,58990,58992],{"class":69,"line":665},[67,58985,328],{"class":73},[67,58987,53173],{"class":262},[67,58989,53176],{"class":73},[67,58991,53173],{"class":262},[67,58993,323],{"class":73},[67,58995,58996,58998,59000],{"class":69,"line":677},[67,58997,328],{"class":73},[67,58999,1903],{"class":262},[67,59001,323],{"class":73},[67,59003,59004,59006],{"class":69,"line":683},[67,59005,8220],{"class":262},[67,59007,17369],{"class":73},[67,59009,59010,59012,59014,59016],{"class":69,"line":689},[67,59011,56467],{"class":77},[67,59013,53203],{"class":73},[67,59015,78],{"class":77},[67,59017,3148],{"class":73},[67,59019,59020,59022,59024,59026],{"class":69,"line":694},[67,59021,56456],{"class":77},[67,59023,53203],{"class":73},[67,59025,78],{"class":77},[67,59027,3148],{"class":73},[67,59029,59030],{"class":69,"line":700},[67,59031,4020],{"class":73},[67,59033,59034],{"class":69,"line":706},[67,59035,631],{"emptyLinePlaceholder":630},[67,59037,59038,59041],{"class":69,"line":712},[67,59039,59040],{"class":262},"    h2",[67,59042,17369],{"class":73},[67,59044,59045,59048,59050,59052],{"class":69,"line":717},[67,59046,59047],{"class":77},"      text-align",[67,59049,53203],{"class":73},[67,59051,53358],{"class":77},[67,59053,3148],{"class":73},[67,59055,59056],{"class":69,"line":723},[67,59057,4020],{"class":73},[67,59059,59060],{"class":69,"line":729},[67,59061,631],{"emptyLinePlaceholder":630},[67,59063,59064,59066],{"class":69,"line":735},[67,59065,56513],{"class":110},[67,59067,17369],{"class":73},[67,59069,59070,59072,59074,59076,59078],{"class":69,"line":741},[67,59071,56532],{"class":77},[67,59073,53203],{"class":73},[67,59075,3393],{"class":77},[67,59077,53258],{"class":84},[67,59079,3148],{"class":73},[67,59081,59082,59084,59086,59088,59090,59092],{"class":69,"line":747},[67,59083,56467],{"class":77},[67,59085,53203],{"class":73},[67,59087,2645],{"class":77},[67,59089,53258],{"class":84},[67,59091,53322],{"class":77},[67,59093,3148],{"class":73},[67,59095,59096,59098,59100,59102],{"class":69,"line":753},[67,59097,56770],{"class":77},[67,59099,53203],{"class":73},[67,59101,53243],{"class":77},[67,59103,3148],{"class":73},[67,59105,59106,59108,59110,59112,59114],{"class":69,"line":758},[67,59107,56683],{"class":77},[67,59109,53203],{"class":73},[67,59111,2814],{"class":77},[67,59113,53258],{"class":84},[67,59115,3148],{"class":73},[67,59117,59118,59121,59123,59125,59127],{"class":69,"line":764},[67,59119,59120],{"class":77},"      line-height",[67,59122,53203],{"class":73},[67,59124,2392],{"class":77},[67,59126,53258],{"class":84},[67,59128,3148],{"class":73},[67,59130,59131],{"class":69,"line":770},[67,59132,4020],{"class":73},[67,59134,59135],{"class":69,"line":776},[67,59136,631],{"emptyLinePlaceholder":630},[67,59138,59139,59142],{"class":69,"line":782},[67,59140,59141],{"class":110},"    .qs",[67,59143,17369],{"class":73},[67,59145,59146],{"class":69,"line":788},[67,59147,631],{"emptyLinePlaceholder":630},[67,59149,59150,59152,59154,59157,59159],{"class":69,"line":793},[67,59151,56532],{"class":77},[67,59153,53203],{"class":73},[67,59155,59156],{"class":77},"450",[67,59158,53258],{"class":84},[67,59160,3148],{"class":73},[67,59162,59163,59165,59167,59169,59171],{"class":69,"line":798},[67,59164,56546],{"class":77},[67,59166,53203],{"class":73},[67,59168,2392],{"class":77},[67,59170,53258],{"class":84},[67,59172,3148],{"class":73},[67,59174,59175,59178,59180,59183],{"class":69,"line":816},[67,59176,59177],{"class":77},"      color",[67,59179,53203],{"class":73},[67,59181,59182],{"class":77},"red",[67,59184,3148],{"class":73},[67,59186,59187],{"class":69,"line":832},[67,59188,631],{"emptyLinePlaceholder":630},[67,59190,59191],{"class":69,"line":843},[67,59192,4020],{"class":73},[67,59194,59195],{"class":69,"line":848},[67,59196,631],{"emptyLinePlaceholder":630},[67,59198,59199,59202],{"class":69,"line":863},[67,59200,59201],{"class":110},"    .btns",[67,59203,17369],{"class":73},[67,59205,59206,59208,59210,59212],{"class":69,"line":876},[67,59207,59047],{"class":77},[67,59209,53203],{"class":73},[67,59211,53358],{"class":77},[67,59213,3148],{"class":73},[67,59215,59216],{"class":69,"line":889},[67,59217,4020],{"class":73},[67,59219,59220],{"class":69,"line":894},[67,59221,631],{"emptyLinePlaceholder":630},[67,59223,59224,59226,59229],{"class":69,"line":911},[67,59225,59201],{"class":110},[67,59227,59228],{"class":262}," button",[67,59230,17369],{"class":73},[67,59232,59233,59235,59237,59239,59241],{"class":69,"line":927},[67,59234,56532],{"class":77},[67,59236,53203],{"class":73},[67,59238,2806],{"class":77},[67,59240,53258],{"class":84},[67,59242,3148],{"class":73},[67,59244,59245,59247,59249,59251,59253],{"class":69,"line":932},[67,59246,56546],{"class":77},[67,59248,53203],{"class":73},[67,59250,2265],{"class":77},[67,59252,53258],{"class":84},[67,59254,3148],{"class":73},[67,59256,59257,59259,59261,59263,59266,59268],{"class":69,"line":955},[67,59258,56467],{"class":77},[67,59260,53203],{"class":73},[67,59262,78],{"class":77},[67,59264,59265],{"class":77}," 50",[67,59267,53258],{"class":84},[67,59269,3148],{"class":73},[67,59271,59272],{"class":69,"line":971},[67,59273,4020],{"class":73},[67,59275,59276,59278,59280],{"class":69,"line":1010},[67,59277,54181],{"class":73},[67,59279,1903],{"class":262},[67,59281,323],{"class":73},[67,59283,59284,59286,59288],{"class":69,"line":1016},[67,59285,376],{"class":73},[67,59287,53100],{"class":262},[67,59289,323],{"class":73},[67,59291,59292],{"class":69,"line":1021},[67,59293,631],{"emptyLinePlaceholder":630},[67,59295,59296,59298,59300],{"class":69,"line":1034},[67,59297,259],{"class":73},[67,59299,53565],{"class":262},[67,59301,323],{"class":73},[67,59303,59304,59306,59308,59311,59313],{"class":69,"line":1053},[67,59305,328],{"class":73},[67,59307,14],{"class":262},[67,59309,59310],{"class":73},">随机点名\u003C\u002F",[67,59312,14],{"class":262},[67,59314,323],{"class":73},[67,59316,59317,59319,59321,59323,59325,59327],{"class":69,"line":1070},[67,59318,328],{"class":73},[67,59320,53377],{"class":262},[67,59322,55248],{"class":110},[67,59324,85],{"class":73},[67,59326,55253],{"class":114},[67,59328,323],{"class":73},[67,59330,59331,59333,59335,59338,59340],{"class":69,"line":1083},[67,59332,53107],{"class":73},[67,59334,67],{"class":262},[67,59336,59337],{"class":73},">名字是：\u003C\u002F",[67,59339,67],{"class":262},[67,59341,323],{"class":73},[67,59343,59344,59346,59348,59350,59352,59355,59358,59360],{"class":69,"line":1088},[67,59345,53107],{"class":73},[67,59347,53377],{"class":262},[67,59349,55248],{"class":110},[67,59351,85],{"class":73},[67,59353,59354],{"class":114},"\"qs\"",[67,59356,59357],{"class":73},">这里显示姓名\u003C\u002F",[67,59359,53377],{"class":262},[67,59361,323],{"class":73},[67,59363,59364,59366,59368],{"class":69,"line":1093},[67,59365,54181],{"class":73},[67,59367,53377],{"class":262},[67,59369,323],{"class":73},[67,59371,59372,59374,59376,59378,59380,59383],{"class":69,"line":1110},[67,59373,328],{"class":73},[67,59375,53377],{"class":262},[67,59377,55248],{"class":110},[67,59379,85],{"class":73},[67,59381,59382],{"class":114},"\"btns\"",[67,59384,323],{"class":73},[67,59386,59387,59389,59391,59393,59395,59398,59401,59403],{"class":69,"line":11603},[67,59388,53107],{"class":73},[67,59390,55648],{"class":262},[67,59392,55248],{"class":110},[67,59394,85],{"class":73},[67,59396,59397],{"class":114},"\"start\"",[67,59399,59400],{"class":73},">开始\u003C\u002F",[67,59402,55648],{"class":262},[67,59404,323],{"class":73},[67,59406,59407,59409,59411,59413,59415,59418,59421,59423],{"class":69,"line":11612},[67,59408,53107],{"class":73},[67,59410,55648],{"class":262},[67,59412,55248],{"class":110},[67,59414,85],{"class":73},[67,59416,59417],{"class":114},"\"end\"",[67,59419,59420],{"class":73},">结束\u003C\u002F",[67,59422,55648],{"class":262},[67,59424,323],{"class":73},[67,59426,59427,59429,59431],{"class":69,"line":11617},[67,59428,54181],{"class":73},[67,59430,53377],{"class":262},[67,59432,323],{"class":73},[67,59434,59435],{"class":69,"line":11623},[67,59436,631],{"emptyLinePlaceholder":630},[67,59438,59439,59441,59443],{"class":69,"line":11644},[67,59440,328],{"class":73},[67,59442,53578],{"class":262},[67,59444,323],{"class":73},[67,59446,59447],{"class":69,"line":11650},[67,59448,59449],{"class":2058},"    \u002F\u002F 数据数组\n",[67,59451,59452,59454,59457,59459,59461,59464,59466,59469,59471,59474,59476,59479,59481,59484],{"class":69,"line":11664},[67,59453,13021],{"class":84},[67,59455,59456],{"class":77}," arr",[67,59458,671],{"class":84},[67,59460,53990],{"class":73},[67,59462,59463],{"class":114},"'马超'",[67,59465,1868],{"class":73},[67,59467,59468],{"class":114},"'黄忠'",[67,59470,1868],{"class":73},[67,59472,59473],{"class":114},"'赵云'",[67,59475,1868],{"class":73},[67,59477,59478],{"class":114},"'关羽'",[67,59480,1868],{"class":73},[67,59482,59483],{"class":114},"'张飞'",[67,59485,35015],{"class":73},[67,59487,59488,59490,59493,59495,59497,59499,59501,59504],{"class":69,"line":11670},[67,59489,13021],{"class":84},[67,59491,59492],{"class":77}," qs",[67,59494,671],{"class":84},[67,59496,56157],{"class":73},[67,59498,56160],{"class":110},[67,59500,854],{"class":73},[67,59502,59503],{"class":114},"'.qs'",[67,59505,829],{"class":73},[67,59507,59508],{"class":69,"line":11697},[67,59509,59510],{"class":2058},"    \u002F\u002F 1.业务1.开始按钮模块\n",[67,59512,59513,59515,59517,59519,59521,59523,59525,59528],{"class":69,"line":11706},[67,59514,13021],{"class":84},[67,59516,6004],{"class":77},[67,59518,671],{"class":84},[67,59520,56157],{"class":73},[67,59522,56160],{"class":110},[67,59524,854],{"class":73},[67,59526,59527],{"class":114},"'.start'",[67,59529,829],{"class":73},[67,59531,59532],{"class":69,"line":11712},[67,59533,59534],{"class":2058},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[67,59536,59537,59539,59542,59544],{"class":69,"line":11720},[67,59538,53983],{"class":84},[67,59540,59541],{"class":73}," timerId ",[67,59543,85],{"class":84},[67,59545,49101],{"class":77},[67,59547,59548],{"class":69,"line":11725},[67,59549,59550],{"class":2058},"    \u002F\u002F 随机号要全局变量\n",[67,59552,59553,59555,59558,59560],{"class":69,"line":18401},[67,59554,53983],{"class":84},[67,59556,59557],{"class":73}," random ",[67,59559,85],{"class":84},[67,59561,49101],{"class":77},[67,59563,59564],{"class":69,"line":18407},[67,59565,59566],{"class":2058},"    \u002F\u002F 1.1 添加点击事件\n",[67,59568,59569,59572,59575,59577,59580,59582,59584],{"class":69,"line":18430},[67,59570,59571],{"class":73},"    start.",[67,59573,59574],{"class":110},"addEventListener",[67,59576,854],{"class":73},[67,59578,59579],{"class":114},"'click'",[67,59581,1868],{"class":73},[67,59583,56210],{"class":84},[67,59585,56213],{"class":73},[67,59587,59588,59591,59593,59595,59597,59599],{"class":69,"line":18436},[67,59589,59590],{"class":73},"      timerId ",[67,59592,85],{"class":84},[67,59594,56205],{"class":110},[67,59596,854],{"class":73},[67,59598,56210],{"class":84},[67,59600,56213],{"class":73},[67,59602,59603],{"class":69,"line":18459},[67,59604,59605],{"class":2058},"        \u002F\u002F 随机数\n",[67,59607,59608,59611,59613,59616,59619,59622,59624,59626,59628,59630],{"class":69,"line":18473},[67,59609,59610],{"class":73},"        random ",[67,59612,85],{"class":84},[67,59614,59615],{"class":110}," parseInt",[67,59617,59618],{"class":73},"(Math.",[67,59620,59621],{"class":110},"random",[67,59623,14849],{"class":73},[67,59625,965],{"class":84},[67,59627,53730],{"class":73},[67,59629,53733],{"class":77},[67,59631,829],{"class":73},[67,59633,59634,59637,59639],{"class":69,"line":18493},[67,59635,59636],{"class":73},"        qs.innerHTML ",[67,59638,85],{"class":84},[67,59640,59641],{"class":73}," arr[random]\n",[67,59643,59644,59647,59649],{"class":69,"line":18499},[67,59645,59646],{"class":73},"      }, ",[67,59648,2265],{"class":77},[67,59650,829],{"class":73},[67,59652,59653],{"class":69,"line":18510},[67,59654,59655],{"class":2058},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[67,59657,59658,59660,59663,59665,59668,59670],{"class":69,"line":18533},[67,59659,56241],{"class":84},[67,59661,59662],{"class":73}," (arr.",[67,59664,53733],{"class":77},[67,59666,59667],{"class":84}," ===",[67,59669,906],{"class":77},[67,59671,14241],{"class":73},[67,59673,59674],{"class":69,"line":18555},[67,59675,59676],{"class":2058},"        \u002F\u002F start.disabled = true\n",[67,59678,59679],{"class":69,"line":18560},[67,59680,59681],{"class":2058},"        \u002F\u002F end.disabled = true\n",[67,59683,59684],{"class":69,"line":18566},[67,59685,59686],{"class":2058},"        \u002F\u002F 可以合起来写\n",[67,59688,59689,59692,59694,59697,59699],{"class":69,"line":18580},[67,59690,59691],{"class":73},"        start.disabled ",[67,59693,85],{"class":84},[67,59695,59696],{"class":73}," end.disabled ",[67,59698,85],{"class":84},[67,59700,59701],{"class":77}," true\n",[67,59703,59704],{"class":69,"line":18593},[67,59705,54162],{"class":73},[67,59707,59708],{"class":69,"line":18598},[67,59709,35230],{"class":73},[67,59711,59712],{"class":69,"line":18612},[67,59713,59714],{"class":2058},"    \u002F\u002F 1.2 关闭按钮模块\n",[67,59716,59717,59719,59721,59723,59725,59727,59729,59732],{"class":69,"line":18617},[67,59718,13021],{"class":84},[67,59720,6020],{"class":77},[67,59722,671],{"class":84},[67,59724,56157],{"class":73},[67,59726,56160],{"class":110},[67,59728,854],{"class":73},[67,59730,59731],{"class":114},"'.end'",[67,59733,829],{"class":73},[67,59735,59736,59739,59741,59743,59745,59747,59749],{"class":69,"line":18623},[67,59737,59738],{"class":73},"    end.",[67,59740,59574],{"class":110},[67,59742,854],{"class":73},[67,59744,59579],{"class":114},[67,59746,1868],{"class":73},[67,59748,56210],{"class":84},[67,59750,56213],{"class":73},[67,59752,59753,59756],{"class":69,"line":18628},[67,59754,59755],{"class":110},"      clearInterval",[67,59757,59758],{"class":73},"(timerId)\n",[67,59760,59761],{"class":69,"line":18642},[67,59762,59763],{"class":2058},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[67,59765,59766,59769,59772,59775,59777],{"class":69,"line":18647},[67,59767,59768],{"class":73},"      arr.",[67,59770,59771],{"class":110},"splice",[67,59773,59774],{"class":73},"(random, ",[67,59776,2209],{"class":77},[67,59778,829],{"class":73},[67,59780,59781],{"class":69,"line":18652},[67,59782,35230],{"class":73},[67,59784,59785],{"class":69,"line":18666},[67,59786,631],{"emptyLinePlaceholder":630},[67,59788,59789,59791,59793],{"class":69,"line":18678},[67,59790,54181],{"class":73},[67,59792,53578],{"class":262},[67,59794,323],{"class":73},[67,59796,59797,59799,59801],{"class":69,"line":18683},[67,59798,376],{"class":73},[67,59800,53565],{"class":262},[67,59802,323],{"class":73},[67,59804,59805],{"class":69,"line":18696},[67,59806,631],{"emptyLinePlaceholder":630},[67,59808,59809,59811,59813],{"class":69,"line":18701},[67,59810,376],{"class":73},[67,59812,52403],{"class":262},[67,59814,323],{"class":73},[19,59816,59817],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[391,59819,59821],{"id":59820},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[58,59823,59825],{"className":52401,"code":59824,"language":52403,"meta":63,"style":63},"\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",[32,59826,59827,59837,59851,59855,59863,59877,59897,59909,59917,59921,59929,59941,59949,59968,59985,60001,60011,60015,60023,60031,60035],{"__ignoreMap":63},[67,59828,59829,59831,59833,59835],{"class":69,"line":70},[67,59830,53065],{"class":73},[67,59832,53068],{"class":262},[67,59834,53071],{"class":110},[67,59836,323],{"class":73},[67,59838,59839,59841,59843,59845,59847,59849],{"class":69,"line":191},[67,59840,259],{"class":73},[67,59842,52403],{"class":262},[67,59844,53082],{"class":110},[67,59846,85],{"class":73},[67,59848,53087],{"class":114},[67,59850,323],{"class":73},[67,59852,59853],{"class":69,"line":202},[67,59854,631],{"emptyLinePlaceholder":630},[67,59856,59857,59859,59861],{"class":69,"line":641},[67,59858,259],{"class":73},[67,59860,53100],{"class":262},[67,59862,323],{"class":73},[67,59864,59865,59867,59869,59871,59873,59875],{"class":69,"line":655},[67,59866,328],{"class":73},[67,59868,53110],{"class":262},[67,59870,53113],{"class":110},[67,59872,85],{"class":73},[67,59874,53118],{"class":114},[67,59876,323],{"class":73},[67,59878,59879,59881,59883,59885,59887,59889,59891,59893,59895],{"class":69,"line":660},[67,59880,328],{"class":73},[67,59882,53110],{"class":262},[67,59884,266],{"class":110},[67,59886,85],{"class":73},[67,59888,53157],{"class":114},[67,59890,53137],{"class":110},[67,59892,85],{"class":73},[67,59894,53164],{"class":114},[67,59896,323],{"class":73},[67,59898,59899,59901,59903,59905,59907],{"class":69,"line":665},[67,59900,328],{"class":73},[67,59902,53173],{"class":262},[67,59904,53176],{"class":73},[67,59906,53173],{"class":262},[67,59908,323],{"class":73},[67,59910,59911,59913,59915],{"class":69,"line":677},[67,59912,376],{"class":73},[67,59914,53100],{"class":262},[67,59916,323],{"class":73},[67,59918,59919],{"class":69,"line":683},[67,59920,631],{"emptyLinePlaceholder":630},[67,59922,59923,59925,59927],{"class":69,"line":689},[67,59924,259],{"class":73},[67,59926,53565],{"class":262},[67,59928,323],{"class":73},[67,59930,59931,59933,59935,59937,59939],{"class":69,"line":694},[67,59932,328],{"class":73},[67,59934,55648],{"class":262},[67,59936,55654],{"class":73},[67,59938,55648],{"class":262},[67,59940,323],{"class":73},[67,59942,59943,59945,59947],{"class":69,"line":700},[67,59944,328],{"class":73},[67,59946,53578],{"class":262},[67,59948,323],{"class":73},[67,59950,59951,59953,59955,59957,59959,59961,59963,59966],{"class":69,"line":706},[67,59952,13021],{"class":84},[67,59954,56152],{"class":77},[67,59956,671],{"class":84},[67,59958,56157],{"class":73},[67,59960,56160],{"class":110},[67,59962,854],{"class":73},[67,59964,59965],{"class":114},"'button'",[67,59967,829],{"class":73},[67,59969,59970,59973,59975,59977,59979,59981,59983],{"class":69,"line":712},[67,59971,59972],{"class":73},"    btn.",[67,59974,59574],{"class":110},[67,59976,854],{"class":73},[67,59978,59579],{"class":114},[67,59980,1868],{"class":73},[67,59982,56210],{"class":84},[67,59984,56213],{"class":73},[67,59986,59987,59990,59992,59994,59997,59999],{"class":69,"line":717},[67,59988,59989],{"class":84},"      const",[67,59991,4073],{"class":77},[67,59993,671],{"class":84},[67,59995,59996],{"class":73}," Math.",[67,59998,59621],{"class":110},[67,60000,3809],{"class":73},[67,60002,60003,60006,60009],{"class":69,"line":723},[67,60004,60005],{"class":73},"      console.",[67,60007,60008],{"class":110},"log",[67,60010,2015],{"class":73},[67,60012,60013],{"class":69,"line":729},[67,60014,35230],{"class":73},[67,60016,60017,60019,60021],{"class":69,"line":735},[67,60018,54181],{"class":73},[67,60020,53578],{"class":262},[67,60022,323],{"class":73},[67,60024,60025,60027,60029],{"class":69,"line":741},[67,60026,376],{"class":73},[67,60028,53565],{"class":262},[67,60030,323],{"class":73},[67,60032,60033],{"class":69,"line":747},[67,60034,631],{"emptyLinePlaceholder":630},[67,60036,60037,60039,60041],{"class":69,"line":753},[67,60038,376],{"class":73},[67,60040,52403],{"class":262},[67,60042,323],{"class":73},[19,60044,60045],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60047,60048],{},"常量不可以重新赋值",[19,60050,60051],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[58,60053,60055],{"className":52401,"code":60054,"language":52403,"meta":63,"style":63},"\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",[32,60056,60057,60067,60081,60085,60093,60107,60127,60139,60147,60151,60159,60171,60179,60190,60208,60224,60238,60246,60250,60258,60266,60270],{"__ignoreMap":63},[67,60058,60059,60061,60063,60065],{"class":69,"line":70},[67,60060,53065],{"class":73},[67,60062,53068],{"class":262},[67,60064,53071],{"class":110},[67,60066,323],{"class":73},[67,60068,60069,60071,60073,60075,60077,60079],{"class":69,"line":191},[67,60070,259],{"class":73},[67,60072,52403],{"class":262},[67,60074,53082],{"class":110},[67,60076,85],{"class":73},[67,60078,53087],{"class":114},[67,60080,323],{"class":73},[67,60082,60083],{"class":69,"line":202},[67,60084,631],{"emptyLinePlaceholder":630},[67,60086,60087,60089,60091],{"class":69,"line":641},[67,60088,259],{"class":73},[67,60090,53100],{"class":262},[67,60092,323],{"class":73},[67,60094,60095,60097,60099,60101,60103,60105],{"class":69,"line":655},[67,60096,328],{"class":73},[67,60098,53110],{"class":262},[67,60100,53113],{"class":110},[67,60102,85],{"class":73},[67,60104,53118],{"class":114},[67,60106,323],{"class":73},[67,60108,60109,60111,60113,60115,60117,60119,60121,60123,60125],{"class":69,"line":660},[67,60110,328],{"class":73},[67,60112,53110],{"class":262},[67,60114,266],{"class":110},[67,60116,85],{"class":73},[67,60118,53157],{"class":114},[67,60120,53137],{"class":110},[67,60122,85],{"class":73},[67,60124,53164],{"class":114},[67,60126,323],{"class":73},[67,60128,60129,60131,60133,60135,60137],{"class":69,"line":665},[67,60130,328],{"class":73},[67,60132,53173],{"class":262},[67,60134,53176],{"class":73},[67,60136,53173],{"class":262},[67,60138,323],{"class":73},[67,60140,60141,60143,60145],{"class":69,"line":677},[67,60142,376],{"class":73},[67,60144,53100],{"class":262},[67,60146,323],{"class":73},[67,60148,60149],{"class":69,"line":683},[67,60150,631],{"emptyLinePlaceholder":630},[67,60152,60153,60155,60157],{"class":69,"line":689},[67,60154,259],{"class":73},[67,60156,53565],{"class":262},[67,60158,323],{"class":73},[67,60160,60161,60163,60165,60167,60169],{"class":69,"line":694},[67,60162,328],{"class":73},[67,60164,55648],{"class":262},[67,60166,55654],{"class":73},[67,60168,55648],{"class":262},[67,60170,323],{"class":73},[67,60172,60173,60175,60177],{"class":69,"line":700},[67,60174,328],{"class":73},[67,60176,53578],{"class":262},[67,60178,323],{"class":73},[67,60180,60181,60183,60185,60187],{"class":69,"line":706},[67,60182,13021],{"class":84},[67,60184,4073],{"class":77},[67,60186,671],{"class":84},[67,60188,60189],{"class":77}," 10\n",[67,60191,60192,60194,60196,60198,60200,60202,60204,60206],{"class":69,"line":712},[67,60193,13021],{"class":84},[67,60195,56152],{"class":77},[67,60197,671],{"class":84},[67,60199,56157],{"class":73},[67,60201,56160],{"class":110},[67,60203,854],{"class":73},[67,60205,59965],{"class":114},[67,60207,829],{"class":73},[67,60209,60210,60212,60214,60216,60218,60220,60222],{"class":69,"line":717},[67,60211,59972],{"class":73},[67,60213,59574],{"class":110},[67,60215,854],{"class":73},[67,60217,59579],{"class":114},[67,60219,1868],{"class":73},[67,60221,56210],{"class":84},[67,60223,56213],{"class":73},[67,60225,60226,60228,60230,60232,60234,60236],{"class":69,"line":723},[67,60227,59989],{"class":84},[67,60229,4073],{"class":77},[67,60231,671],{"class":84},[67,60233,59996],{"class":73},[67,60235,59621],{"class":110},[67,60237,3809],{"class":73},[67,60239,60240,60242,60244],{"class":69,"line":729},[67,60241,60005],{"class":73},[67,60243,60008],{"class":110},[67,60245,2015],{"class":73},[67,60247,60248],{"class":69,"line":735},[67,60249,35230],{"class":73},[67,60251,60252,60254,60256],{"class":69,"line":741},[67,60253,54181],{"class":73},[67,60255,53578],{"class":262},[67,60257,323],{"class":73},[67,60259,60260,60262,60264],{"class":69,"line":747},[67,60261,376],{"class":73},[67,60263,53565],{"class":262},[67,60265,323],{"class":73},[67,60267,60268],{"class":69,"line":753},[67,60269,631],{"emptyLinePlaceholder":630},[67,60271,60272,60274,60276],{"class":69,"line":758},[67,60273,376],{"class":73},[67,60275,52403],{"class":262},[67,60277,323],{"class":73},[19,60279,60280],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[58,60282,60284],{"className":52401,"code":60283,"language":52403,"meta":63,"style":63},"\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",[32,60285,60286,60296,60310,60314,60322,60336,60356,60368,60376,60380,60388,60400,60408,60418,60436,60452,60465,60473,60477,60485,60493,60497],{"__ignoreMap":63},[67,60287,60288,60290,60292,60294],{"class":69,"line":70},[67,60289,53065],{"class":73},[67,60291,53068],{"class":262},[67,60293,53071],{"class":110},[67,60295,323],{"class":73},[67,60297,60298,60300,60302,60304,60306,60308],{"class":69,"line":191},[67,60299,259],{"class":73},[67,60301,52403],{"class":262},[67,60303,53082],{"class":110},[67,60305,85],{"class":73},[67,60307,53087],{"class":114},[67,60309,323],{"class":73},[67,60311,60312],{"class":69,"line":202},[67,60313,631],{"emptyLinePlaceholder":630},[67,60315,60316,60318,60320],{"class":69,"line":641},[67,60317,259],{"class":73},[67,60319,53100],{"class":262},[67,60321,323],{"class":73},[67,60323,60324,60326,60328,60330,60332,60334],{"class":69,"line":655},[67,60325,328],{"class":73},[67,60327,53110],{"class":262},[67,60329,53113],{"class":110},[67,60331,85],{"class":73},[67,60333,53118],{"class":114},[67,60335,323],{"class":73},[67,60337,60338,60340,60342,60344,60346,60348,60350,60352,60354],{"class":69,"line":660},[67,60339,328],{"class":73},[67,60341,53110],{"class":262},[67,60343,266],{"class":110},[67,60345,85],{"class":73},[67,60347,53157],{"class":114},[67,60349,53137],{"class":110},[67,60351,85],{"class":73},[67,60353,53164],{"class":114},[67,60355,323],{"class":73},[67,60357,60358,60360,60362,60364,60366],{"class":69,"line":665},[67,60359,328],{"class":73},[67,60361,53173],{"class":262},[67,60363,53176],{"class":73},[67,60365,53173],{"class":262},[67,60367,323],{"class":73},[67,60369,60370,60372,60374],{"class":69,"line":677},[67,60371,376],{"class":73},[67,60373,53100],{"class":262},[67,60375,323],{"class":73},[67,60377,60378],{"class":69,"line":683},[67,60379,631],{"emptyLinePlaceholder":630},[67,60381,60382,60384,60386],{"class":69,"line":689},[67,60383,259],{"class":73},[67,60385,53565],{"class":262},[67,60387,323],{"class":73},[67,60389,60390,60392,60394,60396,60398],{"class":69,"line":694},[67,60391,328],{"class":73},[67,60393,55648],{"class":262},[67,60395,55654],{"class":73},[67,60397,55648],{"class":262},[67,60399,323],{"class":73},[67,60401,60402,60404,60406],{"class":69,"line":700},[67,60403,328],{"class":73},[67,60405,53578],{"class":262},[67,60407,323],{"class":73},[67,60409,60410,60412,60414,60416],{"class":69,"line":706},[67,60411,13021],{"class":84},[67,60413,4073],{"class":77},[67,60415,671],{"class":84},[67,60417,60189],{"class":77},[67,60419,60420,60422,60424,60426,60428,60430,60432,60434],{"class":69,"line":712},[67,60421,13021],{"class":84},[67,60423,56152],{"class":77},[67,60425,671],{"class":84},[67,60427,56157],{"class":73},[67,60429,56160],{"class":110},[67,60431,854],{"class":73},[67,60433,59965],{"class":114},[67,60435,829],{"class":73},[67,60437,60438,60440,60442,60444,60446,60448,60450],{"class":69,"line":717},[67,60439,59972],{"class":73},[67,60441,59574],{"class":110},[67,60443,854],{"class":73},[67,60445,59579],{"class":114},[67,60447,1868],{"class":73},[67,60449,56210],{"class":84},[67,60451,56213],{"class":73},[67,60453,60454,60457,60459,60461,60463],{"class":69,"line":723},[67,60455,60456],{"class":73},"      num ",[67,60458,85],{"class":84},[67,60460,59996],{"class":73},[67,60462,59621],{"class":110},[67,60464,3809],{"class":73},[67,60466,60467,60469,60471],{"class":69,"line":729},[67,60468,60005],{"class":73},[67,60470,60008],{"class":110},[67,60472,2015],{"class":73},[67,60474,60475],{"class":69,"line":735},[67,60476,35230],{"class":73},[67,60478,60479,60481,60483],{"class":69,"line":741},[67,60480,54181],{"class":73},[67,60482,53578],{"class":262},[67,60484,323],{"class":73},[67,60486,60487,60489,60491],{"class":69,"line":747},[67,60488,376],{"class":73},[67,60490,53565],{"class":262},[67,60492,323],{"class":73},[67,60494,60495],{"class":69,"line":753},[67,60496,631],{"emptyLinePlaceholder":630},[67,60498,60499,60501,60503],{"class":69,"line":758},[67,60500,376],{"class":73},[67,60502,52403],{"class":262},[67,60504,323],{"class":73},[19,60506,60507],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[391,60509,60511],{"id":60510},"_324-事件监听版本","3.2.4 事件监听版本",[19,60513,60514],{},[3317,60515],{"alt":63,"src":60516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60518,60519],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60521,60522],{},"这种方式会覆盖前边的事件监听:",[58,60524,60526],{"className":52401,"code":60525,"language":52403,"meta":63,"style":63},"\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",[32,60527,60528,60538,60552,60556,60564,60578,60598,60610,60618,60622,60630,60642,60650,60668,60682,60693,60697,60709,60719,60723,60731,60739,60743],{"__ignoreMap":63},[67,60529,60530,60532,60534,60536],{"class":69,"line":70},[67,60531,53065],{"class":73},[67,60533,53068],{"class":262},[67,60535,53071],{"class":110},[67,60537,323],{"class":73},[67,60539,60540,60542,60544,60546,60548,60550],{"class":69,"line":191},[67,60541,259],{"class":73},[67,60543,52403],{"class":262},[67,60545,53082],{"class":110},[67,60547,85],{"class":73},[67,60549,53087],{"class":114},[67,60551,323],{"class":73},[67,60553,60554],{"class":69,"line":202},[67,60555,631],{"emptyLinePlaceholder":630},[67,60557,60558,60560,60562],{"class":69,"line":641},[67,60559,259],{"class":73},[67,60561,53100],{"class":262},[67,60563,323],{"class":73},[67,60565,60566,60568,60570,60572,60574,60576],{"class":69,"line":655},[67,60567,328],{"class":73},[67,60569,53110],{"class":262},[67,60571,53113],{"class":110},[67,60573,85],{"class":73},[67,60575,53118],{"class":114},[67,60577,323],{"class":73},[67,60579,60580,60582,60584,60586,60588,60590,60592,60594,60596],{"class":69,"line":660},[67,60581,328],{"class":73},[67,60583,53110],{"class":262},[67,60585,266],{"class":110},[67,60587,85],{"class":73},[67,60589,53157],{"class":114},[67,60591,53137],{"class":110},[67,60593,85],{"class":73},[67,60595,53164],{"class":114},[67,60597,323],{"class":73},[67,60599,60600,60602,60604,60606,60608],{"class":69,"line":665},[67,60601,328],{"class":73},[67,60603,53173],{"class":262},[67,60605,53176],{"class":73},[67,60607,53173],{"class":262},[67,60609,323],{"class":73},[67,60611,60612,60614,60616],{"class":69,"line":677},[67,60613,376],{"class":73},[67,60615,53100],{"class":262},[67,60617,323],{"class":73},[67,60619,60620],{"class":69,"line":683},[67,60621,631],{"emptyLinePlaceholder":630},[67,60623,60624,60626,60628],{"class":69,"line":689},[67,60625,259],{"class":73},[67,60627,53565],{"class":262},[67,60629,323],{"class":73},[67,60631,60632,60634,60636,60638,60640],{"class":69,"line":694},[67,60633,328],{"class":73},[67,60635,55648],{"class":262},[67,60637,55654],{"class":73},[67,60639,55648],{"class":262},[67,60641,323],{"class":73},[67,60643,60644,60646,60648],{"class":69,"line":700},[67,60645,328],{"class":73},[67,60647,53578],{"class":262},[67,60649,323],{"class":73},[67,60651,60652,60654,60656,60658,60660,60662,60664,60666],{"class":69,"line":706},[67,60653,13021],{"class":84},[67,60655,56152],{"class":77},[67,60657,671],{"class":84},[67,60659,56157],{"class":73},[67,60661,56160],{"class":110},[67,60663,854],{"class":73},[67,60665,59965],{"class":114},[67,60667,829],{"class":73},[67,60669,60670,60672,60675,60677,60680],{"class":69,"line":712},[67,60671,59972],{"class":73},[67,60673,60674],{"class":110},"onclick",[67,60676,671],{"class":84},[67,60678,60679],{"class":84}," function",[67,60681,56213],{"class":73},[67,60683,60684,60687,60689,60691],{"class":69,"line":717},[67,60685,60686],{"class":110},"      alert",[67,60688,854],{"class":73},[67,60690,2462],{"class":77},[67,60692,829],{"class":73},[67,60694,60695],{"class":69,"line":723},[67,60696,4020],{"class":73},[67,60698,60699,60701,60703,60705,60707],{"class":69,"line":729},[67,60700,59972],{"class":73},[67,60702,60674],{"class":110},[67,60704,671],{"class":84},[67,60706,60679],{"class":84},[67,60708,56213],{"class":73},[67,60710,60711,60713,60715,60717],{"class":69,"line":735},[67,60712,60686],{"class":110},[67,60714,854],{"class":73},[67,60716,2739],{"class":77},[67,60718,829],{"class":73},[67,60720,60721],{"class":69,"line":741},[67,60722,4020],{"class":73},[67,60724,60725,60727,60729],{"class":69,"line":747},[67,60726,54181],{"class":73},[67,60728,53578],{"class":262},[67,60730,323],{"class":73},[67,60732,60733,60735,60737],{"class":69,"line":753},[67,60734,376],{"class":73},[67,60736,53565],{"class":262},[67,60738,323],{"class":73},[67,60740,60741],{"class":69,"line":758},[67,60742,631],{"emptyLinePlaceholder":630},[67,60744,60745,60747,60749],{"class":69,"line":764},[67,60746,376],{"class":73},[67,60748,52403],{"class":262},[67,60750,323],{"class":73},[19,60752,60753],{},"只要点击就输出结果为22,前边11被覆盖了",[58,60755,60757],{"className":52401,"code":60756,"language":52403,"meta":63,"style":63},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[32,60758,60759,60764,60769,60773,60778,60783],{"__ignoreMap":63},[67,60760,60761],{"class":69,"line":70},[67,60762,60763],{"class":73},"  btn.addEventListener('click', function () {\n",[67,60765,60766],{"class":69,"line":191},[67,60767,60768],{"class":73},"      alert(11)\n",[67,60770,60771],{"class":69,"line":202},[67,60772,35230],{"class":73},[67,60774,60775],{"class":69,"line":641},[67,60776,60777],{"class":73},"    btn.addEventListener('click', function () {\n",[67,60779,60780],{"class":69,"line":655},[67,60781,60782],{"class":73},"      alert(22)\n",[67,60784,60785],{"class":69,"line":660},[67,60786,35230],{"class":73},[19,60788,60789],{},"点击第一次输出11,第二次点击为22",[391,60791,60793],{"id":60792},"_325-事件类型","3.2.5 事件类型",[19,60795,60796],{},[3317,60797],{"alt":63,"src":60798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23794,60800,60802],{"id":60801},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60804,60805],{},"补充知识:",[19,60807,60808],{},"轮播图自动播放模块,可以使用",[19,60810,60811],{},"let timerId = setInterval(function () {",[19,60813,60814],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60816,60817],{},"用js方法模拟进行点击事件,click必须加()",[19,60819,60820],{},"next.click()",[19,60822,60823],{},"}, 1000)",[19,60825,60826],{},[3317,60827],{"alt":63,"src":60828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[58,60830,60832],{"className":250,"code":60831,"language":252,"meta":63,"style":63},"\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",[32,60833,60834,60838,60848,60862,60866,60874,60889,60909,60929,60942,60950,60955,60960,60964,60968,60973,60978,60983,60988,60992,60996,61001,61006,61011,61015,61019,61024,61028,61033,61038,61042,61046,61051,61056,61061,61066,61071,61075,61079,61084,61089,61094,61099,61104,61108,61112,61117,61122,61127,61132,61137,61142,61147,61152,61157,61162,61166,61170,61175,61180,61184,61188,61193,61198,61202,61207,61212,61216,61220,61225,61229,61234,61239,61243,61248,61252,61256,61261,61266,61271,61276,61281,61286,61291,61295,61299,61303,61308,61313,61318,61323,61327,61335,61343,61347,61355,61370,61384,61405,61413,61427,61440,61455,61474,61486,61498,61510,61522,61534,61546,61558,61566,61581,61605,61629,61637,61645,61653,61661,61666,61671,61676,61681,61686,61691,61696,61701,61706,61711,61715,61720,61725,61730,61735,61740,61745,61750,61755,61760,61764,61769,61774,61779,61784,61789,61794,61799,61804,61809,61814,61819,61824,61828,61832,61837,61842,61847,61851,61856,61861,61866,61871,61876,61880,61885,61889,61893,61897,61901,61905,61909,61914,61919,61924,61929,61934,61939,61944,61949,61954,61958,61962,61967,61972,61977,61982,61987,61991,61996,62001,62006,62011,62016,62021,62025,62029,62034,62038,62043,62047,62052,62057,62062,62067,62072,62077,62081,62089,62097,62101],{"__ignoreMap":63},[67,60835,60836],{"class":69,"line":70},[67,60837,631],{"emptyLinePlaceholder":630},[67,60839,60840,60842,60844,60846],{"class":69,"line":191},[67,60841,53065],{"class":73},[67,60843,53068],{"class":84},[67,60845,53071],{"class":77},[67,60847,323],{"class":73},[67,60849,60850,60852,60854,60856,60858,60860],{"class":69,"line":202},[67,60851,259],{"class":73},[67,60853,52403],{"class":262},[67,60855,53082],{"class":110},[67,60857,85],{"class":73},[67,60859,53087],{"class":114},[67,60861,323],{"class":73},[67,60863,60864],{"class":69,"line":641},[67,60865,631],{"emptyLinePlaceholder":630},[67,60867,60868,60870,60872],{"class":69,"line":655},[67,60869,259],{"class":73},[67,60871,53100],{"class":262},[67,60873,323],{"class":73},[67,60875,60876,60878,60880,60882,60884,60886],{"class":69,"line":660},[67,60877,328],{"class":73},[67,60879,53110],{"class":262},[67,60881,53113],{"class":110},[67,60883,85],{"class":73},[67,60885,53118],{"class":114},[67,60887,60888],{"class":73}," \u002F>\n",[67,60890,60891,60893,60895,60897,60899,60901,60903,60905,60907],{"class":69,"line":665},[67,60892,328],{"class":73},[67,60894,53110],{"class":262},[67,60896,53129],{"class":110},[67,60898,85],{"class":73},[67,60900,53134],{"class":114},[67,60902,53137],{"class":110},[67,60904,85],{"class":73},[67,60906,53142],{"class":114},[67,60908,60888],{"class":73},[67,60910,60911,60913,60915,60917,60919,60921,60923,60925,60927],{"class":69,"line":677},[67,60912,328],{"class":73},[67,60914,53110],{"class":262},[67,60916,266],{"class":110},[67,60918,85],{"class":73},[67,60920,53157],{"class":114},[67,60922,53137],{"class":110},[67,60924,85],{"class":73},[67,60926,53164],{"class":114},[67,60928,60888],{"class":73},[67,60930,60931,60933,60935,60938,60940],{"class":69,"line":683},[67,60932,328],{"class":73},[67,60934,53173],{"class":262},[67,60936,60937],{"class":73},">轮播图点击切换\u003C\u002F",[67,60939,53173],{"class":262},[67,60941,323],{"class":73},[67,60943,60944,60946,60948],{"class":69,"line":689},[67,60945,328],{"class":73},[67,60947,1903],{"class":262},[67,60949,323],{"class":73},[67,60951,60952],{"class":69,"line":694},[67,60953,60954],{"class":73},"    * {\n",[67,60956,60957],{"class":69,"line":700},[67,60958,60959],{"class":73},"      box-sizing: border-box;\n",[67,60961,60962],{"class":69,"line":706},[67,60963,4020],{"class":73},[67,60965,60966],{"class":69,"line":712},[67,60967,631],{"emptyLinePlaceholder":630},[67,60969,60970],{"class":69,"line":717},[67,60971,60972],{"class":73},"    .slider {\n",[67,60974,60975],{"class":69,"line":723},[67,60976,60977],{"class":73},"      width: 560px;\n",[67,60979,60980],{"class":69,"line":729},[67,60981,60982],{"class":73},"      height: 400px;\n",[67,60984,60985],{"class":69,"line":735},[67,60986,60987],{"class":73},"      overflow: hidden;\n",[67,60989,60990],{"class":69,"line":741},[67,60991,4020],{"class":73},[67,60993,60994],{"class":69,"line":747},[67,60995,631],{"emptyLinePlaceholder":630},[67,60997,60998],{"class":69,"line":753},[67,60999,61000],{"class":73},"    .slider-wrapper {\n",[67,61002,61003],{"class":69,"line":758},[67,61004,61005],{"class":73},"      width: 100%;\n",[67,61007,61008],{"class":69,"line":764},[67,61009,61010],{"class":73},"      height: 320px;\n",[67,61012,61013],{"class":69,"line":770},[67,61014,4020],{"class":73},[67,61016,61017],{"class":69,"line":776},[67,61018,631],{"emptyLinePlaceholder":630},[67,61020,61021],{"class":69,"line":782},[67,61022,61023],{"class":73},"    .slider-wrapper img {\n",[67,61025,61026],{"class":69,"line":788},[67,61027,61005],{"class":73},[67,61029,61030],{"class":69,"line":793},[67,61031,61032],{"class":73},"      height: 100%;\n",[67,61034,61035],{"class":69,"line":798},[67,61036,61037],{"class":73},"      display: block;\n",[67,61039,61040],{"class":69,"line":816},[67,61041,4020],{"class":73},[67,61043,61044],{"class":69,"line":832},[67,61045,631],{"emptyLinePlaceholder":630},[67,61047,61048],{"class":69,"line":843},[67,61049,61050],{"class":73},"    .slider-footer {\n",[67,61052,61053],{"class":69,"line":848},[67,61054,61055],{"class":73},"      height: 80px;\n",[67,61057,61058],{"class":69,"line":863},[67,61059,61060],{"class":73},"      background-color: rgb(100, 67, 68);\n",[67,61062,61063],{"class":69,"line":876},[67,61064,61065],{"class":73},"      padding: 12px 12px 0 12px;\n",[67,61067,61068],{"class":69,"line":889},[67,61069,61070],{"class":73},"      position: relative;\n",[67,61072,61073],{"class":69,"line":894},[67,61074,4020],{"class":73},[67,61076,61077],{"class":69,"line":911},[67,61078,631],{"emptyLinePlaceholder":630},[67,61080,61081],{"class":69,"line":927},[67,61082,61083],{"class":73},"    .slider-footer .toggle {\n",[67,61085,61086],{"class":69,"line":932},[67,61087,61088],{"class":73},"      position: absolute;\n",[67,61090,61091],{"class":69,"line":955},[67,61092,61093],{"class":73},"      right: 0;\n",[67,61095,61096],{"class":69,"line":971},[67,61097,61098],{"class":73},"      top: 12px;\n",[67,61100,61101],{"class":69,"line":1010},[67,61102,61103],{"class":73},"      display: flex;\n",[67,61105,61106],{"class":69,"line":1016},[67,61107,4020],{"class":73},[67,61109,61110],{"class":69,"line":1021},[67,61111,631],{"emptyLinePlaceholder":630},[67,61113,61114],{"class":69,"line":1034},[67,61115,61116],{"class":73},"    .slider-footer .toggle button {\n",[67,61118,61119],{"class":69,"line":1053},[67,61120,61121],{"class":73},"      margin-right: 12px;\n",[67,61123,61124],{"class":69,"line":1070},[67,61125,61126],{"class":73},"      width: 28px;\n",[67,61128,61129],{"class":69,"line":1083},[67,61130,61131],{"class":73},"      height: 28px;\n",[67,61133,61134],{"class":69,"line":1088},[67,61135,61136],{"class":73},"      appearance: none;\n",[67,61138,61139],{"class":69,"line":1093},[67,61140,61141],{"class":73},"      border: none;\n",[67,61143,61144],{"class":69,"line":1110},[67,61145,61146],{"class":73},"      background: rgba(255, 255, 255, 0.1);\n",[67,61148,61149],{"class":69,"line":11603},[67,61150,61151],{"class":73},"      color: #fff;\n",[67,61153,61154],{"class":69,"line":11612},[67,61155,61156],{"class":73},"      border-radius: 4px;\n",[67,61158,61159],{"class":69,"line":11617},[67,61160,61161],{"class":73},"      cursor: pointer;\n",[67,61163,61164],{"class":69,"line":11623},[67,61165,4020],{"class":73},[67,61167,61168],{"class":69,"line":11644},[67,61169,631],{"emptyLinePlaceholder":630},[67,61171,61172],{"class":69,"line":11650},[67,61173,61174],{"class":73},"    .slider-footer .toggle button:hover {\n",[67,61176,61177],{"class":69,"line":11664},[67,61178,61179],{"class":73},"      background: rgba(255, 255, 255, 0.2);\n",[67,61181,61182],{"class":69,"line":11670},[67,61183,4020],{"class":73},[67,61185,61186],{"class":69,"line":11697},[67,61187,631],{"emptyLinePlaceholder":630},[67,61189,61190],{"class":69,"line":11706},[67,61191,61192],{"class":73},"    .slider-footer p {\n",[67,61194,61195],{"class":69,"line":11712},[67,61196,61197],{"class":73},"      margin: 0;\n",[67,61199,61200],{"class":69,"line":11720},[67,61201,61151],{"class":73},[67,61203,61204],{"class":69,"line":11725},[67,61205,61206],{"class":73},"      font-size: 18px;\n",[67,61208,61209],{"class":69,"line":18401},[67,61210,61211],{"class":73},"      margin-bottom: 10px;\n",[67,61213,61214],{"class":69,"line":18407},[67,61215,4020],{"class":73},[67,61217,61218],{"class":69,"line":18430},[67,61219,631],{"emptyLinePlaceholder":630},[67,61221,61222],{"class":69,"line":18436},[67,61223,61224],{"class":73},"    .slider-indicator {\n",[67,61226,61227],{"class":69,"line":18459},[67,61228,61197],{"class":73},[67,61230,61231],{"class":69,"line":18473},[67,61232,61233],{"class":73},"      padding: 0;\n",[67,61235,61236],{"class":69,"line":18493},[67,61237,61238],{"class":73},"      list-style: none;\n",[67,61240,61241],{"class":69,"line":18499},[67,61242,61103],{"class":73},[67,61244,61245],{"class":69,"line":18510},[67,61246,61247],{"class":73},"      align-items: center;\n",[67,61249,61250],{"class":69,"line":18533},[67,61251,4020],{"class":73},[67,61253,61254],{"class":69,"line":18555},[67,61255,631],{"emptyLinePlaceholder":630},[67,61257,61258],{"class":69,"line":18560},[67,61259,61260],{"class":73},"    .slider-indicator li {\n",[67,61262,61263],{"class":69,"line":18566},[67,61264,61265],{"class":73},"      width: 8px;\n",[67,61267,61268],{"class":69,"line":18580},[67,61269,61270],{"class":73},"      height: 8px;\n",[67,61272,61273],{"class":69,"line":18593},[67,61274,61275],{"class":73},"      margin: 4px;\n",[67,61277,61278],{"class":69,"line":18598},[67,61279,61280],{"class":73},"      border-radius: 50%;\n",[67,61282,61283],{"class":69,"line":18612},[67,61284,61285],{"class":73},"      background: #fff;\n",[67,61287,61288],{"class":69,"line":18617},[67,61289,61290],{"class":73},"      opacity: 0.4;\n",[67,61292,61293],{"class":69,"line":18623},[67,61294,61161],{"class":73},[67,61296,61297],{"class":69,"line":18628},[67,61298,4020],{"class":73},[67,61300,61301],{"class":69,"line":18642},[67,61302,631],{"emptyLinePlaceholder":630},[67,61304,61305],{"class":69,"line":18647},[67,61306,61307],{"class":73},"    .slider-indicator li.active {\n",[67,61309,61310],{"class":69,"line":18652},[67,61311,61312],{"class":73},"      width: 12px;\n",[67,61314,61315],{"class":69,"line":18666},[67,61316,61317],{"class":73},"      height: 12px;\n",[67,61319,61320],{"class":69,"line":18678},[67,61321,61322],{"class":73},"      opacity: 1;\n",[67,61324,61325],{"class":69,"line":18683},[67,61326,4020],{"class":73},[67,61328,61329,61331,61333],{"class":69,"line":18696},[67,61330,54181],{"class":73},[67,61332,1903],{"class":262},[67,61334,323],{"class":73},[67,61336,61337,61339,61341],{"class":69,"line":18701},[67,61338,376],{"class":73},[67,61340,53100],{"class":262},[67,61342,323],{"class":73},[67,61344,61345],{"class":69,"line":18706},[67,61346,631],{"emptyLinePlaceholder":630},[67,61348,61349,61351,61353],{"class":69,"line":18711},[67,61350,259],{"class":73},[67,61352,53565],{"class":262},[67,61354,323],{"class":73},[67,61356,61357,61359,61361,61363,61365,61368],{"class":69,"line":18724},[67,61358,328],{"class":73},[67,61360,53377],{"class":262},[67,61362,55248],{"class":110},[67,61364,85],{"class":73},[67,61366,61367],{"class":114},"\"slider\"",[67,61369,323],{"class":73},[67,61371,61372,61374,61376,61378,61380,61382],{"class":69,"line":18729},[67,61373,53107],{"class":73},[67,61375,53377],{"class":262},[67,61377,55248],{"class":110},[67,61379,85],{"class":73},[67,61381,56988],{"class":114},[67,61383,323],{"class":73},[67,61385,61386,61388,61390,61392,61394,61397,61399,61401,61403],{"class":69,"line":34402},[67,61387,56995],{"class":73},[67,61389,3317],{"class":262},[67,61391,57000],{"class":110},[67,61393,85],{"class":73},[67,61395,61396],{"class":114},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[67,61398,57008],{"class":110},[67,61400,85],{"class":73},[67,61402,9468],{"class":114},[67,61404,60888],{"class":73},[67,61406,61407,61409,61411],{"class":69,"line":34408},[67,61408,53542],{"class":73},[67,61410,53377],{"class":262},[67,61412,323],{"class":73},[67,61414,61415,61417,61419,61421,61423,61425],{"class":69,"line":34414},[67,61416,53107],{"class":73},[67,61418,53377],{"class":262},[67,61420,55248],{"class":110},[67,61422,85],{"class":73},[67,61424,57035],{"class":114},[67,61426,323],{"class":73},[67,61428,61429,61431,61433,61436,61438],{"class":69,"line":34420},[67,61430,56995],{"class":73},[67,61432,19],{"class":262},[67,61434,61435],{"class":73},">对人类来说会不会太超前了？\u003C\u002F",[67,61437,19],{"class":262},[67,61439,323],{"class":73},[67,61441,61442,61444,61446,61448,61450,61453],{"class":69,"line":34426},[67,61443,56995],{"class":73},[67,61445,2994],{"class":262},[67,61447,55248],{"class":110},[67,61449,85],{"class":73},[67,61451,61452],{"class":114},"\"slider-indicator\"",[67,61454,323],{"class":73},[67,61456,61457,61459,61461,61463,61465,61468,61470,61472],{"class":69,"line":34437},[67,61458,57063],{"class":73},[67,61460,29],{"class":262},[67,61462,55248],{"class":110},[67,61464,85],{"class":73},[67,61466,61467],{"class":114},"\"active\"",[67,61469,57075],{"class":73},[67,61471,29],{"class":262},[67,61473,323],{"class":73},[67,61475,61476,61478,61480,61482,61484],{"class":69,"line":34443},[67,61477,57063],{"class":73},[67,61479,29],{"class":262},[67,61481,57075],{"class":73},[67,61483,29],{"class":262},[67,61485,323],{"class":73},[67,61487,61488,61490,61492,61494,61496],{"class":69,"line":34463},[67,61489,57063],{"class":73},[67,61491,29],{"class":262},[67,61493,57075],{"class":73},[67,61495,29],{"class":262},[67,61497,323],{"class":73},[67,61499,61500,61502,61504,61506,61508],{"class":69,"line":34469},[67,61501,57063],{"class":73},[67,61503,29],{"class":262},[67,61505,57075],{"class":73},[67,61507,29],{"class":262},[67,61509,323],{"class":73},[67,61511,61512,61514,61516,61518,61520],{"class":69,"line":34480},[67,61513,57063],{"class":73},[67,61515,29],{"class":262},[67,61517,57075],{"class":73},[67,61519,29],{"class":262},[67,61521,323],{"class":73},[67,61523,61524,61526,61528,61530,61532],{"class":69,"line":34486},[67,61525,57063],{"class":73},[67,61527,29],{"class":262},[67,61529,57075],{"class":73},[67,61531,29],{"class":262},[67,61533,323],{"class":73},[67,61535,61536,61538,61540,61542,61544],{"class":69,"line":34492},[67,61537,57063],{"class":73},[67,61539,29],{"class":262},[67,61541,57075],{"class":73},[67,61543,29],{"class":262},[67,61545,323],{"class":73},[67,61547,61548,61550,61552,61554,61556],{"class":69,"line":34498},[67,61549,57063],{"class":73},[67,61551,29],{"class":262},[67,61553,57075],{"class":73},[67,61555,29],{"class":262},[67,61557,323],{"class":73},[67,61559,61560,61562,61564],{"class":69,"line":34504},[67,61561,57168],{"class":73},[67,61563,2994],{"class":262},[67,61565,323],{"class":73},[67,61567,61568,61570,61572,61574,61576,61579],{"class":69,"line":34510},[67,61569,56995],{"class":73},[67,61571,53377],{"class":262},[67,61573,55248],{"class":110},[67,61575,85],{"class":73},[67,61577,61578],{"class":114},"\"toggle\"",[67,61580,323],{"class":73},[67,61582,61583,61585,61587,61589,61591,61594,61596,61599,61601,61603],{"class":69,"line":34516},[67,61584,57063],{"class":73},[67,61586,55648],{"class":262},[67,61588,55248],{"class":110},[67,61590,85],{"class":73},[67,61592,61593],{"class":114},"\"prev\"",[67,61595,2948],{"class":73},[67,61597,61598],{"class":77},"&lt;",[67,61600,376],{"class":73},[67,61602,55648],{"class":262},[67,61604,323],{"class":73},[67,61606,61607,61609,61611,61613,61615,61618,61620,61623,61625,61627],{"class":69,"line":34522},[67,61608,57063],{"class":73},[67,61610,55648],{"class":262},[67,61612,55248],{"class":110},[67,61614,85],{"class":73},[67,61616,61617],{"class":114},"\"next\"",[67,61619,2948],{"class":73},[67,61621,61622],{"class":77},"&gt;",[67,61624,376],{"class":73},[67,61626,55648],{"class":262},[67,61628,323],{"class":73},[67,61630,61631,61633,61635],{"class":69,"line":34542},[67,61632,57168],{"class":73},[67,61634,53377],{"class":262},[67,61636,323],{"class":73},[67,61638,61639,61641,61643],{"class":69,"line":34548},[67,61640,53542],{"class":73},[67,61642,53377],{"class":262},[67,61644,323],{"class":73},[67,61646,61647,61649,61651],{"class":69,"line":34564},[67,61648,54181],{"class":73},[67,61650,53377],{"class":262},[67,61652,323],{"class":73},[67,61654,61655,61657,61659],{"class":69,"line":34570},[67,61656,328],{"class":73},[67,61658,53578],{"class":262},[67,61660,323],{"class":73},[67,61662,61663],{"class":69,"line":34584},[67,61664,61665],{"class":73},"    \u002F\u002F 1. 初始数据\n",[67,61667,61668],{"class":69,"line":34590},[67,61669,61670],{"class":73},"    const data = [\n",[67,61672,61673],{"class":69,"line":34605},[67,61674,61675],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[67,61677,61678],{"class":69,"line":34611},[67,61679,61680],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[67,61682,61683],{"class":69,"line":34620},[67,61684,61685],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[67,61687,61688],{"class":69,"line":34626},[67,61689,61690],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[67,61692,61693],{"class":69,"line":34635},[67,61694,61695],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[67,61697,61698],{"class":69,"line":34641},[67,61699,61700],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[67,61702,61703],{"class":69,"line":34647},[67,61704,61705],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[67,61707,61708],{"class":69,"line":34656},[67,61709,61710],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[67,61712,61713],{"class":69,"line":34662},[67,61714,54871],{"class":73},[67,61716,61717],{"class":69,"line":34673},[67,61718,61719],{"class":73},"    \u002F\u002F 获取元素\n",[67,61721,61722],{"class":69,"line":34679},[67,61723,61724],{"class":73},"    const img = document.querySelector('.slider-wrapper img')\n",[67,61726,61727],{"class":69,"line":34698},[67,61728,61729],{"class":73},"    const p = document.querySelector('.slider-footer p')\n",[67,61731,61732],{"class":69,"line":34704},[67,61733,61734],{"class":73},"    const footer = document.querySelector('.slider-footer')\n",[67,61736,61737],{"class":69,"line":34715},[67,61738,61739],{"class":73},"    \u002F\u002F 1. 右按钮业务\n",[67,61741,61742],{"class":69,"line":34721},[67,61743,61744],{"class":73},"    \u002F\u002F 1.1 获取右侧按钮 \n",[67,61746,61747],{"class":69,"line":34741},[67,61748,61749],{"class":73},"    const next = document.querySelector('.next')\n",[67,61751,61752],{"class":69,"line":34757},[67,61753,61754],{"class":73},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[67,61756,61757],{"class":69,"line":34763},[67,61758,61759],{"class":73},"    \u002F\u002F 1.2 注册点击事件\n",[67,61761,61762],{"class":69,"line":34777},[67,61763,631],{"emptyLinePlaceholder":630},[67,61765,61766],{"class":69,"line":34783},[67,61767,61768],{"class":73},"    next.addEventListener('click', function () {\n",[67,61770,61771],{"class":69,"line":34789},[67,61772,61773],{"class":73},"      \u002F\u002F console.log(11)\n",[67,61775,61776],{"class":69,"line":34800},[67,61777,61778],{"class":73},"      i++\n",[67,61780,61781],{"class":69,"line":34806},[67,61782,61783],{"class":73},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[67,61785,61786],{"class":69,"line":34812},[67,61787,61788],{"class":73},"      \u002F\u002F if (i >= 8) {\n",[67,61790,61791],{"class":69,"line":34822},[67,61792,61793],{"class":73},"      \u002F\u002F   i = 0\n",[67,61795,61796],{"class":69,"line":34828},[67,61797,61798],{"class":73},"      \u002F\u002F }\n",[67,61800,61801],{"class":69,"line":34839},[67,61802,61803],{"class":73},"      i = i >= data.length ? 0 : i\n",[67,61805,61806],{"class":69,"line":34845},[67,61807,61808],{"class":73},"      \u002F\u002F 1.3 得到对应的对象\n",[67,61810,61811],{"class":69,"line":34855},[67,61812,61813],{"class":73},"      \u002F\u002F console.log(data[i])\n",[67,61815,61816],{"class":69,"line":34860},[67,61817,61818],{"class":73},"      \u002F\u002F 调用函数\n",[67,61820,61821],{"class":69,"line":34866},[67,61822,61823],{"class":73},"      toggle()\n",[67,61825,61826],{"class":69,"line":34915},[67,61827,35230],{"class":73},[67,61829,61830],{"class":69,"line":34962},[67,61831,631],{"emptyLinePlaceholder":630},[67,61833,61834],{"class":69,"line":34967},[67,61835,61836],{"class":73},"    \u002F\u002F 2. 左侧按钮业务\n",[67,61838,61839],{"class":69,"line":34973},[67,61840,61841],{"class":73},"    \u002F\u002F 2.1 获取左侧按钮 \n",[67,61843,61844],{"class":69,"line":34992},[67,61845,61846],{"class":73},"    const prev = document.querySelector('.prev')\n",[67,61848,61849],{"class":69,"line":34998},[67,61850,61759],{"class":73},[67,61852,61853],{"class":69,"line":35018},[67,61854,61855],{"class":73},"    prev.addEventListener('click', function () {\n",[67,61857,61858],{"class":69,"line":35024},[67,61859,61860],{"class":73},"      i--\n",[67,61862,61863],{"class":69,"line":35030},[67,61864,61865],{"class":73},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[67,61867,61868],{"class":69,"line":35040},[67,61869,61870],{"class":73},"      \u002F\u002F if (i \u003C 0) {\n",[67,61872,61873],{"class":69,"line":35045},[67,61874,61875],{"class":73},"      \u002F\u002F   i = 7\n",[67,61877,61878],{"class":69,"line":35051},[67,61879,61798],{"class":73},[67,61881,61882],{"class":69,"line":35067},[67,61883,61884],{"class":73},"      i = i \u003C 0 ? data.length - 1 : i\n",[67,61886,61887],{"class":69,"line":35112},[67,61888,61808],{"class":73},[67,61890,61891],{"class":69,"line":35118},[67,61892,61813],{"class":73},[67,61894,61895],{"class":69,"line":35124},[67,61896,61818],{"class":73},[67,61898,61899],{"class":69,"line":35130},[67,61900,61823],{"class":73},[67,61902,61903],{"class":69,"line":35141},[67,61904,35230],{"class":73},[67,61906,61907],{"class":69,"line":35147},[67,61908,631],{"emptyLinePlaceholder":630},[67,61910,61911],{"class":69,"line":35153},[67,61912,61913],{"class":73},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[67,61915,61916],{"class":69,"line":35159},[67,61917,61918],{"class":73},"    function toggle() {\n",[67,61920,61921],{"class":69,"line":35177},[67,61922,61923],{"class":73},"      \u002F\u002F 1.4 渲染对应的数据\n",[67,61925,61926],{"class":69,"line":35191},[67,61927,61928],{"class":73},"      img.src = data[i].url\n",[67,61930,61931],{"class":69,"line":35200},[67,61932,61933],{"class":73},"      p.innerHTML = data[i].title\n",[67,61935,61936],{"class":69,"line":35209},[67,61937,61938],{"class":73},"      footer.style.backgroundColor = data[i].color\n",[67,61940,61941],{"class":69,"line":35218},[67,61942,61943],{"class":73},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[67,61945,61946],{"class":69,"line":35227},[67,61947,61948],{"class":73},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[67,61950,61951],{"class":69,"line":35233},[67,61952,61953],{"class":73},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[67,61955,61956],{"class":69,"line":35239},[67,61957,4020],{"class":73},[67,61959,61960],{"class":69,"line":35247},[67,61961,631],{"emptyLinePlaceholder":630},[67,61963,61964],{"class":69,"line":35252},[67,61965,61966],{"class":73},"    \u002F\u002F 3. 自动播放模块\n",[67,61968,61969],{"class":69,"line":35258},[67,61970,61971],{"class":73},"    let timerId = setInterval(function () {\n",[67,61973,61974],{"class":69,"line":35269},[67,61975,61976],{"class":73},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[67,61978,61979],{"class":69,"line":35275},[67,61980,61981],{"class":73},"      next.click()\n",[67,61983,61984],{"class":69,"line":35295},[67,61985,61986],{"class":73},"    }, 1000)\n",[67,61988,61989],{"class":69,"line":35301},[67,61990,631],{"emptyLinePlaceholder":630},[67,61992,61993],{"class":69,"line":35307},[67,61994,61995],{"class":73},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[67,61997,61998],{"class":69,"line":35313},[67,61999,62000],{"class":73},"    const slider = document.querySelector('.slider')\n",[67,62002,62003],{"class":69,"line":35330},[67,62004,62005],{"class":73},"    \u002F\u002F 注册事件\n",[67,62007,62008],{"class":69,"line":35336},[67,62009,62010],{"class":73},"    slider.addEventListener('mouseenter', function () {\n",[67,62012,62013],{"class":69,"line":35342},[67,62014,62015],{"class":73},"      \u002F\u002F 停止定时器\n",[67,62017,62018],{"class":69,"line":35348},[67,62019,62020],{"class":73},"      clearInterval(timerId)\n",[67,62022,62023],{"class":69,"line":35354},[67,62024,35230],{"class":73},[67,62026,62027],{"class":69,"line":35360},[67,62028,631],{"emptyLinePlaceholder":630},[67,62030,62031],{"class":69,"line":35387},[67,62032,62033],{"class":73},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[67,62035,62036],{"class":69,"line":35411},[67,62037,62005],{"class":73},[67,62039,62040],{"class":69,"line":35417},[67,62041,62042],{"class":73},"    slider.addEventListener('mouseleave', function () {\n",[67,62044,62045],{"class":69,"line":35423},[67,62046,62015],{"class":73},[67,62048,62049],{"class":69,"line":35429},[67,62050,62051],{"class":73},"      if (timerId) clearInterval(timerId)\n",[67,62053,62054],{"class":69,"line":35440},[67,62055,62056],{"class":73},"      \u002F\u002F 开启定时器\n",[67,62058,62059],{"class":69,"line":35451},[67,62060,62061],{"class":73},"      timerId = setInterval(function () {\n",[67,62063,62064],{"class":69,"line":35457},[67,62065,62066],{"class":73},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[67,62068,62069],{"class":69,"line":35474},[67,62070,62071],{"class":73},"        next.click()\n",[67,62073,62074],{"class":69,"line":35497},[67,62075,62076],{"class":73},"      }, 1000)\n",[67,62078,62079],{"class":69,"line":35520},[67,62080,35230],{"class":73},[67,62082,62083,62085,62087],{"class":69,"line":35526},[67,62084,54181],{"class":73},[67,62086,53578],{"class":262},[67,62088,323],{"class":73},[67,62090,62091,62093,62095],{"class":69,"line":35531},[67,62092,376],{"class":73},[67,62094,53565],{"class":262},[67,62096,323],{"class":73},[67,62098,62099],{"class":69,"line":35540},[67,62100,631],{"emptyLinePlaceholder":630},[67,62102,62103,62105,62107],{"class":69,"line":35550},[67,62104,376],{"class":73},[67,62106,52403],{"class":262},[67,62108,323],{"class":73},[23794,62110,62112],{"id":62111},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62114,62115],{},"小米搜索框案例：",[58,62117,62119],{"className":52401,"code":62118,"language":52403,"meta":63,"style":63},"\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",[32,62120,62121,62131,62145,62149,62157,62171,62191,62211,62223,62231,62237,62247,62257,62269,62273,62277,62284,62288,62299,62303,62307,62314,62325,62338,62352,62356,62360,62369,62381,62393,62407,62420,62433,62451,62462,62466,62470,62479,62496,62500,62504,62511,62521,62531,62542,62555,62567,62583,62594,62606,62610,62614,62622,62633,62650,62662,62674,62685,62689,62693,62704,62715,62719,62727,62731,62739,62743,62751,62766,62789,62804,62835,62862,62889,62916,62943,62970,62997,63006,63014,63022,63027,63047,63067,63072,63077,63095,63100,63110,63115,63129,63134,63139,63156,63165,63177,63181,63189,63197,63201],{"__ignoreMap":63},[67,62122,62123,62125,62127,62129],{"class":69,"line":70},[67,62124,53065],{"class":73},[67,62126,53068],{"class":262},[67,62128,53071],{"class":110},[67,62130,323],{"class":73},[67,62132,62133,62135,62137,62139,62141,62143],{"class":69,"line":191},[67,62134,259],{"class":73},[67,62136,52403],{"class":262},[67,62138,53082],{"class":110},[67,62140,85],{"class":73},[67,62142,53087],{"class":114},[67,62144,323],{"class":73},[67,62146,62147],{"class":69,"line":202},[67,62148,631],{"emptyLinePlaceholder":630},[67,62150,62151,62153,62155],{"class":69,"line":641},[67,62152,259],{"class":73},[67,62154,53100],{"class":262},[67,62156,323],{"class":73},[67,62158,62159,62161,62163,62165,62167,62169],{"class":69,"line":655},[67,62160,53107],{"class":73},[67,62162,53110],{"class":262},[67,62164,53113],{"class":110},[67,62166,85],{"class":73},[67,62168,53118],{"class":114},[67,62170,323],{"class":73},[67,62172,62173,62175,62177,62179,62181,62183,62185,62187,62189],{"class":69,"line":660},[67,62174,53107],{"class":73},[67,62176,53110],{"class":262},[67,62178,53129],{"class":110},[67,62180,85],{"class":73},[67,62182,53134],{"class":114},[67,62184,53137],{"class":110},[67,62186,85],{"class":73},[67,62188,53142],{"class":114},[67,62190,323],{"class":73},[67,62192,62193,62195,62197,62199,62201,62203,62205,62207,62209],{"class":69,"line":665},[67,62194,53107],{"class":73},[67,62196,53110],{"class":262},[67,62198,266],{"class":110},[67,62200,85],{"class":73},[67,62202,53157],{"class":114},[67,62204,53137],{"class":110},[67,62206,85],{"class":73},[67,62208,53164],{"class":114},[67,62210,323],{"class":73},[67,62212,62213,62215,62217,62219,62221],{"class":69,"line":677},[67,62214,53107],{"class":73},[67,62216,53173],{"class":262},[67,62218,53176],{"class":73},[67,62220,53173],{"class":262},[67,62222,323],{"class":73},[67,62224,62225,62227,62229],{"class":69,"line":683},[67,62226,53107],{"class":73},[67,62228,1903],{"class":262},[67,62230,323],{"class":73},[67,62232,62233,62235],{"class":69,"line":689},[67,62234,53193],{"class":262},[67,62236,17369],{"class":73},[67,62238,62239,62241,62243,62245],{"class":69,"line":694},[67,62240,53200],{"class":77},[67,62242,53203],{"class":73},[67,62244,78],{"class":77},[67,62246,3148],{"class":73},[67,62248,62249,62251,62253,62255],{"class":69,"line":700},[67,62250,53212],{"class":77},[67,62252,53203],{"class":73},[67,62254,78],{"class":77},[67,62256,3148],{"class":73},[67,62258,62259,62262,62264,62267],{"class":69,"line":706},[67,62260,62261],{"class":77},"            box-sizing",[67,62263,53203],{"class":73},[67,62265,62266],{"class":77},"border-box",[67,62268,3148],{"class":73},[67,62270,62271],{"class":69,"line":712},[67,62272,4361],{"class":73},[67,62274,62275],{"class":69,"line":717},[67,62276,631],{"emptyLinePlaceholder":630},[67,62278,62279,62282],{"class":69,"line":723},[67,62280,62281],{"class":262},"        ul",[67,62283,17369],{"class":73},[67,62285,62286],{"class":69,"line":729},[67,62287,631],{"emptyLinePlaceholder":630},[67,62289,62290,62293,62295,62297],{"class":69,"line":735},[67,62291,62292],{"class":77},"            list-style",[67,62294,53203],{"class":73},[67,62296,56498],{"class":77},[67,62298,3148],{"class":73},[67,62300,62301],{"class":69,"line":741},[67,62302,4361],{"class":73},[67,62304,62305],{"class":69,"line":747},[67,62306,631],{"emptyLinePlaceholder":630},[67,62308,62309,62312],{"class":69,"line":753},[67,62310,62311],{"class":110},"        .mi",[67,62313,17369],{"class":73},[67,62315,62316,62319,62321,62323],{"class":69,"line":758},[67,62317,62318],{"class":77},"            position",[67,62320,53203],{"class":73},[67,62322,56525],{"class":77},[67,62324,3148],{"class":73},[67,62326,62327,62329,62331,62334,62336],{"class":69,"line":764},[67,62328,53250],{"class":77},[67,62330,53203],{"class":73},[67,62332,62333],{"class":77},"223",[67,62335,53258],{"class":84},[67,62337,3148],{"class":73},[67,62339,62340,62342,62344,62346,62348,62350],{"class":69,"line":770},[67,62341,53200],{"class":77},[67,62343,53203],{"class":73},[67,62345,2302],{"class":77},[67,62347,53258],{"class":84},[67,62349,53322],{"class":77},[67,62351,3148],{"class":73},[67,62353,62354],{"class":69,"line":776},[67,62355,4361],{"class":73},[67,62357,62358],{"class":69,"line":782},[67,62359,631],{"emptyLinePlaceholder":630},[67,62361,62362,62364,62367],{"class":69,"line":788},[67,62363,62311],{"class":110},[67,62365,62366],{"class":262}," input",[67,62368,17369],{"class":73},[67,62370,62371,62373,62375,62377,62379],{"class":69,"line":793},[67,62372,53250],{"class":77},[67,62374,53203],{"class":73},[67,62376,62333],{"class":77},[67,62378,53258],{"class":84},[67,62380,3148],{"class":73},[67,62382,62383,62385,62387,62389,62391],{"class":69,"line":798},[67,62384,53265],{"class":77},[67,62386,53203],{"class":73},[67,62388,2596],{"class":77},[67,62390,53258],{"class":84},[67,62392,3148],{"class":73},[67,62394,62395,62397,62399,62401,62403,62405],{"class":69,"line":816},[67,62396,53212],{"class":77},[67,62398,53203],{"class":73},[67,62400,78],{"class":77},[67,62402,3871],{"class":77},[67,62404,53258],{"class":84},[67,62406,3148],{"class":73},[67,62408,62409,62412,62414,62416,62418],{"class":69,"line":832},[67,62410,62411],{"class":77},"            font-size",[67,62413,53203],{"class":73},[67,62415,2538],{"class":77},[67,62417,53258],{"class":84},[67,62419,3148],{"class":73},[67,62421,62422,62425,62427,62429,62431],{"class":69,"line":843},[67,62423,62424],{"class":77},"            line-height",[67,62426,53203],{"class":73},[67,62428,2596],{"class":77},[67,62430,53258],{"class":84},[67,62432,3148],{"class":73},[67,62434,62435,62438,62440,62442,62444,62446,62449],{"class":69,"line":848},[67,62436,62437],{"class":77},"            border",[67,62439,53203],{"class":73},[67,62441,2209],{"class":77},[67,62443,53258],{"class":84},[67,62445,53287],{"class":77},[67,62447,62448],{"class":77}," #e0e0e0",[67,62450,3148],{"class":73},[67,62452,62453,62456,62458,62460],{"class":69,"line":863},[67,62454,62455],{"class":77},"            outline",[67,62457,53203],{"class":73},[67,62459,56498],{"class":77},[67,62461,3148],{"class":73},[67,62463,62464],{"class":69,"line":876},[67,62465,4361],{"class":73},[67,62467,62468],{"class":69,"line":889},[67,62469,631],{"emptyLinePlaceholder":630},[67,62471,62472,62474,62477],{"class":69,"line":894},[67,62473,62311],{"class":110},[67,62475,62476],{"class":110}," .search",[67,62478,17369],{"class":73},[67,62480,62481,62483,62485,62487,62489,62491,62494],{"class":69,"line":911},[67,62482,62437],{"class":77},[67,62484,53203],{"class":73},[67,62486,2209],{"class":77},[67,62488,53258],{"class":84},[67,62490,53287],{"class":77},[67,62492,62493],{"class":77}," #ff6700",[67,62495,3148],{"class":73},[67,62497,62498],{"class":69,"line":927},[67,62499,4361],{"class":73},[67,62501,62502],{"class":69,"line":932},[67,62503,631],{"emptyLinePlaceholder":630},[67,62505,62506,62509],{"class":69,"line":955},[67,62507,62508],{"class":110},"        .result-list",[67,62510,17369],{"class":73},[67,62512,62513,62515,62517,62519],{"class":69,"line":971},[67,62514,53238],{"class":77},[67,62516,53203],{"class":73},[67,62518,56498],{"class":77},[67,62520,3148],{"class":73},[67,62522,62523,62525,62527,62529],{"class":69,"line":1010},[67,62524,62318],{"class":77},[67,62526,53203],{"class":73},[67,62528,56592],{"class":77},[67,62530,3148],{"class":73},[67,62532,62533,62536,62538,62540],{"class":69,"line":1016},[67,62534,62535],{"class":77},"            left",[67,62537,53203],{"class":73},[67,62539,78],{"class":77},[67,62541,3148],{"class":73},[67,62543,62544,62547,62549,62551,62553],{"class":69,"line":1021},[67,62545,62546],{"class":77},"            top",[67,62548,53203],{"class":73},[67,62550,2596],{"class":77},[67,62552,53258],{"class":84},[67,62554,3148],{"class":73},[67,62556,62557,62559,62561,62563,62565],{"class":69,"line":1034},[67,62558,53250],{"class":77},[67,62560,53203],{"class":73},[67,62562,62333],{"class":77},[67,62564,53258],{"class":84},[67,62566,3148],{"class":73},[67,62568,62569,62571,62573,62575,62577,62579,62581],{"class":69,"line":1053},[67,62570,62437],{"class":77},[67,62572,53203],{"class":73},[67,62574,2209],{"class":77},[67,62576,53258],{"class":84},[67,62578,53287],{"class":77},[67,62580,62493],{"class":77},[67,62582,3148],{"class":73},[67,62584,62585,62588,62590,62592],{"class":69,"line":1070},[67,62586,62587],{"class":77},"            border-top",[67,62589,53203],{"class":73},[67,62591,78],{"class":77},[67,62593,3148],{"class":73},[67,62595,62596,62599,62601,62604],{"class":69,"line":1083},[67,62597,62598],{"class":77},"            background",[67,62600,53203],{"class":73},[67,62602,62603],{"class":77},"#fff",[67,62605,3148],{"class":73},[67,62607,62608],{"class":69,"line":1088},[67,62609,4361],{"class":73},[67,62611,62612],{"class":69,"line":1093},[67,62613,631],{"emptyLinePlaceholder":630},[67,62615,62616,62618,62620],{"class":69,"line":1110},[67,62617,62508],{"class":110},[67,62619,3253],{"class":262},[67,62621,17369],{"class":73},[67,62623,62624,62626,62628,62631],{"class":69,"line":11603},[67,62625,53238],{"class":77},[67,62627,53203],{"class":73},[67,62629,62630],{"class":77},"block",[67,62632,3148],{"class":73},[67,62634,62635,62637,62639,62641,62643,62646,62648],{"class":69,"line":11612},[67,62636,53212],{"class":77},[67,62638,53203],{"class":73},[67,62640,2335],{"class":77},[67,62642,53258],{"class":84},[67,62644,62645],{"class":77}," 15",[67,62647,53258],{"class":84},[67,62649,3148],{"class":73},[67,62651,62652,62654,62656,62658,62660],{"class":69,"line":11617},[67,62653,62411],{"class":77},[67,62655,53203],{"class":73},[67,62657,2488],{"class":77},[67,62659,53258],{"class":84},[67,62661,3148],{"class":73},[67,62663,62664,62667,62669,62672],{"class":69,"line":11623},[67,62665,62666],{"class":77},"            color",[67,62668,53203],{"class":73},[67,62670,62671],{"class":77},"#424242",[67,62673,3148],{"class":73},[67,62675,62676,62679,62681,62683],{"class":69,"line":11644},[67,62677,62678],{"class":77},"            text-decoration",[67,62680,53203],{"class":73},[67,62682,56498],{"class":77},[67,62684,3148],{"class":73},[67,62686,62687],{"class":69,"line":11650},[67,62688,4361],{"class":73},[67,62690,62691],{"class":69,"line":11664},[67,62692,631],{"emptyLinePlaceholder":630},[67,62694,62695,62697,62699,62702],{"class":69,"line":11670},[67,62696,62508],{"class":110},[67,62698,3253],{"class":262},[67,62700,62701],{"class":110},":hover",[67,62703,17369],{"class":73},[67,62705,62706,62708,62710,62713],{"class":69,"line":11697},[67,62707,53406],{"class":77},[67,62709,53203],{"class":73},[67,62711,62712],{"class":77},"#eee",[67,62714,3148],{"class":73},[67,62716,62717],{"class":69,"line":11706},[67,62718,4361],{"class":73},[67,62720,62721,62723,62725],{"class":69,"line":11712},[67,62722,53542],{"class":73},[67,62724,1903],{"class":262},[67,62726,323],{"class":73},[67,62728,62729],{"class":69,"line":11720},[67,62730,631],{"emptyLinePlaceholder":630},[67,62732,62733,62735,62737],{"class":69,"line":11725},[67,62734,376],{"class":73},[67,62736,53100],{"class":262},[67,62738,323],{"class":73},[67,62740,62741],{"class":69,"line":18401},[67,62742,631],{"emptyLinePlaceholder":630},[67,62744,62745,62747,62749],{"class":69,"line":18407},[67,62746,259],{"class":73},[67,62748,53565],{"class":262},[67,62750,323],{"class":73},[67,62752,62753,62755,62757,62759,62761,62764],{"class":69,"line":18430},[67,62754,53107],{"class":73},[67,62756,53377],{"class":262},[67,62758,55248],{"class":110},[67,62760,85],{"class":73},[67,62762,62763],{"class":114},"\"mi\"",[67,62765,323],{"class":73},[67,62767,62768,62770,62772,62774,62776,62779,62782,62784,62787],{"class":69,"line":18436},[67,62769,57063],{"class":73},[67,62771,55583],{"class":262},[67,62773,274],{"class":110},[67,62775,85],{"class":73},[67,62777,62778],{"class":114},"\"search\"",[67,62780,62781],{"class":110}," placeholder",[67,62783,85],{"class":73},[67,62785,62786],{"class":114},"\"小米笔记本\"",[67,62788,323],{"class":73},[67,62790,62791,62793,62795,62797,62799,62802],{"class":69,"line":18459},[67,62792,57063],{"class":73},[67,62794,2994],{"class":262},[67,62796,55248],{"class":110},[67,62798,85],{"class":73},[67,62800,62801],{"class":114},"\"result-list\"",[67,62803,323],{"class":73},[67,62805,62806,62809,62811,62814,62816,62819,62821,62824,62827,62829,62831,62833],{"class":69,"line":18473},[67,62807,62808],{"class":73},"            \u003C",[67,62810,29],{"class":262},[67,62812,62813],{"class":73},">\u003C",[67,62815,2230],{"class":262},[67,62817,62818],{"class":110}," href",[67,62820,85],{"class":73},[67,62822,62823],{"class":114},"\"#\"",[67,62825,62826],{"class":73},">全部商品\u003C\u002F",[67,62828,2230],{"class":262},[67,62830,57075],{"class":73},[67,62832,29],{"class":262},[67,62834,323],{"class":73},[67,62836,62837,62839,62841,62843,62845,62847,62849,62851,62854,62856,62858,62860],{"class":69,"line":18493},[67,62838,62808],{"class":73},[67,62840,29],{"class":262},[67,62842,62813],{"class":73},[67,62844,2230],{"class":262},[67,62846,62818],{"class":110},[67,62848,85],{"class":73},[67,62850,62823],{"class":114},[67,62852,62853],{"class":73},">小米11\u003C\u002F",[67,62855,2230],{"class":262},[67,62857,57075],{"class":73},[67,62859,29],{"class":262},[67,62861,323],{"class":73},[67,62863,62864,62866,62868,62870,62872,62874,62876,62878,62881,62883,62885,62887],{"class":69,"line":18499},[67,62865,62808],{"class":73},[67,62867,29],{"class":262},[67,62869,62813],{"class":73},[67,62871,2230],{"class":262},[67,62873,62818],{"class":110},[67,62875,85],{"class":73},[67,62877,62823],{"class":114},[67,62879,62880],{"class":73},">小米10S\u003C\u002F",[67,62882,2230],{"class":262},[67,62884,57075],{"class":73},[67,62886,29],{"class":262},[67,62888,323],{"class":73},[67,62890,62891,62893,62895,62897,62899,62901,62903,62905,62908,62910,62912,62914],{"class":69,"line":18510},[67,62892,62808],{"class":73},[67,62894,29],{"class":262},[67,62896,62813],{"class":73},[67,62898,2230],{"class":262},[67,62900,62818],{"class":110},[67,62902,85],{"class":73},[67,62904,62823],{"class":114},[67,62906,62907],{"class":73},">小米笔记本\u003C\u002F",[67,62909,2230],{"class":262},[67,62911,57075],{"class":73},[67,62913,29],{"class":262},[67,62915,323],{"class":73},[67,62917,62918,62920,62922,62924,62926,62928,62930,62932,62935,62937,62939,62941],{"class":69,"line":18533},[67,62919,62808],{"class":73},[67,62921,29],{"class":262},[67,62923,62813],{"class":73},[67,62925,2230],{"class":262},[67,62927,62818],{"class":110},[67,62929,85],{"class":73},[67,62931,62823],{"class":114},[67,62933,62934],{"class":73},">小米手机\u003C\u002F",[67,62936,2230],{"class":262},[67,62938,57075],{"class":73},[67,62940,29],{"class":262},[67,62942,323],{"class":73},[67,62944,62945,62947,62949,62951,62953,62955,62957,62959,62962,62964,62966,62968],{"class":69,"line":18555},[67,62946,62808],{"class":73},[67,62948,29],{"class":262},[67,62950,62813],{"class":73},[67,62952,2230],{"class":262},[67,62954,62818],{"class":110},[67,62956,85],{"class":73},[67,62958,62823],{"class":114},[67,62960,62961],{"class":73},">黑鲨4\u003C\u002F",[67,62963,2230],{"class":262},[67,62965,57075],{"class":73},[67,62967,29],{"class":262},[67,62969,323],{"class":73},[67,62971,62972,62974,62976,62978,62980,62982,62984,62986,62989,62991,62993,62995],{"class":69,"line":18560},[67,62973,62808],{"class":73},[67,62975,29],{"class":262},[67,62977,62813],{"class":73},[67,62979,2230],{"class":262},[67,62981,62818],{"class":110},[67,62983,85],{"class":73},[67,62985,62823],{"class":114},[67,62987,62988],{"class":73},">空调\u003C\u002F",[67,62990,2230],{"class":262},[67,62992,57075],{"class":73},[67,62994,29],{"class":262},[67,62996,323],{"class":73},[67,62998,62999,63002,63004],{"class":69,"line":18566},[67,63000,63001],{"class":73},"        \u003C\u002F",[67,63003,2994],{"class":262},[67,63005,323],{"class":73},[67,63007,63008,63010,63012],{"class":69,"line":18580},[67,63009,53542],{"class":73},[67,63011,53377],{"class":262},[67,63013,323],{"class":73},[67,63015,63016,63018,63020],{"class":69,"line":18593},[67,63017,53107],{"class":73},[67,63019,53578],{"class":262},[67,63021,323],{"class":73},[67,63023,63024],{"class":69,"line":18598},[67,63025,63026],{"class":2058},"        \u002F\u002F 1. 获取元素\n",[67,63028,63029,63032,63034,63036,63038,63040,63042,63045],{"class":69,"line":18612},[67,63030,63031],{"class":84},"        const",[67,63033,62366],{"class":77},[67,63035,671],{"class":84},[67,63037,56157],{"class":73},[67,63039,56160],{"class":110},[67,63041,854],{"class":73},[67,63043,63044],{"class":114},"'[type=search]'",[67,63046,829],{"class":73},[67,63048,63049,63051,63054,63056,63058,63060,63062,63065],{"class":69,"line":18617},[67,63050,63031],{"class":84},[67,63052,63053],{"class":77}," ul",[67,63055,671],{"class":84},[67,63057,56157],{"class":73},[67,63059,56160],{"class":110},[67,63061,854],{"class":73},[67,63063,63064],{"class":114},"'.result-list'",[67,63066,829],{"class":73},[67,63068,63069],{"class":69,"line":18623},[67,63070,63071],{"class":2058},"        \u002F\u002F console.log(input)\n",[67,63073,63074],{"class":69,"line":18628},[67,63075,63076],{"class":2058},"        \u002F\u002F 2. 监听事件 获得焦点\n",[67,63078,63079,63082,63084,63086,63089,63091,63093],{"class":69,"line":18642},[67,63080,63081],{"class":73},"        input.",[67,63083,59574],{"class":110},[67,63085,854],{"class":73},[67,63087,63088],{"class":114},"'focus'",[67,63090,1868],{"class":73},[67,63092,56210],{"class":84},[67,63094,56213],{"class":73},[67,63096,63097],{"class":69,"line":18647},[67,63098,63099],{"class":2058},"            \u002F\u002F ul显示\n",[67,63101,63102,63105,63107],{"class":69,"line":18652},[67,63103,63104],{"class":73},"            ul.style.display ",[67,63106,85],{"class":84},[67,63108,63109],{"class":114}," 'block'\n",[67,63111,63112],{"class":69,"line":18666},[67,63113,63114],{"class":2058},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[67,63116,63117,63120,63122,63124,63127],{"class":69,"line":18678},[67,63118,63119],{"class":73},"            input.classList.",[67,63121,7151],{"class":110},[67,63123,854],{"class":73},[67,63125,63126],{"class":114},"'search'",[67,63128,829],{"class":73},[67,63130,63131],{"class":69,"line":18683},[67,63132,63133],{"class":73},"        })\n",[67,63135,63136],{"class":69,"line":18696},[67,63137,63138],{"class":2058},"        \u002F\u002F 3. 监听事件 失去焦点\n",[67,63140,63141,63143,63145,63147,63150,63152,63154],{"class":69,"line":18701},[67,63142,63081],{"class":73},[67,63144,59574],{"class":110},[67,63146,854],{"class":73},[67,63148,63149],{"class":114},"'blur'",[67,63151,1868],{"class":73},[67,63153,56210],{"class":84},[67,63155,56213],{"class":73},[67,63157,63158,63160,63162],{"class":69,"line":18706},[67,63159,63104],{"class":73},[67,63161,85],{"class":84},[67,63163,63164],{"class":114}," 'none'\n",[67,63166,63167,63169,63171,63173,63175],{"class":69,"line":18711},[67,63168,63119],{"class":73},[67,63170,58767],{"class":110},[67,63172,854],{"class":73},[67,63174,63126],{"class":114},[67,63176,829],{"class":73},[67,63178,63179],{"class":69,"line":18724},[67,63180,63133],{"class":73},[67,63182,63183,63185,63187],{"class":69,"line":18729},[67,63184,53542],{"class":73},[67,63186,53578],{"class":262},[67,63188,323],{"class":73},[67,63190,63191,63193,63195],{"class":69,"line":34402},[67,63192,376],{"class":73},[67,63194,53565],{"class":262},[67,63196,323],{"class":73},[67,63198,63199],{"class":69,"line":34408},[67,63200,631],{"emptyLinePlaceholder":630},[67,63202,63203,63205,63207],{"class":69,"line":34414},[67,63204,376],{"class":73},[67,63206,52403],{"class":262},[67,63208,323],{"class":73},[23794,63210,63212],{"id":63211},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63214,63215],{},"评论字数统计案例",[19,63217,63218],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63220,63221],{},"牢记focus伪类选择器",[53110,63223],{"charSet":63224},"UTF-8",[53110,63226],{"name":63227,"content":63228},"viewport","width=device-width, initial-scale=1.0",[53173,63230,63231],{},"Document",[1903,63233,63234],{},"\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",[55583,63236],{"type":603},[2994,63238,63239,63242],{},[29,63240,63241],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[29,63243,63244],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[58,63246,63248],{"className":52401,"code":63247,"language":52403,"meta":63,"style":63},"\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",[32,63249,63250,63260,63274,63278,63286,63300,63320,63340,63353,63361,63368,63381,63395,63405,63415,63419,63423,63430,63442,63454,63466,63478,63507,63520,63524,63528,63537,63548,63560,63571,63582,63594,63605,63617,63632,63644,63648,63652,63663,63674,63684,63696,63700,63704,63712,63723,63733,63744,63756,63769,63781,63793,63797,63801,63810,63822,63833,63846,63857,63871,63875,63879,63886,63898,63910,63920,63924,63928,63937,63949,63959,63963,63967,63978,63988,64007,64020,64024,64028,64038,64048,64052,64056,64067,64078,64090,64102,64106,64110,64121,64132,64146,64150,64154,64165,64175,64187,64191,64199,64207,64211,64219,64234,64253,64293,64306,64314,64328,64348,64356,64371,64394,64412,64427,64447,64467,64487,64495,64503,64511,64519,64539,64559,64564,64581,64590,64594,64599,64615,64623,64627,64632,64649,64654,64679,64683,64687,64692,64697,64705,64713,64717],{"__ignoreMap":63},[67,63251,63252,63254,63256,63258],{"class":69,"line":70},[67,63253,53065],{"class":73},[67,63255,53068],{"class":262},[67,63257,53071],{"class":110},[67,63259,323],{"class":73},[67,63261,63262,63264,63266,63268,63270,63272],{"class":69,"line":191},[67,63263,259],{"class":73},[67,63265,52403],{"class":262},[67,63267,53082],{"class":110},[67,63269,85],{"class":73},[67,63271,53087],{"class":114},[67,63273,323],{"class":73},[67,63275,63276],{"class":69,"line":202},[67,63277,631],{"emptyLinePlaceholder":630},[67,63279,63280,63282,63284],{"class":69,"line":641},[67,63281,259],{"class":73},[67,63283,53100],{"class":262},[67,63285,323],{"class":73},[67,63287,63288,63290,63292,63294,63296,63298],{"class":69,"line":655},[67,63289,328],{"class":73},[67,63291,53110],{"class":262},[67,63293,53113],{"class":110},[67,63295,85],{"class":73},[67,63297,53118],{"class":114},[67,63299,323],{"class":73},[67,63301,63302,63304,63306,63308,63310,63312,63314,63316,63318],{"class":69,"line":660},[67,63303,328],{"class":73},[67,63305,53110],{"class":262},[67,63307,53129],{"class":110},[67,63309,85],{"class":73},[67,63311,53134],{"class":114},[67,63313,53137],{"class":110},[67,63315,85],{"class":73},[67,63317,53142],{"class":114},[67,63319,323],{"class":73},[67,63321,63322,63324,63326,63328,63330,63332,63334,63336,63338],{"class":69,"line":665},[67,63323,328],{"class":73},[67,63325,53110],{"class":262},[67,63327,266],{"class":110},[67,63329,85],{"class":73},[67,63331,53157],{"class":114},[67,63333,53137],{"class":110},[67,63335,85],{"class":73},[67,63337,53164],{"class":114},[67,63339,323],{"class":73},[67,63341,63342,63344,63346,63349,63351],{"class":69,"line":677},[67,63343,328],{"class":73},[67,63345,53173],{"class":262},[67,63347,63348],{"class":73},">评论回车发布\u003C\u002F",[67,63350,53173],{"class":262},[67,63352,323],{"class":73},[67,63354,63355,63357,63359],{"class":69,"line":683},[67,63356,328],{"class":73},[67,63358,1903],{"class":262},[67,63360,323],{"class":73},[67,63362,63363,63366],{"class":69,"line":689},[67,63364,63365],{"class":110},"    .wrapper",[67,63367,17369],{"class":73},[67,63369,63370,63373,63375,63377,63379],{"class":69,"line":694},[67,63371,63372],{"class":77},"      min-width",[67,63374,53203],{"class":73},[67,63376,5807],{"class":77},[67,63378,53258],{"class":84},[67,63380,3148],{"class":73},[67,63382,63383,63386,63388,63391,63393],{"class":69,"line":700},[67,63384,63385],{"class":77},"      max-width",[67,63387,53203],{"class":73},[67,63389,63390],{"class":77},"800",[67,63392,53258],{"class":84},[67,63394,3148],{"class":73},[67,63396,63397,63399,63401,63403],{"class":69,"line":706},[67,63398,56770],{"class":77},[67,63400,53203],{"class":73},[67,63402,53243],{"class":77},[67,63404,3148],{"class":73},[67,63406,63407,63409,63411,63413],{"class":69,"line":712},[67,63408,56781],{"class":77},[67,63410,53203],{"class":73},[67,63412,53346],{"class":77},[67,63414,3148],{"class":73},[67,63416,63417],{"class":69,"line":717},[67,63418,4020],{"class":73},[67,63420,63421],{"class":69,"line":723},[67,63422,631],{"emptyLinePlaceholder":630},[67,63424,63425,63428],{"class":69,"line":729},[67,63426,63427],{"class":110},"    .avatar",[67,63429,17369],{"class":73},[67,63431,63432,63434,63436,63438,63440],{"class":69,"line":735},[67,63433,56532],{"class":77},[67,63435,53203],{"class":73},[67,63437,2596],{"class":77},[67,63439,53258],{"class":84},[67,63441,3148],{"class":73},[67,63443,63444,63446,63448,63450,63452],{"class":69,"line":741},[67,63445,56546],{"class":77},[67,63447,53203],{"class":73},[67,63449,2596],{"class":77},[67,63451,53258],{"class":84},[67,63453,3148],{"class":73},[67,63455,63456,63458,63460,63462,63464],{"class":69,"line":747},[67,63457,56895],{"class":77},[67,63459,53203],{"class":73},[67,63461,2645],{"class":77},[67,63463,2319],{"class":84},[67,63465,3148],{"class":73},[67,63467,63468,63471,63473,63476],{"class":69,"line":753},[67,63469,63470],{"class":77},"      overflow",[67,63472,53203],{"class":73},[67,63474,63475],{"class":77},"hidden",[67,63477,3148],{"class":73},[67,63479,63480,63483,63485,63488,63490,63493,63495,63498,63500,63502,63505],{"class":69,"line":758},[67,63481,63482],{"class":77},"      background",[67,63484,53203],{"class":73},[67,63486,63487],{"class":77},"url",[67,63489,854],{"class":73},[67,63491,63492],{"class":7033},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[67,63494,15512],{"class":73},[67,63496,63497],{"class":77},"no-repeat",[67,63499,18941],{"class":77},[67,63501,26770],{"class":73},[67,63503,63504],{"class":77},"cover",[67,63506,3148],{"class":73},[67,63508,63509,63512,63514,63516,63518],{"class":69,"line":764},[67,63510,63511],{"class":77},"      margin-right",[67,63513,53203],{"class":73},[67,63515,2689],{"class":77},[67,63517,53258],{"class":84},[67,63519,3148],{"class":73},[67,63521,63522],{"class":69,"line":770},[67,63523,4020],{"class":73},[67,63525,63526],{"class":69,"line":776},[67,63527,631],{"emptyLinePlaceholder":630},[67,63529,63530,63532,63535],{"class":69,"line":782},[67,63531,63365],{"class":110},[67,63533,63534],{"class":262}," textarea",[67,63536,17369],{"class":73},[67,63538,63539,63542,63544,63546],{"class":69,"line":788},[67,63540,63541],{"class":77},"      outline",[67,63543,53203],{"class":73},[67,63545,56498],{"class":77},[67,63547,3148],{"class":73},[67,63549,63550,63553,63555,63558],{"class":69,"line":793},[67,63551,63552],{"class":77},"      border-color",[67,63554,53203],{"class":73},[67,63556,63557],{"class":77},"transparent",[67,63559,3148],{"class":73},[67,63561,63562,63565,63567,63569],{"class":69,"line":798},[67,63563,63564],{"class":77},"      resize",[67,63566,53203],{"class":73},[67,63568,56498],{"class":77},[67,63570,3148],{"class":73},[67,63572,63573,63575,63577,63580],{"class":69,"line":816},[67,63574,63482],{"class":77},[67,63576,53203],{"class":73},[67,63578,63579],{"class":77},"#f5f5f5",[67,63581,3148],{"class":73},[67,63583,63584,63586,63588,63590,63592],{"class":69,"line":832},[67,63585,56895],{"class":77},[67,63587,53203],{"class":73},[67,63589,1047],{"class":77},[67,63591,53258],{"class":84},[67,63593,3148],{"class":73},[67,63595,63596,63599,63601,63603],{"class":69,"line":843},[67,63597,63598],{"class":77},"      flex",[67,63600,53203],{"class":73},[67,63602,2209],{"class":77},[67,63604,3148],{"class":73},[67,63606,63607,63609,63611,63613,63615],{"class":69,"line":848},[67,63608,56456],{"class":77},[67,63610,53203],{"class":73},[67,63612,2437],{"class":77},[67,63614,53258],{"class":84},[67,63616,3148],{"class":73},[67,63618,63619,63622,63624,63626,63628,63630],{"class":69,"line":863},[67,63620,63621],{"class":77},"      transition",[67,63623,53203],{"class":73},[67,63625,29907],{"class":77},[67,63627,1002],{"class":77},[67,63629,2684],{"class":84},[67,63631,3148],{"class":73},[67,63633,63634,63636,63638,63640,63642],{"class":69,"line":876},[67,63635,56546],{"class":77},[67,63637,53203],{"class":73},[67,63639,2939],{"class":77},[67,63641,53258],{"class":84},[67,63643,3148],{"class":73},[67,63645,63646],{"class":69,"line":889},[67,63647,4020],{"class":73},[67,63649,63650],{"class":69,"line":894},[67,63651,631],{"emptyLinePlaceholder":630},[67,63653,63654,63656,63658,63661],{"class":69,"line":911},[67,63655,63365],{"class":110},[67,63657,63534],{"class":262},[67,63659,63660],{"class":110},":focus",[67,63662,17369],{"class":73},[67,63664,63665,63667,63669,63672],{"class":69,"line":927},[67,63666,63552],{"class":77},[67,63668,53203],{"class":73},[67,63670,63671],{"class":77},"#e4e4e4",[67,63673,3148],{"class":73},[67,63675,63676,63678,63680,63682],{"class":69,"line":932},[67,63677,63482],{"class":77},[67,63679,53203],{"class":73},[67,63681,62603],{"class":77},[67,63683,3148],{"class":73},[67,63685,63686,63688,63690,63692,63694],{"class":69,"line":955},[67,63687,56546],{"class":77},[67,63689,53203],{"class":73},[67,63691,2645],{"class":77},[67,63693,53258],{"class":84},[67,63695,3148],{"class":73},[67,63697,63698],{"class":69,"line":971},[67,63699,4020],{"class":73},[67,63701,63702],{"class":69,"line":1010},[67,63703,631],{"emptyLinePlaceholder":630},[67,63705,63706,63708,63710],{"class":69,"line":1016},[67,63707,63365],{"class":110},[67,63709,59228],{"class":262},[67,63711,17369],{"class":73},[67,63713,63714,63716,63718,63721],{"class":69,"line":1021},[67,63715,63482],{"class":77},[67,63717,53203],{"class":73},[67,63719,63720],{"class":77},"#00aeec",[67,63722,3148],{"class":73},[67,63724,63725,63727,63729,63731],{"class":69,"line":1034},[67,63726,59177],{"class":77},[67,63728,53203],{"class":73},[67,63730,62603],{"class":77},[67,63732,3148],{"class":73},[67,63734,63735,63738,63740,63742],{"class":69,"line":1053},[67,63736,63737],{"class":77},"      border",[67,63739,53203],{"class":73},[67,63741,56498],{"class":77},[67,63743,3148],{"class":73},[67,63745,63746,63748,63750,63752,63754],{"class":69,"line":1070},[67,63747,56895],{"class":77},[67,63749,53203],{"class":73},[67,63751,1047],{"class":77},[67,63753,53258],{"class":84},[67,63755,3148],{"class":73},[67,63757,63758,63761,63763,63765,63767],{"class":69,"line":1083},[67,63759,63760],{"class":77},"      margin-left",[67,63762,53203],{"class":73},[67,63764,2437],{"class":77},[67,63766,53258],{"class":84},[67,63768,3148],{"class":73},[67,63770,63771,63773,63775,63777,63779],{"class":69,"line":1088},[67,63772,56532],{"class":77},[67,63774,53203],{"class":73},[67,63776,2347],{"class":77},[67,63778,53258],{"class":84},[67,63780,3148],{"class":73},[67,63782,63783,63786,63788,63791],{"class":69,"line":1093},[67,63784,63785],{"class":77},"      cursor",[67,63787,53203],{"class":73},[67,63789,63790],{"class":77},"pointer",[67,63792,3148],{"class":73},[67,63794,63795],{"class":69,"line":1110},[67,63796,4020],{"class":73},[67,63798,63799],{"class":69,"line":11603},[67,63800,631],{"emptyLinePlaceholder":630},[67,63802,63803,63805,63808],{"class":69,"line":11612},[67,63804,63365],{"class":110},[67,63806,63807],{"class":110}," .total",[67,63809,17369],{"class":73},[67,63811,63812,63814,63816,63818,63820],{"class":69,"line":11617},[67,63813,63511],{"class":77},[67,63815,53203],{"class":73},[67,63817,2601],{"class":77},[67,63819,53258],{"class":84},[67,63821,3148],{"class":73},[67,63823,63824,63826,63828,63831],{"class":69,"line":11623},[67,63825,59177],{"class":77},[67,63827,53203],{"class":73},[67,63829,63830],{"class":77},"#999",[67,63832,3148],{"class":73},[67,63834,63835,63838,63840,63842,63844],{"class":69,"line":11644},[67,63836,63837],{"class":77},"      margin-top",[67,63839,53203],{"class":73},[67,63841,2310],{"class":77},[67,63843,53258],{"class":84},[67,63845,3148],{"class":73},[67,63847,63848,63851,63853,63855],{"class":69,"line":11650},[67,63849,63850],{"class":77},"      opacity",[67,63852,53203],{"class":73},[67,63854,78],{"class":77},[67,63856,3148],{"class":73},[67,63858,63859,63861,63863,63865,63867,63869],{"class":69,"line":11664},[67,63860,63621],{"class":77},[67,63862,53203],{"class":73},[67,63864,29907],{"class":77},[67,63866,1002],{"class":77},[67,63868,2684],{"class":84},[67,63870,3148],{"class":73},[67,63872,63873],{"class":69,"line":11670},[67,63874,4020],{"class":73},[67,63876,63877],{"class":69,"line":11697},[67,63878,631],{"emptyLinePlaceholder":630},[67,63880,63881,63884],{"class":69,"line":11706},[67,63882,63883],{"class":110},"    .list",[67,63885,17369],{"class":73},[67,63887,63888,63890,63892,63894,63896],{"class":69,"line":11712},[67,63889,63372],{"class":77},[67,63891,53203],{"class":73},[67,63893,5807],{"class":77},[67,63895,53258],{"class":84},[67,63897,3148],{"class":73},[67,63899,63900,63902,63904,63906,63908],{"class":69,"line":11720},[67,63901,63385],{"class":77},[67,63903,53203],{"class":73},[67,63905,63390],{"class":77},[67,63907,53258],{"class":84},[67,63909,3148],{"class":73},[67,63911,63912,63914,63916,63918],{"class":69,"line":11725},[67,63913,56770],{"class":77},[67,63915,53203],{"class":73},[67,63917,53243],{"class":77},[67,63919,3148],{"class":73},[67,63921,63922],{"class":69,"line":18401},[67,63923,4020],{"class":73},[67,63925,63926],{"class":69,"line":18407},[67,63927,631],{"emptyLinePlaceholder":630},[67,63929,63930,63932,63935],{"class":69,"line":18430},[67,63931,63883],{"class":110},[67,63933,63934],{"class":110}," .item",[67,63936,17369],{"class":73},[67,63938,63939,63941,63943,63945,63947],{"class":69,"line":18436},[67,63940,56532],{"class":77},[67,63942,53203],{"class":73},[67,63944,2302],{"class":77},[67,63946,2319],{"class":84},[67,63948,3148],{"class":73},[67,63950,63951,63953,63955,63957],{"class":69,"line":18459},[67,63952,56770],{"class":77},[67,63954,53203],{"class":73},[67,63956,53243],{"class":77},[67,63958,3148],{"class":73},[67,63960,63961],{"class":69,"line":18473},[67,63962,4020],{"class":73},[67,63964,63965],{"class":69,"line":18493},[67,63966,631],{"emptyLinePlaceholder":630},[67,63968,63969,63971,63973,63976],{"class":69,"line":18499},[67,63970,63883],{"class":110},[67,63972,63934],{"class":110},[67,63974,63975],{"class":110}," .info",[67,63977,17369],{"class":73},[67,63979,63980,63982,63984,63986],{"class":69,"line":18510},[67,63981,63598],{"class":77},[67,63983,53203],{"class":73},[67,63985,2209],{"class":77},[67,63987,3148],{"class":73},[67,63989,63990,63993,63995,63997,63999,64002,64005],{"class":69,"line":18533},[67,63991,63992],{"class":77},"      border-bottom",[67,63994,53203],{"class":73},[67,63996,2209],{"class":77},[67,63998,53258],{"class":84},[67,64000,64001],{"class":77}," dashed",[67,64003,64004],{"class":77}," #e4e4e4",[67,64006,3148],{"class":73},[67,64008,64009,64012,64014,64016,64018],{"class":69,"line":18555},[67,64010,64011],{"class":77},"      padding-bottom",[67,64013,53203],{"class":73},[67,64015,2437],{"class":77},[67,64017,53258],{"class":84},[67,64019,3148],{"class":73},[67,64021,64022],{"class":69,"line":18560},[67,64023,4020],{"class":73},[67,64025,64026],{"class":69,"line":18566},[67,64027,631],{"emptyLinePlaceholder":630},[67,64029,64030,64032,64034,64036],{"class":69,"line":18580},[67,64031,63883],{"class":110},[67,64033,63934],{"class":110},[67,64035,8641],{"class":262},[67,64037,17369],{"class":73},[67,64039,64040,64042,64044,64046],{"class":69,"line":18593},[67,64041,56467],{"class":77},[67,64043,53203],{"class":73},[67,64045,78],{"class":77},[67,64047,3148],{"class":73},[67,64049,64050],{"class":69,"line":18598},[67,64051,4020],{"class":73},[67,64053,64054],{"class":69,"line":18612},[67,64055,631],{"emptyLinePlaceholder":630},[67,64057,64058,64060,64062,64065],{"class":69,"line":18617},[67,64059,63883],{"class":110},[67,64061,63934],{"class":110},[67,64063,64064],{"class":110}," .name",[67,64066,17369],{"class":73},[67,64068,64069,64071,64073,64076],{"class":69,"line":18623},[67,64070,59177],{"class":77},[67,64072,53203],{"class":73},[67,64074,64075],{"class":77},"#FB7299",[67,64077,3148],{"class":73},[67,64079,64080,64082,64084,64086,64088],{"class":69,"line":18628},[67,64081,56683],{"class":77},[67,64083,53203],{"class":73},[67,64085,2538],{"class":77},[67,64087,53258],{"class":84},[67,64089,3148],{"class":73},[67,64091,64092,64095,64097,64100],{"class":69,"line":18642},[67,64093,64094],{"class":77},"      font-weight",[67,64096,53203],{"class":73},[67,64098,64099],{"class":77},"bold",[67,64101,3148],{"class":73},[67,64103,64104],{"class":69,"line":18647},[67,64105,4020],{"class":73},[67,64107,64108],{"class":69,"line":18652},[67,64109,631],{"emptyLinePlaceholder":630},[67,64111,64112,64114,64116,64119],{"class":69,"line":18666},[67,64113,63883],{"class":110},[67,64115,63934],{"class":110},[67,64117,64118],{"class":110}," .text",[67,64120,17369],{"class":73},[67,64122,64123,64125,64127,64130],{"class":69,"line":18678},[67,64124,59177],{"class":77},[67,64126,53203],{"class":73},[67,64128,64129],{"class":77},"#333",[67,64131,3148],{"class":73},[67,64133,64134,64136,64138,64140,64142,64144],{"class":69,"line":18683},[67,64135,56456],{"class":77},[67,64137,53203],{"class":73},[67,64139,2437],{"class":77},[67,64141,53258],{"class":84},[67,64143,5913],{"class":77},[67,64145,3148],{"class":73},[67,64147,64148],{"class":69,"line":18696},[67,64149,4020],{"class":73},[67,64151,64152],{"class":69,"line":18701},[67,64153,631],{"emptyLinePlaceholder":630},[67,64155,64156,64158,64160,64163],{"class":69,"line":18706},[67,64157,63883],{"class":110},[67,64159,63934],{"class":110},[67,64161,64162],{"class":110}," .time",[67,64164,17369],{"class":73},[67,64166,64167,64169,64171,64173],{"class":69,"line":18711},[67,64168,59177],{"class":77},[67,64170,53203],{"class":73},[67,64172,63830],{"class":77},[67,64174,3148],{"class":73},[67,64176,64177,64179,64181,64183,64185],{"class":69,"line":18724},[67,64178,56683],{"class":77},[67,64180,53203],{"class":73},[67,64182,2488],{"class":77},[67,64184,53258],{"class":84},[67,64186,3148],{"class":73},[67,64188,64189],{"class":69,"line":18729},[67,64190,4020],{"class":73},[67,64192,64193,64195,64197],{"class":69,"line":34402},[67,64194,54181],{"class":73},[67,64196,1903],{"class":262},[67,64198,323],{"class":73},[67,64200,64201,64203,64205],{"class":69,"line":34408},[67,64202,376],{"class":73},[67,64204,53100],{"class":262},[67,64206,323],{"class":73},[67,64208,64209],{"class":69,"line":34414},[67,64210,631],{"emptyLinePlaceholder":630},[67,64212,64213,64215,64217],{"class":69,"line":34420},[67,64214,259],{"class":73},[67,64216,53565],{"class":262},[67,64218,323],{"class":73},[67,64220,64221,64223,64225,64227,64229,64232],{"class":69,"line":34426},[67,64222,328],{"class":73},[67,64224,53377],{"class":262},[67,64226,55248],{"class":110},[67,64228,85],{"class":73},[67,64230,64231],{"class":114},"\"wrapper\"",[67,64233,323],{"class":73},[67,64235,64236,64238,64240,64242,64244,64247,64249,64251],{"class":69,"line":34437},[67,64237,53107],{"class":73},[67,64239,2432],{"class":262},[67,64241,55248],{"class":110},[67,64243,85],{"class":73},[67,64245,64246],{"class":114},"\"avatar\"",[67,64248,57075],{"class":73},[67,64250,2432],{"class":262},[67,64252,323],{"class":73},[67,64254,64255,64257,64259,64261,64263,64266,64268,64270,64273,64275,64277,64279,64282,64284,64287,64289,64291],{"class":69,"line":34443},[67,64256,53107],{"class":73},[67,64258,56049],{"class":262},[67,64260,16756],{"class":110},[67,64262,85],{"class":73},[67,64264,64265],{"class":114},"\"tx\"",[67,64267,62781],{"class":110},[67,64269,85],{"class":73},[67,64271,64272],{"class":114},"\"发一条友善的评论\"",[67,64274,56072],{"class":110},[67,64276,85],{"class":73},[67,64278,5522],{"class":114},[67,64280,64281],{"class":110}," maxlength",[67,64283,85],{"class":73},[67,64285,64286],{"class":114},"\"200\"",[67,64288,57075],{"class":73},[67,64290,56049],{"class":262},[67,64292,323],{"class":73},[67,64294,64295,64297,64299,64302,64304],{"class":69,"line":34463},[67,64296,53107],{"class":73},[67,64298,55648],{"class":262},[67,64300,64301],{"class":73},">发布\u003C\u002F",[67,64303,55648],{"class":262},[67,64305,323],{"class":73},[67,64307,64308,64310,64312],{"class":69,"line":34469},[67,64309,54181],{"class":73},[67,64311,53377],{"class":262},[67,64313,323],{"class":73},[67,64315,64316,64318,64320,64322,64324,64326],{"class":69,"line":34480},[67,64317,328],{"class":73},[67,64319,53377],{"class":262},[67,64321,55248],{"class":110},[67,64323,85],{"class":73},[67,64325,64231],{"class":114},[67,64327,323],{"class":73},[67,64329,64330,64332,64334,64336,64338,64341,64344,64346],{"class":69,"line":34486},[67,64331,53107],{"class":73},[67,64333,67],{"class":262},[67,64335,55248],{"class":110},[67,64337,85],{"class":73},[67,64339,64340],{"class":114},"\"total\"",[67,64342,64343],{"class":73},">0\u002F200字\u003C\u002F",[67,64345,67],{"class":262},[67,64347,323],{"class":73},[67,64349,64350,64352,64354],{"class":69,"line":34492},[67,64351,54181],{"class":73},[67,64353,53377],{"class":262},[67,64355,323],{"class":73},[67,64357,64358,64360,64362,64364,64366,64369],{"class":69,"line":34498},[67,64359,328],{"class":73},[67,64361,53377],{"class":262},[67,64363,55248],{"class":110},[67,64365,85],{"class":73},[67,64367,64368],{"class":114},"\"list\"",[67,64370,323],{"class":73},[67,64372,64373,64375,64377,64379,64381,64384,64387,64389,64392],{"class":69,"line":34504},[67,64374,53107],{"class":73},[67,64376,53377],{"class":262},[67,64378,55248],{"class":110},[67,64380,85],{"class":73},[67,64382,64383],{"class":114},"\"item\"",[67,64385,64386],{"class":110}," style",[67,64388,85],{"class":73},[67,64390,64391],{"class":114},"\"display: none;\"",[67,64393,323],{"class":73},[67,64395,64396,64398,64400,64402,64404,64406,64408,64410],{"class":69,"line":34510},[67,64397,56995],{"class":73},[67,64399,2432],{"class":262},[67,64401,55248],{"class":110},[67,64403,85],{"class":73},[67,64405,64246],{"class":114},[67,64407,57075],{"class":73},[67,64409,2432],{"class":262},[67,64411,323],{"class":73},[67,64413,64414,64416,64418,64420,64422,64425],{"class":69,"line":34516},[67,64415,56995],{"class":73},[67,64417,53377],{"class":262},[67,64419,55248],{"class":110},[67,64421,85],{"class":73},[67,64423,64424],{"class":114},"\"info\"",[67,64426,323],{"class":73},[67,64428,64429,64431,64433,64435,64437,64440,64443,64445],{"class":69,"line":34522},[67,64430,57063],{"class":73},[67,64432,19],{"class":262},[67,64434,55248],{"class":110},[67,64436,85],{"class":73},[67,64438,64439],{"class":114},"\"name\"",[67,64441,64442],{"class":73},">清风徐来\u003C\u002F",[67,64444,19],{"class":262},[67,64446,323],{"class":73},[67,64448,64449,64451,64453,64455,64457,64460,64463,64465],{"class":69,"line":34542},[67,64450,57063],{"class":73},[67,64452,19],{"class":262},[67,64454,55248],{"class":110},[67,64456,85],{"class":73},[67,64458,64459],{"class":114},"\"text\"",[67,64461,64462],{"class":73},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[67,64464,19],{"class":262},[67,64466,323],{"class":73},[67,64468,64469,64471,64473,64475,64477,64480,64483,64485],{"class":69,"line":34548},[67,64470,57063],{"class":73},[67,64472,19],{"class":262},[67,64474,55248],{"class":110},[67,64476,85],{"class":73},[67,64478,64479],{"class":114},"\"time\"",[67,64481,64482],{"class":73},">2022-10-10 20:29:21\u003C\u002F",[67,64484,19],{"class":262},[67,64486,323],{"class":73},[67,64488,64489,64491,64493],{"class":69,"line":34564},[67,64490,57168],{"class":73},[67,64492,53377],{"class":262},[67,64494,323],{"class":73},[67,64496,64497,64499,64501],{"class":69,"line":34570},[67,64498,53542],{"class":73},[67,64500,53377],{"class":262},[67,64502,323],{"class":73},[67,64504,64505,64507,64509],{"class":69,"line":34584},[67,64506,54181],{"class":73},[67,64508,53377],{"class":262},[67,64510,323],{"class":73},[67,64512,64513,64515,64517],{"class":69,"line":34590},[67,64514,328],{"class":73},[67,64516,53578],{"class":262},[67,64518,323],{"class":73},[67,64520,64521,64523,64526,64528,64530,64532,64534,64537],{"class":69,"line":34605},[67,64522,13021],{"class":84},[67,64524,64525],{"class":77}," tx",[67,64527,671],{"class":84},[67,64529,56157],{"class":73},[67,64531,56160],{"class":110},[67,64533,854],{"class":73},[67,64535,64536],{"class":114},"'#tx'",[67,64538,829],{"class":73},[67,64540,64541,64543,64546,64548,64550,64552,64554,64557],{"class":69,"line":34611},[67,64542,13021],{"class":84},[67,64544,64545],{"class":77}," total",[67,64547,671],{"class":84},[67,64549,56157],{"class":73},[67,64551,56160],{"class":110},[67,64553,854],{"class":73},[67,64555,64556],{"class":114},"'.total'",[67,64558,829],{"class":73},[67,64560,64561],{"class":69,"line":34620},[67,64562,64563],{"class":2058},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[67,64565,64566,64569,64571,64573,64575,64577,64579],{"class":69,"line":34626},[67,64567,64568],{"class":73},"    tx.",[67,64570,59574],{"class":110},[67,64572,854],{"class":73},[67,64574,63088],{"class":114},[67,64576,1868],{"class":73},[67,64578,56210],{"class":84},[67,64580,56213],{"class":73},[67,64582,64583,64586,64588],{"class":69,"line":34635},[67,64584,64585],{"class":73},"      total.style.opacity ",[67,64587,85],{"class":84},[67,64589,57460],{"class":77},[67,64591,64592],{"class":69,"line":34641},[67,64593,35230],{"class":73},[67,64595,64596],{"class":69,"line":34647},[67,64597,64598],{"class":2058},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[67,64600,64601,64603,64605,64607,64609,64611,64613],{"class":69,"line":34656},[67,64602,64568],{"class":73},[67,64604,59574],{"class":110},[67,64606,854],{"class":73},[67,64608,63149],{"class":114},[67,64610,1868],{"class":73},[67,64612,56210],{"class":84},[67,64614,56213],{"class":73},[67,64616,64617,64619,64621],{"class":69,"line":34662},[67,64618,64585],{"class":73},[67,64620,85],{"class":84},[67,64622,49101],{"class":77},[67,64624,64625],{"class":69,"line":34673},[67,64626,35230],{"class":73},[67,64628,64629],{"class":69,"line":34679},[67,64630,64631],{"class":2058},"    \u002F\u002F 3. 检测用户输入\n",[67,64633,64634,64636,64638,64640,64643,64645,64647],{"class":69,"line":34698},[67,64635,64568],{"class":73},[67,64637,59574],{"class":110},[67,64639,854],{"class":73},[67,64641,64642],{"class":114},"'input'",[67,64644,1868],{"class":73},[67,64646,56210],{"class":84},[67,64648,56213],{"class":73},[67,64650,64651],{"class":69,"line":34704},[67,64652,64653],{"class":2058},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[67,64655,64656,64659,64661,64664,64667,64669,64672,64674,64676],{"class":69,"line":34715},[67,64657,64658],{"class":73},"      total.innerHTML ",[67,64660,85],{"class":84},[67,64662,64663],{"class":114}," `${",[67,64665,64666],{"class":73},"tx",[67,64668,2547],{"class":114},[67,64670,64671],{"class":73},"value",[67,64673,2547],{"class":114},[67,64675,53733],{"class":77},[67,64677,64678],{"class":114},"}\u002F200字`\n",[67,64680,64681],{"class":69,"line":34721},[67,64682,35230],{"class":73},[67,64684,64685],{"class":69,"line":34741},[67,64686,631],{"emptyLinePlaceholder":630},[67,64688,64689],{"class":69,"line":34757},[67,64690,64691],{"class":2058},"    \u002F\u002F const str = 'andy'\n",[67,64693,64694],{"class":69,"line":34763},[67,64695,64696],{"class":2058},"    \u002F\u002F console.log(str.length)\n",[67,64698,64699,64701,64703],{"class":69,"line":34777},[67,64700,54181],{"class":73},[67,64702,53578],{"class":262},[67,64704,323],{"class":73},[67,64706,64707,64709,64711],{"class":69,"line":34783},[67,64708,376],{"class":73},[67,64710,53565],{"class":262},[67,64712,323],{"class":73},[67,64714,64715],{"class":69,"line":34789},[67,64716,631],{"emptyLinePlaceholder":630},[67,64718,64719,64721,64723],{"class":69,"line":34800},[67,64720,376],{"class":73},[67,64722,52403],{"class":262},[67,64724,323],{"class":73},[23794,64726,64728],{"id":64727},"_3254-change事件","3.2.5.4 change事件",[19,64730,64731],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64733,64734],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64736,64737],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[58,64739,64741],{"className":52401,"code":64740,"language":52403,"meta":63,"style":63},"\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",[32,64742,64743,64753,64767,64771,64779,64793,64813,64825,64833,64837,64845,64859,64867,64885,64903,64915,64919,64927,64935,64939],{"__ignoreMap":63},[67,64744,64745,64747,64749,64751],{"class":69,"line":70},[67,64746,53065],{"class":73},[67,64748,53068],{"class":262},[67,64750,53071],{"class":110},[67,64752,323],{"class":73},[67,64754,64755,64757,64759,64761,64763,64765],{"class":69,"line":191},[67,64756,259],{"class":73},[67,64758,52403],{"class":262},[67,64760,53082],{"class":110},[67,64762,85],{"class":73},[67,64764,53087],{"class":114},[67,64766,323],{"class":73},[67,64768,64769],{"class":69,"line":202},[67,64770,631],{"emptyLinePlaceholder":630},[67,64772,64773,64775,64777],{"class":69,"line":641},[67,64774,259],{"class":73},[67,64776,53100],{"class":262},[67,64778,323],{"class":73},[67,64780,64781,64783,64785,64787,64789,64791],{"class":69,"line":655},[67,64782,328],{"class":73},[67,64784,53110],{"class":262},[67,64786,53113],{"class":110},[67,64788,85],{"class":73},[67,64790,53118],{"class":114},[67,64792,323],{"class":73},[67,64794,64795,64797,64799,64801,64803,64805,64807,64809,64811],{"class":69,"line":660},[67,64796,328],{"class":73},[67,64798,53110],{"class":262},[67,64800,266],{"class":110},[67,64802,85],{"class":73},[67,64804,53157],{"class":114},[67,64806,53137],{"class":110},[67,64808,85],{"class":73},[67,64810,53164],{"class":114},[67,64812,323],{"class":73},[67,64814,64815,64817,64819,64821,64823],{"class":69,"line":665},[67,64816,328],{"class":73},[67,64818,53173],{"class":262},[67,64820,53176],{"class":73},[67,64822,53173],{"class":262},[67,64824,323],{"class":73},[67,64826,64827,64829,64831],{"class":69,"line":677},[67,64828,376],{"class":73},[67,64830,53100],{"class":262},[67,64832,323],{"class":73},[67,64834,64835],{"class":69,"line":683},[67,64836,631],{"emptyLinePlaceholder":630},[67,64838,64839,64841,64843],{"class":69,"line":689},[67,64840,259],{"class":73},[67,64842,53565],{"class":262},[67,64844,323],{"class":73},[67,64846,64847,64849,64851,64853,64855,64857],{"class":69,"line":694},[67,64848,328],{"class":73},[67,64850,55583],{"class":262},[67,64852,274],{"class":110},[67,64854,85],{"class":73},[67,64856,64459],{"class":114},[67,64858,323],{"class":73},[67,64860,64861,64863,64865],{"class":69,"line":700},[67,64862,328],{"class":73},[67,64864,53578],{"class":262},[67,64866,323],{"class":73},[67,64868,64869,64871,64873,64875,64877,64879,64881,64883],{"class":69,"line":706},[67,64870,13021],{"class":84},[67,64872,62366],{"class":77},[67,64874,671],{"class":84},[67,64876,56157],{"class":73},[67,64878,56160],{"class":110},[67,64880,854],{"class":73},[67,64882,64642],{"class":114},[67,64884,829],{"class":73},[67,64886,64887,64890,64892,64894,64897,64899,64901],{"class":69,"line":712},[67,64888,64889],{"class":73},"    input.",[67,64891,59574],{"class":110},[67,64893,854],{"class":73},[67,64895,64896],{"class":114},"'change'",[67,64898,1868],{"class":73},[67,64900,56210],{"class":84},[67,64902,56213],{"class":73},[67,64904,64905,64907,64909,64911,64913],{"class":69,"line":717},[67,64906,60005],{"class":73},[67,64908,60008],{"class":110},[67,64910,854],{"class":73},[67,64912,2582],{"class":77},[67,64914,829],{"class":73},[67,64916,64917],{"class":69,"line":723},[67,64918,35230],{"class":73},[67,64920,64921,64923,64925],{"class":69,"line":729},[67,64922,54181],{"class":73},[67,64924,53578],{"class":262},[67,64926,323],{"class":73},[67,64928,64929,64931,64933],{"class":69,"line":735},[67,64930,376],{"class":73},[67,64932,53565],{"class":262},[67,64934,323],{"class":73},[67,64936,64937],{"class":69,"line":741},[67,64938,631],{"emptyLinePlaceholder":630},[67,64940,64941,64943,64945],{"class":69,"line":747},[67,64942,376],{"class":73},[67,64944,52403],{"class":262},[67,64946,323],{"class":73},[19,64948,64949],{},"总结：内容发生改变才回去触发",[391,64951,64953],{"id":64952},"_326-事件对象","3.2.6 事件对象",[23794,64955,64957],{"id":64956},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64959,64960],{},[3317,64961],{"alt":63,"src":64962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64964,64965],{},[3317,64966],{"alt":63,"src":64967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64969,64970],{},"点击一次，就输出了事件对象，它是个对象",[19,64972,64973],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64975,64976],{},[3317,64977],{"alt":63,"src":64978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23794,64980,64982],{"id":64981},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64984,64985],{},[3317,64986],{"alt":63,"src":64987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64989,64990],{},"实现按特殊字符才是实现打印输出效果：",[58,64992,64994],{"className":250,"code":64993,"language":252,"meta":63,"style":63},"\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",[32,64995,64996,65004,65009,65023,65031,65036,65041,65046,65051,65056,65061,65066,65071,65076,65080,65084,65092],{"__ignoreMap":63},[67,64997,64998,65000,65002],{"class":69,"line":70},[67,64999,259],{"class":73},[67,65001,53565],{"class":262},[67,65003,323],{"class":73},[67,65005,65006],{"class":69,"line":191},[67,65007,65008],{"class":2058},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[67,65010,65011,65013,65015,65017,65019,65021],{"class":69,"line":202},[67,65012,328],{"class":73},[67,65014,55583],{"class":262},[67,65016,274],{"class":110},[67,65018,85],{"class":73},[67,65020,64459],{"class":114},[67,65022,323],{"class":73},[67,65024,65025,65027,65029],{"class":69,"line":641},[67,65026,328],{"class":73},[67,65028,53578],{"class":262},[67,65030,323],{"class":73},[67,65032,65033],{"class":69,"line":655},[67,65034,65035],{"class":73},"    \u002F\u002F const btn = document.querySelector('button')\n",[67,65037,65038],{"class":69,"line":660},[67,65039,65040],{"class":73},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[67,65042,65043],{"class":69,"line":665},[67,65044,65045],{"class":73},"    \u002F\u002F   console.log(e);\n",[67,65047,65048],{"class":69,"line":677},[67,65049,65050],{"class":73},"    \u002F\u002F })\n",[67,65052,65053],{"class":69,"line":683},[67,65054,65055],{"class":73},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[67,65057,65058],{"class":69,"line":689},[67,65059,65060],{"class":73},"    const input = document.querySelector('input')\n",[67,65062,65063],{"class":69,"line":694},[67,65064,65065],{"class":73},"    input.addEventListener('keyup', function (e) {\n",[67,65067,65068],{"class":69,"line":700},[67,65069,65070],{"class":73},"      if (e.key === 'Enter') {\n",[67,65072,65073],{"class":69,"line":706},[67,65074,65075],{"class":73},"        console.log('我按下了回车键')\n",[67,65077,65078],{"class":69,"line":712},[67,65079,54162],{"class":73},[67,65081,65082],{"class":69,"line":717},[67,65083,35230],{"class":73},[67,65085,65086,65088,65090],{"class":69,"line":723},[67,65087,54181],{"class":73},[67,65089,53578],{"class":262},[67,65091,323],{"class":73},[67,65093,65094,65096,65098],{"class":69,"line":729},[67,65095,376],{"class":73},[67,65097,53565],{"class":262},[67,65099,323],{"class":73},[23794,65101,65103],{"id":65102},"_3263-trim方法","3.2.6.3 trim方法",[19,65105,65106],{},[3317,65107],{"alt":63,"src":65108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65110,65111],{},[3317,65112],{"alt":63,"src":65113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65115,65116],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65118,65119],{},"str.trim()",[391,65121,65123],{"id":65122},"_327-环境对象","3.2.7 环境对象",[19,65125,65126],{},[3317,65127],{"alt":63,"src":65128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65130,65131],{},[3317,65132],{"alt":63,"src":65133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65135,65136],{},[3317,65137],{"alt":63,"src":65138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65140,65141],{},"实际函数调用是window.fn()",[19,65143,65144],{},"普通函数里面this指向的是window",[2994,65146,65147,65150,65153],{},[29,65148,65149],{},"在普通函数下，this指向的是window",[29,65151,65152],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[29,65154,65155],{},"箭头函数没有this",[19,65157,65158],{},"粗略记法就是：谁调用，this就指向谁",[19,65160,65161],{},[3317,65162],{"alt":63,"src":65163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65165,65166],{},[3317,65167],{"alt":63,"src":65168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65170,65171],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65173,65174],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[58,65176,65178],{"className":250,"code":65177,"language":252,"meta":63,"style":63},"\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",[32,65179,65180,65188,65200,65208,65213,65218,65223,65228,65232,65240],{"__ignoreMap":63},[67,65181,65182,65184,65186],{"class":69,"line":70},[67,65183,259],{"class":73},[67,65185,53565],{"class":262},[67,65187,323],{"class":73},[67,65189,65190,65192,65194,65196,65198],{"class":69,"line":191},[67,65191,328],{"class":73},[67,65193,55648],{"class":262},[67,65195,55654],{"class":73},[67,65197,55648],{"class":262},[67,65199,323],{"class":73},[67,65201,65202,65204,65206],{"class":69,"line":202},[67,65203,328],{"class":73},[67,65205,53578],{"class":262},[67,65207,323],{"class":73},[67,65209,65210],{"class":69,"line":641},[67,65211,65212],{"class":73},"    const button = document.querySelector('button')\n",[67,65214,65215],{"class":69,"line":655},[67,65216,65217],{"class":73},"    button.addEventListener('click', function () {\n",[67,65219,65220],{"class":69,"line":660},[67,65221,65222],{"class":73},"      \u002F\u002F console.log(this);\n",[67,65224,65225],{"class":69,"line":665},[67,65226,65227],{"class":73},"      this.style.color = 'pink'\n",[67,65229,65230],{"class":69,"line":677},[67,65231,35230],{"class":73},[67,65233,65234,65236,65238],{"class":69,"line":683},[67,65235,54181],{"class":73},[67,65237,53578],{"class":262},[67,65239,323],{"class":73},[67,65241,65242,65244,65246],{"class":69,"line":689},[67,65243,376],{"class":73},[67,65245,53565],{"class":262},[67,65247,323],{"class":73},[391,65249,65251],{"id":65250},"_328-回调函数","3.2.8 回调函数",[19,65253,65254],{},[3317,65255],{"alt":63,"src":65256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65258,65259],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65261,13132],{},[2994,65263,65264,65267,65270],{},[29,65265,65266],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[29,65268,65269],{},"回调函数本质还是函数，只不过把它当成参数使用",[29,65271,65272],{},"使用匿名函数做为回调函数比较常见",[391,65274,65276],{"id":65275},"_329-tab栏切换","3.2.9 tab栏切换",[19,65278,65279],{},[3317,65280],{"alt":63,"src":65281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[58,65283,65285],{"className":52401,"code":65284,"language":52403,"meta":63,"style":63},"\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",[32,65286,65287,65297,65311,65315,65323,65337,65357,65377,65390,65398,65404,65414,65424,65428,65432,65439,65452,65465,65477,65493,65497,65501,65508,65520,65532,65544,65554,65564,65568,65572,65581,65593,65604,65616,65620,65624,65632,65642,65652,65662,65666,65670,65680,65694,65706,65710,65714,65726,65737,65754,65764,65768,65772,65787,65798,65808,65812,65816,65823,65838,65842,65846,65854,65864,65868,65872,65881,65891,65895,65903,65911,65915,65923,65938,65953,65966,65974,66008,66035,66062,66089,66116,66124,66132,66147,66184,66219,66254,66289,66324,66332,66340,66348,66353,66358,66378,66383,66412,66417,66422,66440,66445,66450,66455,66477,66482,66498,66502,66507,66512,66533,66538,66567,66571,66576,66580,66588,66596,66600],{"__ignoreMap":63},[67,65288,65289,65291,65293,65295],{"class":69,"line":70},[67,65290,53065],{"class":73},[67,65292,53068],{"class":262},[67,65294,53071],{"class":110},[67,65296,323],{"class":73},[67,65298,65299,65301,65303,65305,65307,65309],{"class":69,"line":191},[67,65300,259],{"class":73},[67,65302,52403],{"class":262},[67,65304,53082],{"class":110},[67,65306,85],{"class":73},[67,65308,53087],{"class":114},[67,65310,323],{"class":73},[67,65312,65313],{"class":69,"line":202},[67,65314,631],{"emptyLinePlaceholder":630},[67,65316,65317,65319,65321],{"class":69,"line":641},[67,65318,259],{"class":73},[67,65320,53100],{"class":262},[67,65322,323],{"class":73},[67,65324,65325,65327,65329,65331,65333,65335],{"class":69,"line":655},[67,65326,328],{"class":73},[67,65328,53110],{"class":262},[67,65330,53113],{"class":110},[67,65332,85],{"class":73},[67,65334,53118],{"class":114},[67,65336,60888],{"class":73},[67,65338,65339,65341,65343,65345,65347,65349,65351,65353,65355],{"class":69,"line":660},[67,65340,328],{"class":73},[67,65342,53110],{"class":262},[67,65344,53129],{"class":110},[67,65346,85],{"class":73},[67,65348,53134],{"class":114},[67,65350,53137],{"class":110},[67,65352,85],{"class":73},[67,65354,53142],{"class":114},[67,65356,60888],{"class":73},[67,65358,65359,65361,65363,65365,65367,65369,65371,65373,65375],{"class":69,"line":665},[67,65360,328],{"class":73},[67,65362,53110],{"class":262},[67,65364,266],{"class":110},[67,65366,85],{"class":73},[67,65368,53157],{"class":114},[67,65370,53137],{"class":110},[67,65372,85],{"class":73},[67,65374,53164],{"class":114},[67,65376,60888],{"class":73},[67,65378,65379,65381,65383,65386,65388],{"class":69,"line":677},[67,65380,328],{"class":73},[67,65382,53173],{"class":262},[67,65384,65385],{"class":73},">tab栏切换\u003C\u002F",[67,65387,53173],{"class":262},[67,65389,323],{"class":73},[67,65391,65392,65394,65396],{"class":69,"line":683},[67,65393,328],{"class":73},[67,65395,1903],{"class":262},[67,65397,323],{"class":73},[67,65399,65400,65402],{"class":69,"line":689},[67,65401,8220],{"class":262},[67,65403,17369],{"class":73},[67,65405,65406,65408,65410,65412],{"class":69,"line":694},[67,65407,56467],{"class":77},[67,65409,53203],{"class":73},[67,65411,78],{"class":77},[67,65413,3148],{"class":73},[67,65415,65416,65418,65420,65422],{"class":69,"line":700},[67,65417,56456],{"class":77},[67,65419,53203],{"class":73},[67,65421,78],{"class":77},[67,65423,3148],{"class":73},[67,65425,65426],{"class":69,"line":706},[67,65427,4020],{"class":73},[67,65429,65430],{"class":69,"line":712},[67,65431,631],{"emptyLinePlaceholder":630},[67,65433,65434,65437],{"class":69,"line":717},[67,65435,65436],{"class":110},"    .tab",[67,65438,17369],{"class":73},[67,65440,65441,65443,65445,65448,65450],{"class":69,"line":723},[67,65442,56532],{"class":77},[67,65444,53203],{"class":73},[67,65446,65447],{"class":77},"590",[67,65449,53258],{"class":84},[67,65451,3148],{"class":73},[67,65453,65454,65456,65458,65461,65463],{"class":69,"line":729},[67,65455,56546],{"class":77},[67,65457,53203],{"class":73},[67,65459,65460],{"class":77},"340",[67,65462,53258],{"class":84},[67,65464,3148],{"class":73},[67,65466,65467,65469,65471,65473,65475],{"class":69,"line":735},[67,65468,56467],{"class":77},[67,65470,53203],{"class":73},[67,65472,2689],{"class":77},[67,65474,53258],{"class":84},[67,65476,3148],{"class":73},[67,65478,65479,65481,65483,65485,65487,65489,65491],{"class":69,"line":741},[67,65480,63737],{"class":77},[67,65482,53203],{"class":73},[67,65484,2209],{"class":77},[67,65486,53258],{"class":84},[67,65488,53287],{"class":77},[67,65490,64004],{"class":77},[67,65492,3148],{"class":73},[67,65494,65495],{"class":69,"line":747},[67,65496,4020],{"class":73},[67,65498,65499],{"class":69,"line":753},[67,65500,631],{"emptyLinePlaceholder":630},[67,65502,65503,65506],{"class":69,"line":758},[67,65504,65505],{"class":110},"    .tab-nav",[67,65507,17369],{"class":73},[67,65509,65510,65512,65514,65516,65518],{"class":69,"line":764},[67,65511,56532],{"class":77},[67,65513,53203],{"class":73},[67,65515,2302],{"class":77},[67,65517,2319],{"class":84},[67,65519,3148],{"class":73},[67,65521,65522,65524,65526,65528,65530],{"class":69,"line":770},[67,65523,56546],{"class":77},[67,65525,53203],{"class":73},[67,65527,2896],{"class":77},[67,65529,53258],{"class":84},[67,65531,3148],{"class":73},[67,65533,65534,65536,65538,65540,65542],{"class":69,"line":776},[67,65535,59120],{"class":77},[67,65537,53203],{"class":73},[67,65539,2896],{"class":77},[67,65541,53258],{"class":84},[67,65543,3148],{"class":73},[67,65545,65546,65548,65550,65552],{"class":69,"line":782},[67,65547,56770],{"class":77},[67,65549,53203],{"class":73},[67,65551,53243],{"class":77},[67,65553,3148],{"class":73},[67,65555,65556,65558,65560,65562],{"class":69,"line":788},[67,65557,56781],{"class":77},[67,65559,53203],{"class":73},[67,65561,53434],{"class":77},[67,65563,3148],{"class":73},[67,65565,65566],{"class":69,"line":793},[67,65567,4020],{"class":73},[67,65569,65570],{"class":69,"line":798},[67,65571,631],{"emptyLinePlaceholder":630},[67,65573,65574,65576,65579],{"class":69,"line":816},[67,65575,65505],{"class":110},[67,65577,65578],{"class":262}," h3",[67,65580,17369],{"class":73},[67,65582,65583,65585,65587,65589,65591],{"class":69,"line":832},[67,65584,56683],{"class":77},[67,65586,53203],{"class":73},[67,65588,2789],{"class":77},[67,65590,53258],{"class":84},[67,65592,3148],{"class":73},[67,65594,65595,65597,65599,65602],{"class":69,"line":843},[67,65596,64094],{"class":77},[67,65598,53203],{"class":73},[67,65600,65601],{"class":77},"normal",[67,65603,3148],{"class":73},[67,65605,65606,65608,65610,65612,65614],{"class":69,"line":848},[67,65607,63760],{"class":77},[67,65609,53203],{"class":73},[67,65611,2689],{"class":77},[67,65613,53258],{"class":84},[67,65615,3148],{"class":73},[67,65617,65618],{"class":69,"line":863},[67,65619,4020],{"class":73},[67,65621,65622],{"class":69,"line":876},[67,65623,631],{"emptyLinePlaceholder":630},[67,65625,65626,65628,65630],{"class":69,"line":889},[67,65627,65505],{"class":110},[67,65629,63053],{"class":262},[67,65631,17369],{"class":73},[67,65633,65634,65636,65638,65640],{"class":69,"line":894},[67,65635,56493],{"class":77},[67,65637,53203],{"class":73},[67,65639,56498],{"class":77},[67,65641,3148],{"class":73},[67,65643,65644,65646,65648,65650],{"class":69,"line":911},[67,65645,56770],{"class":77},[67,65647,53203],{"class":73},[67,65649,53243],{"class":77},[67,65651,3148],{"class":73},[67,65653,65654,65656,65658,65660],{"class":69,"line":927},[67,65655,56781],{"class":77},[67,65657,53203],{"class":73},[67,65659,53346],{"class":77},[67,65661,3148],{"class":73},[67,65663,65664],{"class":69,"line":932},[67,65665,4020],{"class":73},[67,65667,65668],{"class":69,"line":955},[67,65669,631],{"emptyLinePlaceholder":630},[67,65671,65672,65674,65676,65678],{"class":69,"line":971},[67,65673,65505],{"class":110},[67,65675,63053],{"class":262},[67,65677,56836],{"class":262},[67,65679,17369],{"class":73},[67,65681,65682,65684,65686,65688,65690,65692],{"class":69,"line":1010},[67,65683,56467],{"class":77},[67,65685,53203],{"class":73},[67,65687,78],{"class":77},[67,65689,10756],{"class":77},[67,65691,53258],{"class":84},[67,65693,3148],{"class":73},[67,65695,65696,65698,65700,65702,65704],{"class":69,"line":1016},[67,65697,56683],{"class":77},[67,65699,53203],{"class":73},[67,65701,2538],{"class":77},[67,65703,53258],{"class":84},[67,65705,3148],{"class":73},[67,65707,65708],{"class":69,"line":1021},[67,65709,4020],{"class":73},[67,65711,65712],{"class":69,"line":1034},[67,65713,631],{"emptyLinePlaceholder":630},[67,65715,65716,65718,65720,65722,65724],{"class":69,"line":1053},[67,65717,65505],{"class":110},[67,65719,63053],{"class":262},[67,65721,56836],{"class":262},[67,65723,3253],{"class":262},[67,65725,17369],{"class":73},[67,65727,65728,65731,65733,65735],{"class":69,"line":1070},[67,65729,65730],{"class":77},"      text-decoration",[67,65732,53203],{"class":73},[67,65734,56498],{"class":77},[67,65736,3148],{"class":73},[67,65738,65739,65741,65743,65745,65747,65749,65752],{"class":69,"line":1083},[67,65740,63992],{"class":77},[67,65742,53203],{"class":73},[67,65744,2077],{"class":77},[67,65746,53258],{"class":84},[67,65748,53287],{"class":77},[67,65750,65751],{"class":77}," transparent",[67,65753,3148],{"class":73},[67,65755,65756,65758,65760,65762],{"class":69,"line":1088},[67,65757,59177],{"class":77},[67,65759,53203],{"class":73},[67,65761,64129],{"class":77},[67,65763,3148],{"class":73},[67,65765,65766],{"class":69,"line":1093},[67,65767,4020],{"class":73},[67,65769,65770],{"class":69,"line":1110},[67,65771,631],{"emptyLinePlaceholder":630},[67,65773,65774,65776,65778,65780,65782,65785],{"class":69,"line":11603},[67,65775,65505],{"class":110},[67,65777,63053],{"class":262},[67,65779,56836],{"class":262},[67,65781,3253],{"class":262},[67,65783,65784],{"class":110},".active",[67,65786,17369],{"class":73},[67,65788,65789,65791,65793,65796],{"class":69,"line":11612},[67,65790,63552],{"class":77},[67,65792,53203],{"class":73},[67,65794,65795],{"class":77},"#e1251b",[67,65797,3148],{"class":73},[67,65799,65800,65802,65804,65806],{"class":69,"line":11617},[67,65801,59177],{"class":77},[67,65803,53203],{"class":73},[67,65805,65795],{"class":77},[67,65807,3148],{"class":73},[67,65809,65810],{"class":69,"line":11623},[67,65811,4020],{"class":73},[67,65813,65814],{"class":69,"line":11644},[67,65815,631],{"emptyLinePlaceholder":630},[67,65817,65818,65821],{"class":69,"line":11650},[67,65819,65820],{"class":110},"    .tab-content",[67,65822,17369],{"class":73},[67,65824,65825,65827,65829,65831,65834,65836],{"class":69,"line":11664},[67,65826,56456],{"class":77},[67,65828,53203],{"class":73},[67,65830,78],{"class":77},[67,65832,65833],{"class":77}," 16",[67,65835,53258],{"class":84},[67,65837,3148],{"class":73},[67,65839,65840],{"class":69,"line":11670},[67,65841,4020],{"class":73},[67,65843,65844],{"class":69,"line":11697},[67,65845,631],{"emptyLinePlaceholder":630},[67,65847,65848,65850,65852],{"class":69,"line":11706},[67,65849,65820],{"class":110},[67,65851,63934],{"class":110},[67,65853,17369],{"class":73},[67,65855,65856,65858,65860,65862],{"class":69,"line":11712},[67,65857,56770],{"class":77},[67,65859,53203],{"class":73},[67,65861,56498],{"class":77},[67,65863,3148],{"class":73},[67,65865,65866],{"class":69,"line":11720},[67,65867,4020],{"class":73},[67,65869,65870],{"class":69,"line":11725},[67,65871,631],{"emptyLinePlaceholder":630},[67,65873,65874,65876,65879],{"class":69,"line":18401},[67,65875,65820],{"class":110},[67,65877,65878],{"class":110}," .item.active",[67,65880,17369],{"class":73},[67,65882,65883,65885,65887,65889],{"class":69,"line":18407},[67,65884,56770],{"class":77},[67,65886,53203],{"class":73},[67,65888,62630],{"class":77},[67,65890,3148],{"class":73},[67,65892,65893],{"class":69,"line":18430},[67,65894,4020],{"class":73},[67,65896,65897,65899,65901],{"class":69,"line":18436},[67,65898,54181],{"class":73},[67,65900,1903],{"class":262},[67,65902,323],{"class":73},[67,65904,65905,65907,65909],{"class":69,"line":18459},[67,65906,376],{"class":73},[67,65908,53100],{"class":262},[67,65910,323],{"class":73},[67,65912,65913],{"class":69,"line":18473},[67,65914,631],{"emptyLinePlaceholder":630},[67,65916,65917,65919,65921],{"class":69,"line":18493},[67,65918,259],{"class":73},[67,65920,53565],{"class":262},[67,65922,323],{"class":73},[67,65924,65925,65927,65929,65931,65933,65936],{"class":69,"line":18499},[67,65926,328],{"class":73},[67,65928,53377],{"class":262},[67,65930,55248],{"class":110},[67,65932,85],{"class":73},[67,65934,65935],{"class":114},"\"tab\"",[67,65937,323],{"class":73},[67,65939,65940,65942,65944,65946,65948,65951],{"class":69,"line":18510},[67,65941,53107],{"class":73},[67,65943,53377],{"class":262},[67,65945,55248],{"class":110},[67,65947,85],{"class":73},[67,65949,65950],{"class":114},"\"tab-nav\"",[67,65952,323],{"class":73},[67,65954,65955,65957,65959,65962,65964],{"class":69,"line":18533},[67,65956,56995],{"class":73},[67,65958,391],{"class":262},[67,65960,65961],{"class":73},">每日特价\u003C\u002F",[67,65963,391],{"class":262},[67,65965,323],{"class":73},[67,65967,65968,65970,65972],{"class":69,"line":18555},[67,65969,56995],{"class":73},[67,65971,2994],{"class":262},[67,65973,323],{"class":73},[67,65975,65976,65978,65980,65982,65984,65986,65988,65990,65992,65994,65997,66000,66002,66004,66006],{"class":69,"line":18560},[67,65977,57063],{"class":73},[67,65979,29],{"class":262},[67,65981,62813],{"class":73},[67,65983,2230],{"class":262},[67,65985,55248],{"class":110},[67,65987,85],{"class":73},[67,65989,61467],{"class":114},[67,65991,62818],{"class":110},[67,65993,85],{"class":73},[67,65995,65996],{"class":114},"\"javascript:;\"",[67,65998,65999],{"class":73},">精选\u003C\u002F",[67,66001,2230],{"class":262},[67,66003,57075],{"class":73},[67,66005,29],{"class":262},[67,66007,323],{"class":73},[67,66009,66010,66012,66014,66016,66018,66020,66022,66024,66027,66029,66031,66033],{"class":69,"line":18566},[67,66011,57063],{"class":73},[67,66013,29],{"class":262},[67,66015,62813],{"class":73},[67,66017,2230],{"class":262},[67,66019,62818],{"class":110},[67,66021,85],{"class":73},[67,66023,65996],{"class":114},[67,66025,66026],{"class":73},">美食\u003C\u002F",[67,66028,2230],{"class":262},[67,66030,57075],{"class":73},[67,66032,29],{"class":262},[67,66034,323],{"class":73},[67,66036,66037,66039,66041,66043,66045,66047,66049,66051,66054,66056,66058,66060],{"class":69,"line":18580},[67,66038,57063],{"class":73},[67,66040,29],{"class":262},[67,66042,62813],{"class":73},[67,66044,2230],{"class":262},[67,66046,62818],{"class":110},[67,66048,85],{"class":73},[67,66050,65996],{"class":114},[67,66052,66053],{"class":73},">百货\u003C\u002F",[67,66055,2230],{"class":262},[67,66057,57075],{"class":73},[67,66059,29],{"class":262},[67,66061,323],{"class":73},[67,66063,66064,66066,66068,66070,66072,66074,66076,66078,66081,66083,66085,66087],{"class":69,"line":18593},[67,66065,57063],{"class":73},[67,66067,29],{"class":262},[67,66069,62813],{"class":73},[67,66071,2230],{"class":262},[67,66073,62818],{"class":110},[67,66075,85],{"class":73},[67,66077,65996],{"class":114},[67,66079,66080],{"class":73},">个护\u003C\u002F",[67,66082,2230],{"class":262},[67,66084,57075],{"class":73},[67,66086,29],{"class":262},[67,66088,323],{"class":73},[67,66090,66091,66093,66095,66097,66099,66101,66103,66105,66108,66110,66112,66114],{"class":69,"line":18598},[67,66092,57063],{"class":73},[67,66094,29],{"class":262},[67,66096,62813],{"class":73},[67,66098,2230],{"class":262},[67,66100,62818],{"class":110},[67,66102,85],{"class":73},[67,66104,65996],{"class":114},[67,66106,66107],{"class":73},">预告\u003C\u002F",[67,66109,2230],{"class":262},[67,66111,57075],{"class":73},[67,66113,29],{"class":262},[67,66115,323],{"class":73},[67,66117,66118,66120,66122],{"class":69,"line":18612},[67,66119,57168],{"class":73},[67,66121,2994],{"class":262},[67,66123,323],{"class":73},[67,66125,66126,66128,66130],{"class":69,"line":18617},[67,66127,53542],{"class":73},[67,66129,53377],{"class":262},[67,66131,323],{"class":73},[67,66133,66134,66136,66138,66140,66142,66145],{"class":69,"line":18623},[67,66135,53107],{"class":73},[67,66137,53377],{"class":262},[67,66139,55248],{"class":110},[67,66141,85],{"class":73},[67,66143,66144],{"class":114},"\"tab-content\"",[67,66146,323],{"class":73},[67,66148,66149,66151,66153,66155,66157,66160,66162,66164,66166,66168,66171,66173,66175,66177,66180,66182],{"class":69,"line":18628},[67,66150,56995],{"class":73},[67,66152,53377],{"class":262},[67,66154,55248],{"class":110},[67,66156,85],{"class":73},[67,66158,66159],{"class":114},"\"item active\"",[67,66161,62813],{"class":73},[67,66163,3317],{"class":262},[67,66165,57000],{"class":110},[67,66167,85],{"class":73},[67,66169,66170],{"class":114},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[67,66172,57008],{"class":110},[67,66174,85],{"class":73},[67,66176,9468],{"class":114},[67,66178,66179],{"class":73}," \u002F>\u003C\u002F",[67,66181,53377],{"class":262},[67,66183,323],{"class":73},[67,66185,66186,66188,66190,66192,66194,66196,66198,66200,66202,66204,66207,66209,66211,66213,66215,66217],{"class":69,"line":18642},[67,66187,56995],{"class":73},[67,66189,53377],{"class":262},[67,66191,55248],{"class":110},[67,66193,85],{"class":73},[67,66195,64383],{"class":114},[67,66197,62813],{"class":73},[67,66199,3317],{"class":262},[67,66201,57000],{"class":110},[67,66203,85],{"class":73},[67,66205,66206],{"class":114},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[67,66208,57008],{"class":110},[67,66210,85],{"class":73},[67,66212,9468],{"class":114},[67,66214,66179],{"class":73},[67,66216,53377],{"class":262},[67,66218,323],{"class":73},[67,66220,66221,66223,66225,66227,66229,66231,66233,66235,66237,66239,66242,66244,66246,66248,66250,66252],{"class":69,"line":18647},[67,66222,56995],{"class":73},[67,66224,53377],{"class":262},[67,66226,55248],{"class":110},[67,66228,85],{"class":73},[67,66230,64383],{"class":114},[67,66232,62813],{"class":73},[67,66234,3317],{"class":262},[67,66236,57000],{"class":110},[67,66238,85],{"class":73},[67,66240,66241],{"class":114},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[67,66243,57008],{"class":110},[67,66245,85],{"class":73},[67,66247,9468],{"class":114},[67,66249,66179],{"class":73},[67,66251,53377],{"class":262},[67,66253,323],{"class":73},[67,66255,66256,66258,66260,66262,66264,66266,66268,66270,66272,66274,66277,66279,66281,66283,66285,66287],{"class":69,"line":18652},[67,66257,56995],{"class":73},[67,66259,53377],{"class":262},[67,66261,55248],{"class":110},[67,66263,85],{"class":73},[67,66265,64383],{"class":114},[67,66267,62813],{"class":73},[67,66269,3317],{"class":262},[67,66271,57000],{"class":110},[67,66273,85],{"class":73},[67,66275,66276],{"class":114},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[67,66278,57008],{"class":110},[67,66280,85],{"class":73},[67,66282,9468],{"class":114},[67,66284,66179],{"class":73},[67,66286,53377],{"class":262},[67,66288,323],{"class":73},[67,66290,66291,66293,66295,66297,66299,66301,66303,66305,66307,66309,66312,66314,66316,66318,66320,66322],{"class":69,"line":18666},[67,66292,56995],{"class":73},[67,66294,53377],{"class":262},[67,66296,55248],{"class":110},[67,66298,85],{"class":73},[67,66300,64383],{"class":114},[67,66302,62813],{"class":73},[67,66304,3317],{"class":262},[67,66306,57000],{"class":110},[67,66308,85],{"class":73},[67,66310,66311],{"class":114},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[67,66313,57008],{"class":110},[67,66315,85],{"class":73},[67,66317,9468],{"class":114},[67,66319,66179],{"class":73},[67,66321,53377],{"class":262},[67,66323,323],{"class":73},[67,66325,66326,66328,66330],{"class":69,"line":18678},[67,66327,53542],{"class":73},[67,66329,53377],{"class":262},[67,66331,323],{"class":73},[67,66333,66334,66336,66338],{"class":69,"line":18683},[67,66335,54181],{"class":73},[67,66337,53377],{"class":262},[67,66339,323],{"class":73},[67,66341,66342,66344,66346],{"class":69,"line":18696},[67,66343,328],{"class":73},[67,66345,53578],{"class":262},[67,66347,323],{"class":73},[67,66349,66350],{"class":69,"line":18701},[67,66351,66352],{"class":2058},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[67,66354,66355],{"class":69,"line":18706},[67,66356,66357],{"class":2058},"    \u002F\u002F 1.1 获取 a 元素 \n",[67,66359,66360,66362,66365,66367,66369,66371,66373,66376],{"class":69,"line":18711},[67,66361,13021],{"class":84},[67,66363,66364],{"class":77}," as",[67,66366,671],{"class":84},[67,66368,56157],{"class":73},[67,66370,57442],{"class":110},[67,66372,854],{"class":73},[67,66374,66375],{"class":114},"'.tab-nav a'",[67,66377,829],{"class":73},[67,66379,66380],{"class":69,"line":18724},[67,66381,66382],{"class":2058},"    \u002F\u002F console.log(as) \n",[67,66384,66385,66387,66389,66391,66393,66395,66397,66399,66401,66404,66406,66408,66410],{"class":69,"line":18729},[67,66386,935],{"class":84},[67,66388,3505],{"class":73},[67,66390,53612],{"class":84},[67,66392,11244],{"class":73},[67,66394,85],{"class":84},[67,66396,5913],{"class":77},[67,66398,11251],{"class":73},[67,66400,259],{"class":84},[67,66402,66403],{"class":73}," as.",[67,66405,53733],{"class":77},[67,66407,5036],{"class":73},[67,66409,4125],{"class":84},[67,66411,14241],{"class":73},[67,66413,66414],{"class":69,"line":34402},[67,66415,66416],{"class":2058},"      \u002F\u002F console.log(as[i])\n",[67,66418,66419],{"class":69,"line":34408},[67,66420,66421],{"class":2058},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[67,66423,66424,66427,66429,66431,66434,66436,66438],{"class":69,"line":34414},[67,66425,66426],{"class":73},"      as[i].",[67,66428,59574],{"class":110},[67,66430,854],{"class":73},[67,66432,66433],{"class":114},"'mouseenter'",[67,66435,1868],{"class":73},[67,66437,56210],{"class":84},[67,66439,56213],{"class":73},[67,66441,66442],{"class":69,"line":34420},[67,66443,66444],{"class":2058},"        \u002F\u002F console.log('鼠标经过')\n",[67,66446,66447],{"class":69,"line":34426},[67,66448,66449],{"class":2058},"        \u002F\u002F 排他思想  \n",[67,66451,66452],{"class":69,"line":34437},[67,66453,66454],{"class":2058},"        \u002F\u002F 干掉别人 移除类active\n",[67,66456,66457,66459,66461,66463,66466,66468,66470,66472,66475],{"class":69,"line":34443},[67,66458,53690],{"class":73},[67,66460,56160],{"class":110},[67,66462,854],{"class":73},[67,66464,66465],{"class":114},"'.tab-nav .active'",[67,66467,58764],{"class":73},[67,66469,58767],{"class":110},[67,66471,854],{"class":73},[67,66473,66474],{"class":114},"'active'",[67,66476,829],{"class":73},[67,66478,66479],{"class":69,"line":34463},[67,66480,66481],{"class":2058},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[67,66483,66484,66487,66490,66492,66494,66496],{"class":69,"line":34469},[67,66485,66486],{"class":77},"        this",[67,66488,66489],{"class":73},".classList.",[67,66491,7151],{"class":110},[67,66493,854],{"class":73},[67,66495,66474],{"class":114},[67,66497,829],{"class":73},[67,66499,66500],{"class":69,"line":34480},[67,66501,631],{"emptyLinePlaceholder":630},[67,66503,66504],{"class":69,"line":34486},[67,66505,66506],{"class":2058},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[67,66508,66509],{"class":69,"line":34492},[67,66510,66511],{"class":2058},"        \u002F\u002F 干掉别人\n",[67,66513,66514,66516,66518,66520,66523,66525,66527,66529,66531],{"class":69,"line":34498},[67,66515,53690],{"class":73},[67,66517,56160],{"class":110},[67,66519,854],{"class":73},[67,66521,66522],{"class":114},"'.tab-content .active'",[67,66524,58764],{"class":73},[67,66526,58767],{"class":110},[67,66528,854],{"class":73},[67,66530,66474],{"class":114},[67,66532,829],{"class":73},[67,66534,66535],{"class":69,"line":34504},[67,66536,66537],{"class":2058},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[67,66539,66540,66542,66544,66546,66549,66551,66553,66555,66557,66559,66561,66563,66565],{"class":69,"line":34510},[67,66541,53690],{"class":73},[67,66543,56160],{"class":110},[67,66545,854],{"class":73},[67,66547,66548],{"class":114},"`.tab-content .item:nth-child(${",[67,66550,2432],{"class":73},[67,66552,47334],{"class":84},[67,66554,906],{"class":77},[67,66556,58793],{"class":114},[67,66558,58764],{"class":73},[67,66560,7151],{"class":110},[67,66562,854],{"class":73},[67,66564,66474],{"class":114},[67,66566,829],{"class":73},[67,66568,66569],{"class":69,"line":34516},[67,66570,631],{"emptyLinePlaceholder":630},[67,66572,66573],{"class":69,"line":34522},[67,66574,66575],{"class":73},"      })\n",[67,66577,66578],{"class":69,"line":34542},[67,66579,4020],{"class":73},[67,66581,66582,66584,66586],{"class":69,"line":34548},[67,66583,54181],{"class":73},[67,66585,53578],{"class":262},[67,66587,323],{"class":73},[67,66589,66590,66592,66594],{"class":69,"line":34564},[67,66591,376],{"class":73},[67,66593,53565],{"class":262},[67,66595,323],{"class":73},[67,66597,66598],{"class":69,"line":34570},[67,66599,631],{"emptyLinePlaceholder":630},[67,66601,66602,66604,66606],{"class":69,"line":34584},[67,66603,376],{"class":73},[67,66605,52403],{"class":262},[67,66607,323],{"class":73},[19,66609,66610],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66612,66613],{},"在监听事件中，this指向的就是他的调用者",[19,66615,66616],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66618,55482],{},[19,66620,66621],{},"(function () {",[19,66623,66624],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66626,66627],{},"list.addEventListener('click', function (e) {",[19,66629,66630],{},"if (e.target.tagName === 'A') {",[19,66632,66633],{},"\u002F\u002F 排他思想",[19,66635,66636],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66638,66639],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66641,66642],{},"\u002F\u002F console.log(old);",[19,66644,66645],{},"\u002F\u002F 判断",[19,66647,66648],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66650,66651],{},"if (old) old.classList.remove('active')",[19,66653,66654],{},"e.target.classList.add('active')",[19,66656,2934],{},[19,66658,54228],{},[19,66660,66661],{},"})();",[391,66663,66665],{"id":66664},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[58,66667,66669],{"className":52401,"code":66668,"language":52403,"meta":63,"style":63},"\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",[32,66670,66671,66681,66685,66693,66697,66711,66725,66737,66745,66751,66761,66771,66775,66779,66786,66798,66809,66826,66839,66853,66863,66867,66871,66878,66889,66907,66917,66929,66933,66937,66944,66961,66972,66984,66988,66992,66999,67011,67015,67023,67031,67035,67043,67051,67059,67074,67118,67126,67139,67152,67165,67173,67181,67189,67217,67225,67237,67250,67263,67271,67279,67287,67313,67321,67334,67346,67359,67367,67375,67383,67409,67417,67430,67442,67455,67463,67471,67479,67484,67504,67509,67529,67534,67551,67556,67564,67569,67598,67611,67615,67619,67624,67628,67656,67661,67678,67683,67688,67693,67698,67724,67728,67732,67740,67748,67752],{"__ignoreMap":63},[67,66672,66673,66675,66677,66679],{"class":69,"line":70},[67,66674,53065],{"class":73},[67,66676,53068],{"class":262},[67,66678,53071],{"class":110},[67,66680,323],{"class":73},[67,66682,66683],{"class":69,"line":191},[67,66684,631],{"emptyLinePlaceholder":630},[67,66686,66687,66689,66691],{"class":69,"line":202},[67,66688,259],{"class":73},[67,66690,52403],{"class":262},[67,66692,323],{"class":73},[67,66694,66695],{"class":69,"line":641},[67,66696,631],{"emptyLinePlaceholder":630},[67,66698,66699,66701,66703,66705,66707,66709],{"class":69,"line":655},[67,66700,259],{"class":73},[67,66702,53100],{"class":262},[67,66704,53082],{"class":110},[67,66706,85],{"class":73},[67,66708,53087],{"class":114},[67,66710,323],{"class":73},[67,66712,66713,66715,66717,66719,66721,66723],{"class":69,"line":660},[67,66714,328],{"class":73},[67,66716,53110],{"class":262},[67,66718,53113],{"class":110},[67,66720,85],{"class":73},[67,66722,53118],{"class":114},[67,66724,323],{"class":73},[67,66726,66727,66729,66731,66733,66735],{"class":69,"line":665},[67,66728,328],{"class":73},[67,66730,53173],{"class":262},[67,66732,57075],{"class":73},[67,66734,53173],{"class":262},[67,66736,323],{"class":73},[67,66738,66739,66741,66743],{"class":69,"line":677},[67,66740,328],{"class":73},[67,66742,1903],{"class":262},[67,66744,323],{"class":73},[67,66746,66747,66749],{"class":69,"line":683},[67,66748,8220],{"class":262},[67,66750,17369],{"class":73},[67,66752,66753,66755,66757,66759],{"class":69,"line":689},[67,66754,56467],{"class":77},[67,66756,53203],{"class":73},[67,66758,78],{"class":77},[67,66760,3148],{"class":73},[67,66762,66763,66765,66767,66769],{"class":69,"line":694},[67,66764,56456],{"class":77},[67,66766,53203],{"class":73},[67,66768,78],{"class":77},[67,66770,3148],{"class":73},[67,66772,66773],{"class":69,"line":700},[67,66774,4020],{"class":73},[67,66776,66777],{"class":69,"line":706},[67,66778,631],{"emptyLinePlaceholder":630},[67,66780,66781,66784],{"class":69,"line":712},[67,66782,66783],{"class":262},"    table",[67,66785,17369],{"class":73},[67,66787,66788,66791,66793,66796],{"class":69,"line":717},[67,66789,66790],{"class":77},"      border-collapse",[67,66792,53203],{"class":73},[67,66794,66795],{"class":77},"collapse",[67,66797,3148],{"class":73},[67,66799,66800,66803,66805,66807],{"class":69,"line":723},[67,66801,66802],{"class":77},"      border-spacing",[67,66804,53203],{"class":73},[67,66806,78],{"class":77},[67,66808,3148],{"class":73},[67,66810,66811,66813,66815,66817,66819,66821,66824],{"class":69,"line":729},[67,66812,63737],{"class":77},[67,66814,53203],{"class":73},[67,66816,2209],{"class":77},[67,66818,53258],{"class":84},[67,66820,53287],{"class":77},[67,66822,66823],{"class":77}," #c0c0c0",[67,66825,3148],{"class":73},[67,66827,66828,66830,66832,66835,66837],{"class":69,"line":735},[67,66829,56532],{"class":77},[67,66831,53203],{"class":73},[67,66833,66834],{"class":77},"500",[67,66836,53258],{"class":84},[67,66838,3148],{"class":73},[67,66840,66841,66843,66845,66847,66849,66851],{"class":69,"line":741},[67,66842,56467],{"class":77},[67,66844,53203],{"class":73},[67,66846,2302],{"class":77},[67,66848,53258],{"class":84},[67,66850,53322],{"class":77},[67,66852,3148],{"class":73},[67,66854,66855,66857,66859,66861],{"class":69,"line":747},[67,66856,59047],{"class":77},[67,66858,53203],{"class":73},[67,66860,53358],{"class":77},[67,66862,3148],{"class":73},[67,66864,66865],{"class":69,"line":753},[67,66866,4020],{"class":73},[67,66868,66869],{"class":69,"line":758},[67,66870,631],{"emptyLinePlaceholder":630},[67,66872,66873,66876],{"class":69,"line":764},[67,66874,66875],{"class":262},"    th",[67,66877,17369],{"class":73},[67,66879,66880,66882,66884,66887],{"class":69,"line":770},[67,66881,56645],{"class":77},[67,66883,53203],{"class":73},[67,66885,66886],{"class":77},"#09c",[67,66888,3148],{"class":73},[67,66890,66891,66894,66896,66898,66900,66902,66905],{"class":69,"line":776},[67,66892,66893],{"class":77},"      font",[67,66895,53203],{"class":73},[67,66897,64099],{"class":77},[67,66899,65833],{"class":77},[67,66901,53258],{"class":84},[67,66903,66904],{"class":114}," \"微软雅黑\"",[67,66906,3148],{"class":73},[67,66908,66909,66911,66913,66915],{"class":69,"line":782},[67,66910,59177],{"class":77},[67,66912,53203],{"class":73},[67,66914,62603],{"class":77},[67,66916,3148],{"class":73},[67,66918,66919,66921,66923,66925,66927],{"class":69,"line":788},[67,66920,56546],{"class":77},[67,66922,53203],{"class":73},[67,66924,2789],{"class":77},[67,66926,53258],{"class":84},[67,66928,3148],{"class":73},[67,66930,66931],{"class":69,"line":793},[67,66932,4020],{"class":73},[67,66934,66935],{"class":69,"line":798},[67,66936,631],{"emptyLinePlaceholder":630},[67,66938,66939,66942],{"class":69,"line":816},[67,66940,66941],{"class":262},"    td",[67,66943,17369],{"class":73},[67,66945,66946,66948,66950,66952,66954,66956,66959],{"class":69,"line":832},[67,66947,63737],{"class":77},[67,66949,53203],{"class":73},[67,66951,2209],{"class":77},[67,66953,53258],{"class":84},[67,66955,53287],{"class":77},[67,66957,66958],{"class":77}," #d0d0d0",[67,66960,3148],{"class":73},[67,66962,66963,66965,66967,66970],{"class":69,"line":843},[67,66964,59177],{"class":77},[67,66966,53203],{"class":73},[67,66968,66969],{"class":77},"#404060",[67,66971,3148],{"class":73},[67,66973,66974,66976,66978,66980,66982],{"class":69,"line":848},[67,66975,56456],{"class":77},[67,66977,53203],{"class":73},[67,66979,2437],{"class":77},[67,66981,53258],{"class":84},[67,66983,3148],{"class":73},[67,66985,66986],{"class":69,"line":863},[67,66987,4020],{"class":73},[67,66989,66990],{"class":69,"line":876},[67,66991,631],{"emptyLinePlaceholder":630},[67,66993,66994,66997],{"class":69,"line":889},[67,66995,66996],{"class":110},"    .allCheck",[67,66998,17369],{"class":73},[67,67000,67001,67003,67005,67007,67009],{"class":69,"line":894},[67,67002,56532],{"class":77},[67,67004,53203],{"class":73},[67,67006,2601],{"class":77},[67,67008,53258],{"class":84},[67,67010,3148],{"class":73},[67,67012,67013],{"class":69,"line":911},[67,67014,4020],{"class":73},[67,67016,67017,67019,67021],{"class":69,"line":927},[67,67018,54181],{"class":73},[67,67020,1903],{"class":262},[67,67022,323],{"class":73},[67,67024,67025,67027,67029],{"class":69,"line":932},[67,67026,376],{"class":73},[67,67028,53100],{"class":262},[67,67030,323],{"class":73},[67,67032,67033],{"class":69,"line":955},[67,67034,631],{"emptyLinePlaceholder":630},[67,67036,67037,67039,67041],{"class":69,"line":971},[67,67038,259],{"class":73},[67,67040,53565],{"class":262},[67,67042,323],{"class":73},[67,67044,67045,67047,67049],{"class":69,"line":1010},[67,67046,328],{"class":73},[67,67048,399],{"class":262},[67,67050,323],{"class":73},[67,67052,67053,67055,67057],{"class":69,"line":1016},[67,67054,53107],{"class":73},[67,67056,405],{"class":262},[67,67058,323],{"class":73},[67,67060,67061,67063,67065,67067,67069,67072],{"class":69,"line":1021},[67,67062,56995],{"class":73},[67,67064,408],{"class":262},[67,67066,55248],{"class":110},[67,67068,85],{"class":73},[67,67070,67071],{"class":114},"\"allCheck\"",[67,67073,323],{"class":73},[67,67075,67076,67078,67080,67082,67084,67086,67088,67090,67092,67094,67096,67099,67102,67104,67106,67108,67111,67114,67116],{"class":69,"line":1034},[67,67077,57063],{"class":73},[67,67079,55583],{"class":262},[67,67081,274],{"class":110},[67,67083,85],{"class":73},[67,67085,55590],{"class":114},[67,67087,266],{"class":110},[67,67089,85],{"class":73},[67,67091,9468],{"class":114},[67,67093,16756],{"class":110},[67,67095,85],{"class":73},[67,67097,67098],{"class":114},"\"checkAll\"",[67,67100,67101],{"class":73},"> \u003C",[67,67103,67],{"class":262},[67,67105,55248],{"class":110},[67,67107,85],{"class":73},[67,67109,67110],{"class":114},"\"all\"",[67,67112,67113],{"class":73},">全选\u003C\u002F",[67,67115,67],{"class":262},[67,67117,323],{"class":73},[67,67119,67120,67122,67124],{"class":69,"line":1053},[67,67121,57168],{"class":73},[67,67123,408],{"class":262},[67,67125,323],{"class":73},[67,67127,67128,67130,67132,67135,67137],{"class":69,"line":1070},[67,67129,56995],{"class":73},[67,67131,408],{"class":262},[67,67133,67134],{"class":73},">商品\u003C\u002F",[67,67136,408],{"class":262},[67,67138,323],{"class":73},[67,67140,67141,67143,67145,67148,67150],{"class":69,"line":1083},[67,67142,56995],{"class":73},[67,67144,408],{"class":262},[67,67146,67147],{"class":73},">商家\u003C\u002F",[67,67149,408],{"class":262},[67,67151,323],{"class":73},[67,67153,67154,67156,67158,67161,67163],{"class":69,"line":1088},[67,67155,56995],{"class":73},[67,67157,408],{"class":262},[67,67159,67160],{"class":73},">价格\u003C\u002F",[67,67162,408],{"class":262},[67,67164,323],{"class":73},[67,67166,67167,67169,67171],{"class":69,"line":1093},[67,67168,53542],{"class":73},[67,67170,405],{"class":262},[67,67172,323],{"class":73},[67,67174,67175,67177,67179],{"class":69,"line":1110},[67,67176,53107],{"class":73},[67,67178,405],{"class":262},[67,67180,323],{"class":73},[67,67182,67183,67185,67187],{"class":69,"line":11603},[67,67184,56995],{"class":73},[67,67186,424],{"class":262},[67,67188,323],{"class":73},[67,67190,67191,67193,67195,67197,67199,67201,67203,67205,67208,67210,67212,67215],{"class":69,"line":11612},[67,67192,57063],{"class":73},[67,67194,55583],{"class":262},[67,67196,274],{"class":110},[67,67198,85],{"class":73},[67,67200,55590],{"class":114},[67,67202,266],{"class":110},[67,67204,85],{"class":73},[67,67206,67207],{"class":114},"\"check\"",[67,67209,55248],{"class":110},[67,67211,85],{"class":73},[67,67213,67214],{"class":114},"\"ck\"",[67,67216,323],{"class":73},[67,67218,67219,67221,67223],{"class":69,"line":11617},[67,67220,57168],{"class":73},[67,67222,424],{"class":262},[67,67224,323],{"class":73},[67,67226,67227,67229,67231,67233,67235],{"class":69,"line":11623},[67,67228,56995],{"class":73},[67,67230,424],{"class":262},[67,67232,62934],{"class":73},[67,67234,424],{"class":262},[67,67236,323],{"class":73},[67,67238,67239,67241,67243,67246,67248],{"class":69,"line":11644},[67,67240,56995],{"class":73},[67,67242,424],{"class":262},[67,67244,67245],{"class":73},">小米\u003C\u002F",[67,67247,424],{"class":262},[67,67249,323],{"class":73},[67,67251,67252,67254,67256,67259,67261],{"class":69,"line":11650},[67,67253,56995],{"class":73},[67,67255,424],{"class":262},[67,67257,67258],{"class":73},">￥1999\u003C\u002F",[67,67260,424],{"class":262},[67,67262,323],{"class":73},[67,67264,67265,67267,67269],{"class":69,"line":11664},[67,67266,53542],{"class":73},[67,67268,405],{"class":262},[67,67270,323],{"class":73},[67,67272,67273,67275,67277],{"class":69,"line":11670},[67,67274,53107],{"class":73},[67,67276,405],{"class":262},[67,67278,323],{"class":73},[67,67280,67281,67283,67285],{"class":69,"line":11697},[67,67282,56995],{"class":73},[67,67284,424],{"class":262},[67,67286,323],{"class":73},[67,67288,67289,67291,67293,67295,67297,67299,67301,67303,67305,67307,67309,67311],{"class":69,"line":11706},[67,67290,57063],{"class":73},[67,67292,55583],{"class":262},[67,67294,274],{"class":110},[67,67296,85],{"class":73},[67,67298,55590],{"class":114},[67,67300,266],{"class":110},[67,67302,85],{"class":73},[67,67304,67207],{"class":114},[67,67306,55248],{"class":110},[67,67308,85],{"class":73},[67,67310,67214],{"class":114},[67,67312,323],{"class":73},[67,67314,67315,67317,67319],{"class":69,"line":11712},[67,67316,57168],{"class":73},[67,67318,424],{"class":262},[67,67320,323],{"class":73},[67,67322,67323,67325,67327,67330,67332],{"class":69,"line":11720},[67,67324,56995],{"class":73},[67,67326,424],{"class":262},[67,67328,67329],{"class":73},">小米净水器\u003C\u002F",[67,67331,424],{"class":262},[67,67333,323],{"class":73},[67,67335,67336,67338,67340,67342,67344],{"class":69,"line":11725},[67,67337,56995],{"class":73},[67,67339,424],{"class":262},[67,67341,67245],{"class":73},[67,67343,424],{"class":262},[67,67345,323],{"class":73},[67,67347,67348,67350,67352,67355,67357],{"class":69,"line":18401},[67,67349,56995],{"class":73},[67,67351,424],{"class":262},[67,67353,67354],{"class":73},">￥4999\u003C\u002F",[67,67356,424],{"class":262},[67,67358,323],{"class":73},[67,67360,67361,67363,67365],{"class":69,"line":18407},[67,67362,53542],{"class":73},[67,67364,405],{"class":262},[67,67366,323],{"class":73},[67,67368,67369,67371,67373],{"class":69,"line":18430},[67,67370,53107],{"class":73},[67,67372,405],{"class":262},[67,67374,323],{"class":73},[67,67376,67377,67379,67381],{"class":69,"line":18436},[67,67378,56995],{"class":73},[67,67380,424],{"class":262},[67,67382,323],{"class":73},[67,67384,67385,67387,67389,67391,67393,67395,67397,67399,67401,67403,67405,67407],{"class":69,"line":18459},[67,67386,57063],{"class":73},[67,67388,55583],{"class":262},[67,67390,274],{"class":110},[67,67392,85],{"class":73},[67,67394,55590],{"class":114},[67,67396,266],{"class":110},[67,67398,85],{"class":73},[67,67400,67207],{"class":114},[67,67402,55248],{"class":110},[67,67404,85],{"class":73},[67,67406,67214],{"class":114},[67,67408,323],{"class":73},[67,67410,67411,67413,67415],{"class":69,"line":18473},[67,67412,57168],{"class":73},[67,67414,424],{"class":262},[67,67416,323],{"class":73},[67,67418,67419,67421,67423,67426,67428],{"class":69,"line":18493},[67,67420,56995],{"class":73},[67,67422,424],{"class":262},[67,67424,67425],{"class":73},">小米电视\u003C\u002F",[67,67427,424],{"class":262},[67,67429,323],{"class":73},[67,67431,67432,67434,67436,67438,67440],{"class":69,"line":18499},[67,67433,56995],{"class":73},[67,67435,424],{"class":262},[67,67437,67245],{"class":73},[67,67439,424],{"class":262},[67,67441,323],{"class":73},[67,67443,67444,67446,67448,67451,67453],{"class":69,"line":18510},[67,67445,56995],{"class":73},[67,67447,424],{"class":262},[67,67449,67450],{"class":73},">￥5999\u003C\u002F",[67,67452,424],{"class":262},[67,67454,323],{"class":73},[67,67456,67457,67459,67461],{"class":69,"line":18533},[67,67458,53542],{"class":73},[67,67460,405],{"class":262},[67,67462,323],{"class":73},[67,67464,67465,67467,67469],{"class":69,"line":18555},[67,67466,54181],{"class":73},[67,67468,399],{"class":262},[67,67470,323],{"class":73},[67,67472,67473,67475,67477],{"class":69,"line":18560},[67,67474,328],{"class":73},[67,67476,53578],{"class":262},[67,67478,323],{"class":73},[67,67480,67481],{"class":69,"line":18566},[67,67482,67483],{"class":2058},"    \u002F\u002F 1. 获取大复选框\n",[67,67485,67486,67488,67491,67493,67495,67497,67499,67502],{"class":69,"line":18580},[67,67487,13021],{"class":84},[67,67489,67490],{"class":77}," checkAll",[67,67492,671],{"class":84},[67,67494,56157],{"class":73},[67,67496,56160],{"class":110},[67,67498,854],{"class":73},[67,67500,67501],{"class":114},"'#checkAll'",[67,67503,829],{"class":73},[67,67505,67506],{"class":69,"line":18593},[67,67507,67508],{"class":2058},"    \u002F\u002F 2. 获取所有的小复选框\n",[67,67510,67511,67513,67516,67518,67520,67522,67524,67527],{"class":69,"line":18598},[67,67512,13021],{"class":84},[67,67514,67515],{"class":77}," cks",[67,67517,671],{"class":84},[67,67519,56157],{"class":73},[67,67521,57442],{"class":110},[67,67523,854],{"class":73},[67,67525,67526],{"class":114},"'.ck'",[67,67528,829],{"class":73},[67,67530,67531],{"class":69,"line":18612},[67,67532,67533],{"class":2058},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[67,67535,67536,67539,67541,67543,67545,67547,67549],{"class":69,"line":18617},[67,67537,67538],{"class":73},"    checkAll.",[67,67540,59574],{"class":110},[67,67542,854],{"class":73},[67,67544,59579],{"class":114},[67,67546,1868],{"class":73},[67,67548,56210],{"class":84},[67,67550,56213],{"class":73},[67,67552,67553],{"class":69,"line":18623},[67,67554,67555],{"class":2058},"      \u002F\u002F 得到当前大复选框的选中状态\n",[67,67557,67558,67561],{"class":69,"line":18628},[67,67559,67560],{"class":2058},"      \u002F\u002F console.log(checkAll.checked)",[67,67562,67563],{"class":2058},"  \u002F\u002F 得到 是 true 或者是 false\n",[67,67565,67566],{"class":69,"line":18642},[67,67567,67568],{"class":2058},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[67,67570,67571,67573,67575,67577,67579,67581,67583,67585,67587,67590,67592,67594,67596],{"class":69,"line":18647},[67,67572,54048],{"class":84},[67,67574,3505],{"class":73},[67,67576,53612],{"class":84},[67,67578,11244],{"class":73},[67,67580,85],{"class":84},[67,67582,5913],{"class":77},[67,67584,11251],{"class":73},[67,67586,259],{"class":84},[67,67588,67589],{"class":73}," cks.",[67,67591,53733],{"class":77},[67,67593,5036],{"class":73},[67,67595,4125],{"class":84},[67,67597,14241],{"class":73},[67,67599,67600,67603,67605,67608],{"class":69,"line":18652},[67,67601,67602],{"class":73},"        cks[i].checked ",[67,67604,85],{"class":84},[67,67606,67607],{"class":77}," this",[67,67609,67610],{"class":73},".checked\n",[67,67612,67613],{"class":69,"line":18666},[67,67614,54162],{"class":73},[67,67616,67617],{"class":69,"line":18678},[67,67618,35230],{"class":73},[67,67620,67621],{"class":69,"line":18683},[67,67622,67623],{"class":2058},"    \u002F\u002F 5. 小复选框控制大复选框\n",[67,67625,67626],{"class":69,"line":18696},[67,67627,631],{"emptyLinePlaceholder":630},[67,67629,67630,67632,67634,67636,67638,67640,67642,67644,67646,67648,67650,67652,67654],{"class":69,"line":18701},[67,67631,935],{"class":84},[67,67633,3505],{"class":73},[67,67635,53612],{"class":84},[67,67637,11244],{"class":73},[67,67639,85],{"class":84},[67,67641,5913],{"class":77},[67,67643,11251],{"class":73},[67,67645,259],{"class":84},[67,67647,67589],{"class":73},[67,67649,53733],{"class":77},[67,67651,5036],{"class":73},[67,67653,4125],{"class":84},[67,67655,14241],{"class":73},[67,67657,67658],{"class":69,"line":18706},[67,67659,67660],{"class":2058},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[67,67662,67663,67666,67668,67670,67672,67674,67676],{"class":69,"line":18711},[67,67664,67665],{"class":73},"      cks[i].",[67,67667,59574],{"class":110},[67,67669,854],{"class":73},[67,67671,59579],{"class":114},[67,67673,1868],{"class":73},[67,67675,56210],{"class":84},[67,67677,56213],{"class":73},[67,67679,67680],{"class":69,"line":18724},[67,67681,67682],{"class":2058},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[67,67684,67685],{"class":69,"line":18729},[67,67686,67687],{"class":2058},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[67,67689,67690],{"class":69,"line":34402},[67,67691,67692],{"class":2058},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[67,67694,67695],{"class":69,"line":34408},[67,67696,67697],{"class":2058},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[67,67699,67700,67703,67705,67707,67709,67711,67714,67716,67718,67720,67722],{"class":69,"line":34414},[67,67701,67702],{"class":73},"        checkAll.checked ",[67,67704,85],{"class":84},[67,67706,56157],{"class":73},[67,67708,57442],{"class":110},[67,67710,854],{"class":73},[67,67712,67713],{"class":114},"'.ck:checked'",[67,67715,32603],{"class":73},[67,67717,53733],{"class":77},[67,67719,59667],{"class":84},[67,67721,67589],{"class":73},[67,67723,57592],{"class":77},[67,67725,67726],{"class":69,"line":34420},[67,67727,66575],{"class":73},[67,67729,67730],{"class":69,"line":34426},[67,67731,4020],{"class":73},[67,67733,67734,67736,67738],{"class":69,"line":34437},[67,67735,54181],{"class":73},[67,67737,53578],{"class":262},[67,67739,323],{"class":73},[67,67741,67742,67744,67746],{"class":69,"line":34443},[67,67743,376],{"class":73},[67,67745,53565],{"class":262},[67,67747,323],{"class":73},[67,67749,67750],{"class":69,"line":34463},[67,67751,631],{"emptyLinePlaceholder":630},[67,67753,67754,67756,67758],{"class":69,"line":34469},[67,67755,376],{"class":73},[67,67757,52403],{"class":262},[67,67759,323],{"class":73},[19,67761,67762],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67764,67765],{},"用好之间比较得到的布尔值！！！",[19,67767,67768,67769,67772,67773,3505,67776,2573,67778,67781],{},"在 JS 里访问的时候，",[32,67770,67771],{},"checkbox.checked"," 是一个 ",[2144,67774,67775],{},"布尔值",[32,67777,3217],{},[32,67779,67780],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67783,67784,67785,67788,67789],{},"HTML 的 ",[32,67786,67787],{},"checked=\"checked\""," 只是 ",[2144,67790,67791,67792,67795],{},"初始值；JS 的 ",[32,67793,67794],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67797,67798],{},"：checked是一个伪类选择器",[19,67800,67801],{},[3317,67802],{"alt":63,"src":67803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67805,67806,67809],{},[67807,67808],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67811,67812],{},[3317,67813],{"alt":63,"src":67814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67816,67818],{"id":67817},"_33-dom事件进阶","3.3 DOM事件进阶",[391,67820,67822],{"id":67821},"_331-事件流","3.3.1 事件流",[19,67824,67825],{},[3317,67826],{"alt":63,"src":67827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23794,67829,67831],{"id":67830},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67833,67834],{},[3317,67835],{"alt":63,"src":67836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[58,67838,67840],{"className":52401,"code":67839,"language":52403,"meta":63,"style":63},"\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",[32,67841,67842,67852,67866,67870,67878,67892,67912,67924,67932,67939,67951,67963,67973,67977,67981,67988,68000,68012,68022,68026,68034,68042,68046,68054,68069,68088,68096,68104,68124,68144,68160,68171,68179,68196,68207,68215,68232,68243,68251,68259,68267,68271],{"__ignoreMap":63},[67,67843,67844,67846,67848,67850],{"class":69,"line":70},[67,67845,53065],{"class":73},[67,67847,53068],{"class":262},[67,67849,53071],{"class":110},[67,67851,323],{"class":73},[67,67853,67854,67856,67858,67860,67862,67864],{"class":69,"line":191},[67,67855,259],{"class":73},[67,67857,52403],{"class":262},[67,67859,53082],{"class":110},[67,67861,85],{"class":73},[67,67863,53087],{"class":114},[67,67865,323],{"class":73},[67,67867,67868],{"class":69,"line":202},[67,67869,631],{"emptyLinePlaceholder":630},[67,67871,67872,67874,67876],{"class":69,"line":641},[67,67873,259],{"class":73},[67,67875,53100],{"class":262},[67,67877,323],{"class":73},[67,67879,67880,67882,67884,67886,67888,67890],{"class":69,"line":655},[67,67881,328],{"class":73},[67,67883,53110],{"class":262},[67,67885,53113],{"class":110},[67,67887,85],{"class":73},[67,67889,53118],{"class":114},[67,67891,323],{"class":73},[67,67893,67894,67896,67898,67900,67902,67904,67906,67908,67910],{"class":69,"line":660},[67,67895,328],{"class":73},[67,67897,53110],{"class":262},[67,67899,266],{"class":110},[67,67901,85],{"class":73},[67,67903,53157],{"class":114},[67,67905,53137],{"class":110},[67,67907,85],{"class":73},[67,67909,53164],{"class":114},[67,67911,323],{"class":73},[67,67913,67914,67916,67918,67920,67922],{"class":69,"line":665},[67,67915,328],{"class":73},[67,67917,53173],{"class":262},[67,67919,53176],{"class":73},[67,67921,53173],{"class":262},[67,67923,323],{"class":73},[67,67925,67926,67928,67930],{"class":69,"line":677},[67,67927,328],{"class":73},[67,67929,1903],{"class":262},[67,67931,323],{"class":73},[67,67933,67934,67937],{"class":69,"line":683},[67,67935,67936],{"class":110},"    .father",[67,67938,17369],{"class":73},[67,67940,67941,67943,67945,67947,67949],{"class":69,"line":689},[67,67942,56532],{"class":77},[67,67944,53203],{"class":73},[67,67946,66834],{"class":77},[67,67948,53258],{"class":84},[67,67950,3148],{"class":73},[67,67952,67953,67955,67957,67959,67961],{"class":69,"line":694},[67,67954,56546],{"class":77},[67,67956,53203],{"class":73},[67,67958,66834],{"class":77},[67,67960,53258],{"class":84},[67,67962,3148],{"class":73},[67,67964,67965,67967,67969,67971],{"class":69,"line":700},[67,67966,56645],{"class":77},[67,67968,53203],{"class":73},[67,67970,53411],{"class":77},[67,67972,3148],{"class":73},[67,67974,67975],{"class":69,"line":706},[67,67976,4020],{"class":73},[67,67978,67979],{"class":69,"line":712},[67,67980,631],{"emptyLinePlaceholder":630},[67,67982,67983,67986],{"class":69,"line":717},[67,67984,67985],{"class":110},"    .son",[67,67987,17369],{"class":73},[67,67989,67990,67992,67994,67996,67998],{"class":69,"line":723},[67,67991,56532],{"class":77},[67,67993,53203],{"class":73},[67,67995,3565],{"class":77},[67,67997,53258],{"class":84},[67,67999,3148],{"class":73},[67,68001,68002,68004,68006,68008,68010],{"class":69,"line":729},[67,68003,56546],{"class":77},[67,68005,53203],{"class":73},[67,68007,3565],{"class":77},[67,68009,53258],{"class":84},[67,68011,3148],{"class":73},[67,68013,68014,68016,68018,68020],{"class":69,"line":735},[67,68015,56645],{"class":77},[67,68017,53203],{"class":73},[67,68019,56650],{"class":77},[67,68021,3148],{"class":73},[67,68023,68024],{"class":69,"line":741},[67,68025,4020],{"class":73},[67,68027,68028,68030,68032],{"class":69,"line":747},[67,68029,54181],{"class":73},[67,68031,1903],{"class":262},[67,68033,323],{"class":73},[67,68035,68036,68038,68040],{"class":69,"line":753},[67,68037,376],{"class":73},[67,68039,53100],{"class":262},[67,68041,323],{"class":73},[67,68043,68044],{"class":69,"line":758},[67,68045,631],{"emptyLinePlaceholder":630},[67,68047,68048,68050,68052],{"class":69,"line":764},[67,68049,259],{"class":73},[67,68051,53565],{"class":262},[67,68053,323],{"class":73},[67,68055,68056,68058,68060,68062,68064,68067],{"class":69,"line":770},[67,68057,328],{"class":73},[67,68059,53377],{"class":262},[67,68061,55248],{"class":110},[67,68063,85],{"class":73},[67,68065,68066],{"class":114},"\"father\"",[67,68068,323],{"class":73},[67,68070,68071,68073,68075,68077,68079,68082,68084,68086],{"class":69,"line":776},[67,68072,53107],{"class":73},[67,68074,53377],{"class":262},[67,68076,55248],{"class":110},[67,68078,85],{"class":73},[67,68080,68081],{"class":114},"\"son\"",[67,68083,57075],{"class":73},[67,68085,53377],{"class":262},[67,68087,323],{"class":73},[67,68089,68090,68092,68094],{"class":69,"line":782},[67,68091,54181],{"class":73},[67,68093,53377],{"class":262},[67,68095,323],{"class":73},[67,68097,68098,68100,68102],{"class":69,"line":788},[67,68099,328],{"class":73},[67,68101,53578],{"class":262},[67,68103,323],{"class":73},[67,68105,68106,68108,68111,68113,68115,68117,68119,68122],{"class":69,"line":793},[67,68107,13021],{"class":84},[67,68109,68110],{"class":77}," fa",[67,68112,671],{"class":84},[67,68114,56157],{"class":73},[67,68116,56160],{"class":110},[67,68118,854],{"class":73},[67,68120,68121],{"class":114},"'.father'",[67,68123,829],{"class":73},[67,68125,68126,68128,68131,68133,68135,68137,68139,68142],{"class":69,"line":798},[67,68127,13021],{"class":84},[67,68129,68130],{"class":77}," son",[67,68132,671],{"class":84},[67,68134,56157],{"class":73},[67,68136,56160],{"class":110},[67,68138,854],{"class":73},[67,68140,68141],{"class":114},"'.son'",[67,68143,829],{"class":73},[67,68145,68146,68148,68150,68152,68154,68156,68158],{"class":69,"line":816},[67,68147,54171],{"class":73},[67,68149,59574],{"class":110},[67,68151,854],{"class":73},[67,68153,59579],{"class":114},[67,68155,1868],{"class":73},[67,68157,56210],{"class":84},[67,68159,56213],{"class":73},[67,68161,68162,68164,68166,68169],{"class":69,"line":832},[67,68163,60686],{"class":110},[67,68165,854],{"class":73},[67,68167,68168],{"class":114},"'woshiu1'",[67,68170,829],{"class":73},[67,68172,68173,68175,68177],{"class":69,"line":843},[67,68174,56296],{"class":73},[67,68176,3217],{"class":77},[67,68178,829],{"class":73},[67,68180,68181,68184,68186,68188,68190,68192,68194],{"class":69,"line":848},[67,68182,68183],{"class":73},"    fa.",[67,68185,59574],{"class":110},[67,68187,854],{"class":73},[67,68189,59579],{"class":114},[67,68191,1868],{"class":73},[67,68193,56210],{"class":84},[67,68195,56213],{"class":73},[67,68197,68198,68200,68202,68205],{"class":69,"line":863},[67,68199,60686],{"class":110},[67,68201,854],{"class":73},[67,68203,68204],{"class":114},"'1'",[67,68206,829],{"class":73},[67,68208,68209,68211,68213],{"class":69,"line":876},[67,68210,56296],{"class":73},[67,68212,3217],{"class":77},[67,68214,829],{"class":73},[67,68216,68217,68220,68222,68224,68226,68228,68230],{"class":69,"line":889},[67,68218,68219],{"class":73},"    son.",[67,68221,59574],{"class":110},[67,68223,854],{"class":73},[67,68225,59579],{"class":114},[67,68227,1868],{"class":73},[67,68229,56210],{"class":84},[67,68231,56213],{"class":73},[67,68233,68234,68236,68238,68241],{"class":69,"line":894},[67,68235,60686],{"class":110},[67,68237,854],{"class":73},[67,68239,68240],{"class":114},"'2'",[67,68242,829],{"class":73},[67,68244,68245,68247,68249],{"class":69,"line":911},[67,68246,56296],{"class":73},[67,68248,3217],{"class":77},[67,68250,829],{"class":73},[67,68252,68253,68255,68257],{"class":69,"line":927},[67,68254,54181],{"class":73},[67,68256,53578],{"class":262},[67,68258,323],{"class":73},[67,68260,68261,68263,68265],{"class":69,"line":932},[67,68262,376],{"class":73},[67,68264,53565],{"class":262},[67,68266,323],{"class":73},[67,68268,68269],{"class":69,"line":955},[67,68270,631],{"emptyLinePlaceholder":630},[67,68272,68273,68275,68277],{"class":69,"line":971},[67,68274,376],{"class":73},[67,68276,52403],{"class":262},[67,68278,323],{"class":73},[19,68280,68281],{},[3317,68282],{"alt":63,"src":68283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68285,68286],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23794,68288,68290],{"id":68289},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68292,68293],{},[3317,68294],{"alt":63,"src":68295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68297,68298],{},"反着来",[19,68300,68301],{},"注意是同名事件，比如都是‘click’",[23794,68303,68305],{"id":68304},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68307,68308],{},[3317,68309],{"alt":63,"src":68310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23794,68312,68314],{"id":68313},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68316,68317],{},[3317,68318],{"alt":63,"src":68319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68321,68322],{},[3317,68323],{"alt":63,"src":68324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23794,68326,68328],{"id":68327},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[26,68330,68331],{},[29,68332,68333],{},"事件类型的区别",[19,68335,68336],{},[3317,68337],{"alt":63,"src":68338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68340,68341],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[26,68343,68344],{"start":191},[29,68345,68346],{},"注册事件的区别",[19,68348,68349],{},[3317,68350],{"alt":63,"src":68351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23794,68353,68355],{"id":68354},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68357,68358],{},[3317,68359],{"alt":63,"src":68360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68362,68363],{},[3317,68364],{"alt":63,"src":68365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[58,68367,68369],{"className":250,"code":68368,"language":252,"meta":63,"style":63},"\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",[32,68370,68371,68379,68396,68419,68427,68432,68437,68442,68446,68454,68462],{"__ignoreMap":63},[67,68372,68373,68375,68377],{"class":69,"line":70},[67,68374,259],{"class":73},[67,68376,53565],{"class":262},[67,68378,323],{"class":73},[67,68380,68381,68383,68386,68389,68391,68394],{"class":69,"line":191},[67,68382,328],{"class":73},[67,68384,68385],{"class":262},"form",[67,68387,68388],{"class":110}," action",[67,68390,85],{"class":73},[67,68392,68393],{"class":114},"\"http:\u002F\u002Fwww.itcast.cn\"",[67,68395,323],{"class":73},[67,68397,68398,68400,68402,68404,68406,68409,68412,68414,68417],{"class":69,"line":202},[67,68399,53107],{"class":73},[67,68401,55583],{"class":262},[67,68403,274],{"class":110},[67,68405,85],{"class":73},[67,68407,68408],{"class":114},"\"submit\"",[67,68410,68411],{"class":110}," value",[67,68413,85],{"class":73},[67,68415,68416],{"class":114},"\"免费注册\"",[67,68418,323],{"class":73},[67,68420,68421,68423,68425],{"class":69,"line":641},[67,68422,53107],{"class":73},[67,68424,53578],{"class":262},[67,68426,323],{"class":73},[67,68428,68429],{"class":69,"line":655},[67,68430,68431],{"class":73},"      const form = document.querySelector('form')\n",[67,68433,68434],{"class":69,"line":660},[67,68435,68436],{"class":73},"      form.addEventListener('submit', function (e) {\n",[67,68438,68439],{"class":69,"line":665},[67,68440,68441],{"class":73},"        e.preventDefault()\n",[67,68443,68444],{"class":69,"line":677},[67,68445,66575],{"class":73},[67,68447,68448,68450,68452],{"class":69,"line":683},[67,68449,53542],{"class":73},[67,68451,53578],{"class":262},[67,68453,323],{"class":73},[67,68455,68456,68458,68460],{"class":69,"line":689},[67,68457,54181],{"class":73},[67,68459,68385],{"class":262},[67,68461,323],{"class":73},[67,68463,68464,68466,68468],{"class":69,"line":694},[67,68465,376],{"class":73},[67,68467,53565],{"class":262},[67,68469,323],{"class":73},[19,68471,68472],{},"点击不在跳转！！！",[391,68474,68476],{"id":68475},"_332-事件委托","3.3.2 事件委托",[19,68478,68479],{},[3317,68480],{"alt":63,"src":68481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[58,68483,68485],{"className":52401,"code":68484,"language":52403,"meta":63,"style":63},"\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",[32,68486,68487,68497,68511,68515,68523,68537,68557,68569,68577,68581,68589,68597,68609,68621,68633,68645,68657,68670,68678,68686,68691,68710,68731,68736,68741,68746,68751,68760,68764,68774,68778,68783,68788,68802,68812,68816,68820,68828,68836,68840],{"__ignoreMap":63},[67,68488,68489,68491,68493,68495],{"class":69,"line":70},[67,68490,53065],{"class":73},[67,68492,53068],{"class":262},[67,68494,53071],{"class":110},[67,68496,323],{"class":73},[67,68498,68499,68501,68503,68505,68507,68509],{"class":69,"line":191},[67,68500,259],{"class":73},[67,68502,52403],{"class":262},[67,68504,53082],{"class":110},[67,68506,85],{"class":73},[67,68508,53087],{"class":114},[67,68510,323],{"class":73},[67,68512,68513],{"class":69,"line":202},[67,68514,631],{"emptyLinePlaceholder":630},[67,68516,68517,68519,68521],{"class":69,"line":641},[67,68518,259],{"class":73},[67,68520,53100],{"class":262},[67,68522,323],{"class":73},[67,68524,68525,68527,68529,68531,68533,68535],{"class":69,"line":655},[67,68526,328],{"class":73},[67,68528,53110],{"class":262},[67,68530,53113],{"class":110},[67,68532,85],{"class":73},[67,68534,53118],{"class":114},[67,68536,323],{"class":73},[67,68538,68539,68541,68543,68545,68547,68549,68551,68553,68555],{"class":69,"line":660},[67,68540,328],{"class":73},[67,68542,53110],{"class":262},[67,68544,266],{"class":110},[67,68546,85],{"class":73},[67,68548,53157],{"class":114},[67,68550,53137],{"class":110},[67,68552,85],{"class":73},[67,68554,53164],{"class":114},[67,68556,323],{"class":73},[67,68558,68559,68561,68563,68565,68567],{"class":69,"line":665},[67,68560,328],{"class":73},[67,68562,53173],{"class":262},[67,68564,53176],{"class":73},[67,68566,53173],{"class":262},[67,68568,323],{"class":73},[67,68570,68571,68573,68575],{"class":69,"line":677},[67,68572,376],{"class":73},[67,68574,53100],{"class":262},[67,68576,323],{"class":73},[67,68578,68579],{"class":69,"line":683},[67,68580,631],{"emptyLinePlaceholder":630},[67,68582,68583,68585,68587],{"class":69,"line":689},[67,68584,259],{"class":73},[67,68586,53565],{"class":262},[67,68588,323],{"class":73},[67,68590,68591,68593,68595],{"class":69,"line":694},[67,68592,328],{"class":73},[67,68594,2994],{"class":262},[67,68596,323],{"class":73},[67,68598,68599,68601,68603,68605,68607],{"class":69,"line":700},[67,68600,53107],{"class":73},[67,68602,29],{"class":262},[67,68604,55727],{"class":73},[67,68606,29],{"class":262},[67,68608,323],{"class":73},[67,68610,68611,68613,68615,68617,68619],{"class":69,"line":706},[67,68612,53107],{"class":73},[67,68614,29],{"class":262},[67,68616,55746],{"class":73},[67,68618,29],{"class":262},[67,68620,323],{"class":73},[67,68622,68623,68625,68627,68629,68631],{"class":69,"line":712},[67,68624,53107],{"class":73},[67,68626,29],{"class":262},[67,68628,55765],{"class":73},[67,68630,29],{"class":262},[67,68632,323],{"class":73},[67,68634,68635,68637,68639,68641,68643],{"class":69,"line":717},[67,68636,53107],{"class":73},[67,68638,29],{"class":262},[67,68640,55784],{"class":73},[67,68642,29],{"class":262},[67,68644,323],{"class":73},[67,68646,68647,68649,68651,68653,68655],{"class":69,"line":723},[67,68648,53107],{"class":73},[67,68650,29],{"class":262},[67,68652,55803],{"class":73},[67,68654,29],{"class":262},[67,68656,323],{"class":73},[67,68658,68659,68661,68663,68666,68668],{"class":69,"line":729},[67,68660,53107],{"class":73},[67,68662,19],{"class":262},[67,68664,68665],{"class":73},">我不需要变色\u003C\u002F",[67,68667,19],{"class":262},[67,68669,323],{"class":73},[67,68671,68672,68674,68676],{"class":69,"line":735},[67,68673,54181],{"class":73},[67,68675,2994],{"class":262},[67,68677,323],{"class":73},[67,68679,68680,68682,68684],{"class":69,"line":741},[67,68681,328],{"class":73},[67,68683,53578],{"class":262},[67,68685,323],{"class":73},[67,68687,68688],{"class":69,"line":747},[67,68689,68690],{"class":2058},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[67,68692,68693,68695,68697,68699,68701,68703,68705,68708],{"class":69,"line":753},[67,68694,13021],{"class":84},[67,68696,63053],{"class":77},[67,68698,671],{"class":84},[67,68700,56157],{"class":73},[67,68702,56160],{"class":110},[67,68704,854],{"class":73},[67,68706,68707],{"class":114},"'ul'",[67,68709,829],{"class":73},[67,68711,68712,68715,68717,68719,68721,68723,68725,68727,68729],{"class":69,"line":758},[67,68713,68714],{"class":73},"    ul.",[67,68716,59574],{"class":110},[67,68718,854],{"class":73},[67,68720,59579],{"class":114},[67,68722,1868],{"class":73},[67,68724,56210],{"class":84},[67,68726,3505],{"class":73},[67,68728,2074],{"class":7033},[67,68730,14241],{"class":73},[67,68732,68733],{"class":69,"line":764},[67,68734,68735],{"class":2058},"      \u002F\u002F alert(1)\n",[67,68737,68738],{"class":69,"line":770},[67,68739,68740],{"class":2058},"      \u002F\u002F e.target就是我们点击的对象\n",[67,68742,68743],{"class":69,"line":776},[67,68744,68745],{"class":2058},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[67,68747,68748],{"class":69,"line":782},[67,68749,68750],{"class":2058},"      \u002F\u002F e.target.style.color = 'red'\n",[67,68752,68753,68755,68757],{"class":69,"line":788},[67,68754,60005],{"class":73},[67,68756,60008],{"class":110},[67,68758,68759],{"class":73},"(e)\n",[67,68761,68762],{"class":69,"line":793},[67,68763,631],{"emptyLinePlaceholder":630},[67,68765,68766,68768,68771],{"class":69,"line":798},[67,68767,60005],{"class":73},[67,68769,68770],{"class":110},"dir",[67,68772,68773],{"class":73},"(e.target)\n",[67,68775,68776],{"class":69,"line":816},[67,68777,631],{"emptyLinePlaceholder":630},[67,68779,68780],{"class":69,"line":832},[67,68781,68782],{"class":2058},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[67,68784,68785],{"class":69,"line":843},[67,68786,68787],{"class":2058},"      \u002F\u002F 通过tagName来进行判断\n",[67,68789,68790,68792,68795,68797,68800],{"class":69,"line":848},[67,68791,56241],{"class":84},[67,68793,68794],{"class":73}," (e.target.tagName ",[67,68796,56247],{"class":84},[67,68798,68799],{"class":114}," 'LI'",[67,68801,14241],{"class":73},[67,68803,68804,68807,68809],{"class":69,"line":863},[67,68805,68806],{"class":73},"        e.target.style.color ",[67,68808,85],{"class":84},[67,68810,68811],{"class":114}," 'red'\n",[67,68813,68814],{"class":69,"line":876},[67,68815,54162],{"class":73},[67,68817,68818],{"class":69,"line":889},[67,68819,35230],{"class":73},[67,68821,68822,68824,68826],{"class":69,"line":894},[67,68823,54181],{"class":73},[67,68825,53578],{"class":262},[67,68827,323],{"class":73},[67,68829,68830,68832,68834],{"class":69,"line":911},[67,68831,376],{"class":73},[67,68833,53565],{"class":262},[67,68835,323],{"class":73},[67,68837,68838],{"class":69,"line":927},[67,68839,631],{"emptyLinePlaceholder":630},[67,68841,68842,68844,68846],{"class":69,"line":932},[67,68843,376],{"class":73},[67,68845,52403],{"class":262},[67,68847,323],{"class":73},[19,68849,68850],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68852,68853],{},"if(e.target.ragName==='P') {}",[19,68855,68856],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68858,68859],{},"通过事件委托的方式实现tab栏切换改造：",[19,68861,68862],{},"一定要记住自定义属性！！！！！！",[19,68864,68865],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68867,68868],{},"id是自定义的属性名",[19,68870,68871],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[58,68873,68875],{"className":52401,"code":68874,"language":52403,"meta":63,"style":63},"\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",[32,68876,68877,68887,68901,68905,68913,68927,68947,68967,68979,68987,68993,69003,69013,69017,69021,69027,69039,69051,69063,69079,69083,69087,69093,69105,69117,69129,69139,69149,69153,69157,69165,69177,69187,69199,69203,69207,69215,69225,69235,69245,69249,69253,69263,69277,69289,69293,69297,69309,69319,69335,69345,69349,69353,69367,69377,69387,69391,69395,69401,69415,69419,69423,69431,69441,69445,69449,69458,69468,69472,69480,69488,69492,69500,69514,69528,69540,69548,69587,69619,69651,69683,69715,69723,69731,69745,69779,69813,69847,69881,69915,69923,69931,69939,69944,69949,69968,69973,69993,70001,70006,70019,70040,70053,70057,70062,70067,70080,70100,70128,70132,70136,70140,70148,70156,70160],{"__ignoreMap":63},[67,68878,68879,68881,68883,68885],{"class":69,"line":70},[67,68880,53065],{"class":73},[67,68882,53068],{"class":262},[67,68884,53071],{"class":110},[67,68886,323],{"class":73},[67,68888,68889,68891,68893,68895,68897,68899],{"class":69,"line":191},[67,68890,259],{"class":73},[67,68892,52403],{"class":262},[67,68894,53082],{"class":110},[67,68896,85],{"class":73},[67,68898,53087],{"class":114},[67,68900,323],{"class":73},[67,68902,68903],{"class":69,"line":202},[67,68904,631],{"emptyLinePlaceholder":630},[67,68906,68907,68909,68911],{"class":69,"line":641},[67,68908,259],{"class":73},[67,68910,53100],{"class":262},[67,68912,323],{"class":73},[67,68914,68915,68917,68919,68921,68923,68925],{"class":69,"line":655},[67,68916,328],{"class":73},[67,68918,53110],{"class":262},[67,68920,53113],{"class":110},[67,68922,85],{"class":73},[67,68924,53118],{"class":114},[67,68926,60888],{"class":73},[67,68928,68929,68931,68933,68935,68937,68939,68941,68943,68945],{"class":69,"line":660},[67,68930,328],{"class":73},[67,68932,53110],{"class":262},[67,68934,53129],{"class":110},[67,68936,85],{"class":73},[67,68938,53134],{"class":114},[67,68940,53137],{"class":110},[67,68942,85],{"class":73},[67,68944,53142],{"class":114},[67,68946,60888],{"class":73},[67,68948,68949,68951,68953,68955,68957,68959,68961,68963,68965],{"class":69,"line":665},[67,68950,328],{"class":73},[67,68952,53110],{"class":262},[67,68954,266],{"class":110},[67,68956,85],{"class":73},[67,68958,53157],{"class":114},[67,68960,53137],{"class":110},[67,68962,85],{"class":73},[67,68964,53164],{"class":114},[67,68966,60888],{"class":73},[67,68968,68969,68971,68973,68975,68977],{"class":69,"line":677},[67,68970,328],{"class":73},[67,68972,53173],{"class":262},[67,68974,65385],{"class":73},[67,68976,53173],{"class":262},[67,68978,323],{"class":73},[67,68980,68981,68983,68985],{"class":69,"line":683},[67,68982,328],{"class":73},[67,68984,1903],{"class":262},[67,68986,323],{"class":73},[67,68988,68989,68991],{"class":69,"line":689},[67,68990,8220],{"class":262},[67,68992,17369],{"class":73},[67,68994,68995,68997,68999,69001],{"class":69,"line":694},[67,68996,56467],{"class":77},[67,68998,53203],{"class":73},[67,69000,78],{"class":77},[67,69002,3148],{"class":73},[67,69004,69005,69007,69009,69011],{"class":69,"line":700},[67,69006,56456],{"class":77},[67,69008,53203],{"class":73},[67,69010,78],{"class":77},[67,69012,3148],{"class":73},[67,69014,69015],{"class":69,"line":706},[67,69016,4020],{"class":73},[67,69018,69019],{"class":69,"line":712},[67,69020,631],{"emptyLinePlaceholder":630},[67,69022,69023,69025],{"class":69,"line":717},[67,69024,65436],{"class":110},[67,69026,17369],{"class":73},[67,69028,69029,69031,69033,69035,69037],{"class":69,"line":723},[67,69030,56532],{"class":77},[67,69032,53203],{"class":73},[67,69034,65447],{"class":77},[67,69036,53258],{"class":84},[67,69038,3148],{"class":73},[67,69040,69041,69043,69045,69047,69049],{"class":69,"line":729},[67,69042,56546],{"class":77},[67,69044,53203],{"class":73},[67,69046,65460],{"class":77},[67,69048,53258],{"class":84},[67,69050,3148],{"class":73},[67,69052,69053,69055,69057,69059,69061],{"class":69,"line":735},[67,69054,56467],{"class":77},[67,69056,53203],{"class":73},[67,69058,2689],{"class":77},[67,69060,53258],{"class":84},[67,69062,3148],{"class":73},[67,69064,69065,69067,69069,69071,69073,69075,69077],{"class":69,"line":741},[67,69066,63737],{"class":77},[67,69068,53203],{"class":73},[67,69070,2209],{"class":77},[67,69072,53258],{"class":84},[67,69074,53287],{"class":77},[67,69076,64004],{"class":77},[67,69078,3148],{"class":73},[67,69080,69081],{"class":69,"line":747},[67,69082,4020],{"class":73},[67,69084,69085],{"class":69,"line":753},[67,69086,631],{"emptyLinePlaceholder":630},[67,69088,69089,69091],{"class":69,"line":758},[67,69090,65505],{"class":110},[67,69092,17369],{"class":73},[67,69094,69095,69097,69099,69101,69103],{"class":69,"line":764},[67,69096,56532],{"class":77},[67,69098,53203],{"class":73},[67,69100,2302],{"class":77},[67,69102,2319],{"class":84},[67,69104,3148],{"class":73},[67,69106,69107,69109,69111,69113,69115],{"class":69,"line":770},[67,69108,56546],{"class":77},[67,69110,53203],{"class":73},[67,69112,2896],{"class":77},[67,69114,53258],{"class":84},[67,69116,3148],{"class":73},[67,69118,69119,69121,69123,69125,69127],{"class":69,"line":776},[67,69120,59120],{"class":77},[67,69122,53203],{"class":73},[67,69124,2896],{"class":77},[67,69126,53258],{"class":84},[67,69128,3148],{"class":73},[67,69130,69131,69133,69135,69137],{"class":69,"line":782},[67,69132,56770],{"class":77},[67,69134,53203],{"class":73},[67,69136,53243],{"class":77},[67,69138,3148],{"class":73},[67,69140,69141,69143,69145,69147],{"class":69,"line":788},[67,69142,56781],{"class":77},[67,69144,53203],{"class":73},[67,69146,53434],{"class":77},[67,69148,3148],{"class":73},[67,69150,69151],{"class":69,"line":793},[67,69152,4020],{"class":73},[67,69154,69155],{"class":69,"line":798},[67,69156,631],{"emptyLinePlaceholder":630},[67,69158,69159,69161,69163],{"class":69,"line":816},[67,69160,65505],{"class":110},[67,69162,65578],{"class":262},[67,69164,17369],{"class":73},[67,69166,69167,69169,69171,69173,69175],{"class":69,"line":832},[67,69168,56683],{"class":77},[67,69170,53203],{"class":73},[67,69172,2789],{"class":77},[67,69174,53258],{"class":84},[67,69176,3148],{"class":73},[67,69178,69179,69181,69183,69185],{"class":69,"line":843},[67,69180,64094],{"class":77},[67,69182,53203],{"class":73},[67,69184,65601],{"class":77},[67,69186,3148],{"class":73},[67,69188,69189,69191,69193,69195,69197],{"class":69,"line":848},[67,69190,63760],{"class":77},[67,69192,53203],{"class":73},[67,69194,2689],{"class":77},[67,69196,53258],{"class":84},[67,69198,3148],{"class":73},[67,69200,69201],{"class":69,"line":863},[67,69202,4020],{"class":73},[67,69204,69205],{"class":69,"line":876},[67,69206,631],{"emptyLinePlaceholder":630},[67,69208,69209,69211,69213],{"class":69,"line":889},[67,69210,65505],{"class":110},[67,69212,63053],{"class":262},[67,69214,17369],{"class":73},[67,69216,69217,69219,69221,69223],{"class":69,"line":894},[67,69218,56493],{"class":77},[67,69220,53203],{"class":73},[67,69222,56498],{"class":77},[67,69224,3148],{"class":73},[67,69226,69227,69229,69231,69233],{"class":69,"line":911},[67,69228,56770],{"class":77},[67,69230,53203],{"class":73},[67,69232,53243],{"class":77},[67,69234,3148],{"class":73},[67,69236,69237,69239,69241,69243],{"class":69,"line":927},[67,69238,56781],{"class":77},[67,69240,53203],{"class":73},[67,69242,53346],{"class":77},[67,69244,3148],{"class":73},[67,69246,69247],{"class":69,"line":932},[67,69248,4020],{"class":73},[67,69250,69251],{"class":69,"line":955},[67,69252,631],{"emptyLinePlaceholder":630},[67,69254,69255,69257,69259,69261],{"class":69,"line":971},[67,69256,65505],{"class":110},[67,69258,63053],{"class":262},[67,69260,56836],{"class":262},[67,69262,17369],{"class":73},[67,69264,69265,69267,69269,69271,69273,69275],{"class":69,"line":1010},[67,69266,56467],{"class":77},[67,69268,53203],{"class":73},[67,69270,78],{"class":77},[67,69272,10756],{"class":77},[67,69274,53258],{"class":84},[67,69276,3148],{"class":73},[67,69278,69279,69281,69283,69285,69287],{"class":69,"line":1016},[67,69280,56683],{"class":77},[67,69282,53203],{"class":73},[67,69284,2538],{"class":77},[67,69286,53258],{"class":84},[67,69288,3148],{"class":73},[67,69290,69291],{"class":69,"line":1021},[67,69292,4020],{"class":73},[67,69294,69295],{"class":69,"line":1034},[67,69296,631],{"emptyLinePlaceholder":630},[67,69298,69299,69301,69303,69305,69307],{"class":69,"line":1053},[67,69300,65505],{"class":110},[67,69302,63053],{"class":262},[67,69304,56836],{"class":262},[67,69306,3253],{"class":262},[67,69308,17369],{"class":73},[67,69310,69311,69313,69315,69317],{"class":69,"line":1070},[67,69312,65730],{"class":77},[67,69314,53203],{"class":73},[67,69316,56498],{"class":77},[67,69318,3148],{"class":73},[67,69320,69321,69323,69325,69327,69329,69331,69333],{"class":69,"line":1083},[67,69322,63992],{"class":77},[67,69324,53203],{"class":73},[67,69326,2077],{"class":77},[67,69328,53258],{"class":84},[67,69330,53287],{"class":77},[67,69332,65751],{"class":77},[67,69334,3148],{"class":73},[67,69336,69337,69339,69341,69343],{"class":69,"line":1088},[67,69338,59177],{"class":77},[67,69340,53203],{"class":73},[67,69342,64129],{"class":77},[67,69344,3148],{"class":73},[67,69346,69347],{"class":69,"line":1093},[67,69348,4020],{"class":73},[67,69350,69351],{"class":69,"line":1110},[67,69352,631],{"emptyLinePlaceholder":630},[67,69354,69355,69357,69359,69361,69363,69365],{"class":69,"line":11603},[67,69356,65505],{"class":110},[67,69358,63053],{"class":262},[67,69360,56836],{"class":262},[67,69362,3253],{"class":262},[67,69364,65784],{"class":110},[67,69366,17369],{"class":73},[67,69368,69369,69371,69373,69375],{"class":69,"line":11612},[67,69370,63552],{"class":77},[67,69372,53203],{"class":73},[67,69374,65795],{"class":77},[67,69376,3148],{"class":73},[67,69378,69379,69381,69383,69385],{"class":69,"line":11617},[67,69380,59177],{"class":77},[67,69382,53203],{"class":73},[67,69384,65795],{"class":77},[67,69386,3148],{"class":73},[67,69388,69389],{"class":69,"line":11623},[67,69390,4020],{"class":73},[67,69392,69393],{"class":69,"line":11644},[67,69394,631],{"emptyLinePlaceholder":630},[67,69396,69397,69399],{"class":69,"line":11650},[67,69398,65820],{"class":110},[67,69400,17369],{"class":73},[67,69402,69403,69405,69407,69409,69411,69413],{"class":69,"line":11664},[67,69404,56456],{"class":77},[67,69406,53203],{"class":73},[67,69408,78],{"class":77},[67,69410,65833],{"class":77},[67,69412,53258],{"class":84},[67,69414,3148],{"class":73},[67,69416,69417],{"class":69,"line":11670},[67,69418,4020],{"class":73},[67,69420,69421],{"class":69,"line":11697},[67,69422,631],{"emptyLinePlaceholder":630},[67,69424,69425,69427,69429],{"class":69,"line":11706},[67,69426,65820],{"class":110},[67,69428,63934],{"class":110},[67,69430,17369],{"class":73},[67,69432,69433,69435,69437,69439],{"class":69,"line":11712},[67,69434,56770],{"class":77},[67,69436,53203],{"class":73},[67,69438,56498],{"class":77},[67,69440,3148],{"class":73},[67,69442,69443],{"class":69,"line":11720},[67,69444,4020],{"class":73},[67,69446,69447],{"class":69,"line":11725},[67,69448,631],{"emptyLinePlaceholder":630},[67,69450,69451,69453,69456],{"class":69,"line":18401},[67,69452,65820],{"class":110},[67,69454,69455],{"class":110}," .active",[67,69457,17369],{"class":73},[67,69459,69460,69462,69464,69466],{"class":69,"line":18407},[67,69461,56770],{"class":77},[67,69463,53203],{"class":73},[67,69465,62630],{"class":77},[67,69467,3148],{"class":73},[67,69469,69470],{"class":69,"line":18430},[67,69471,4020],{"class":73},[67,69473,69474,69476,69478],{"class":69,"line":18436},[67,69475,54181],{"class":73},[67,69477,1903],{"class":262},[67,69479,323],{"class":73},[67,69481,69482,69484,69486],{"class":69,"line":18459},[67,69483,376],{"class":73},[67,69485,53100],{"class":262},[67,69487,323],{"class":73},[67,69489,69490],{"class":69,"line":18473},[67,69491,631],{"emptyLinePlaceholder":630},[67,69493,69494,69496,69498],{"class":69,"line":18493},[67,69495,259],{"class":73},[67,69497,53565],{"class":262},[67,69499,323],{"class":73},[67,69501,69502,69504,69506,69508,69510,69512],{"class":69,"line":18499},[67,69503,328],{"class":73},[67,69505,53377],{"class":262},[67,69507,55248],{"class":110},[67,69509,85],{"class":73},[67,69511,65935],{"class":114},[67,69513,323],{"class":73},[67,69515,69516,69518,69520,69522,69524,69526],{"class":69,"line":18510},[67,69517,53107],{"class":73},[67,69519,53377],{"class":262},[67,69521,55248],{"class":110},[67,69523,85],{"class":73},[67,69525,65950],{"class":114},[67,69527,323],{"class":73},[67,69529,69530,69532,69534,69536,69538],{"class":69,"line":18533},[67,69531,56995],{"class":73},[67,69533,391],{"class":262},[67,69535,65961],{"class":73},[67,69537,391],{"class":262},[67,69539,323],{"class":73},[67,69541,69542,69544,69546],{"class":69,"line":18555},[67,69543,56995],{"class":73},[67,69545,2994],{"class":262},[67,69547,323],{"class":73},[67,69549,69550,69552,69554,69556,69558,69560,69562,69564,69566,69568,69570,69572,69574,69577,69579,69581,69583,69585],{"class":69,"line":18560},[67,69551,57063],{"class":73},[67,69553,29],{"class":262},[67,69555,62813],{"class":73},[67,69557,2230],{"class":262},[67,69559,55248],{"class":110},[67,69561,85],{"class":73},[67,69563,61467],{"class":114},[67,69565,62818],{"class":110},[67,69567,85],{"class":73},[67,69569,65996],{"class":114},[67,69571,55712],{"class":110},[67,69573,85],{"class":73},[67,69575,69576],{"class":114},"\"0\"",[67,69578,65999],{"class":73},[67,69580,2230],{"class":262},[67,69582,57075],{"class":73},[67,69584,29],{"class":262},[67,69586,323],{"class":73},[67,69588,69589,69591,69593,69595,69597,69599,69601,69603,69605,69607,69609,69611,69613,69615,69617],{"class":69,"line":18566},[67,69590,57063],{"class":73},[67,69592,29],{"class":262},[67,69594,62813],{"class":73},[67,69596,2230],{"class":262},[67,69598,62818],{"class":110},[67,69600,85],{"class":73},[67,69602,65996],{"class":114},[67,69604,55712],{"class":110},[67,69606,85],{"class":73},[67,69608,353],{"class":114},[67,69610,66026],{"class":73},[67,69612,2230],{"class":262},[67,69614,57075],{"class":73},[67,69616,29],{"class":262},[67,69618,323],{"class":73},[67,69620,69621,69623,69625,69627,69629,69631,69633,69635,69637,69639,69641,69643,69645,69647,69649],{"class":69,"line":18580},[67,69622,57063],{"class":73},[67,69624,29],{"class":262},[67,69626,62813],{"class":73},[67,69628,2230],{"class":262},[67,69630,62818],{"class":110},[67,69632,85],{"class":73},[67,69634,65996],{"class":114},[67,69636,55712],{"class":110},[67,69638,85],{"class":73},[67,69640,5522],{"class":114},[67,69642,66053],{"class":73},[67,69644,2230],{"class":262},[67,69646,57075],{"class":73},[67,69648,29],{"class":262},[67,69650,323],{"class":73},[67,69652,69653,69655,69657,69659,69661,69663,69665,69667,69669,69671,69673,69675,69677,69679,69681],{"class":69,"line":18593},[67,69654,57063],{"class":73},[67,69656,29],{"class":262},[67,69658,62813],{"class":73},[67,69660,2230],{"class":262},[67,69662,62818],{"class":110},[67,69664,85],{"class":73},[67,69666,65996],{"class":114},[67,69668,55712],{"class":110},[67,69670,85],{"class":73},[67,69672,5535],{"class":114},[67,69674,66080],{"class":73},[67,69676,2230],{"class":262},[67,69678,57075],{"class":73},[67,69680,29],{"class":262},[67,69682,323],{"class":73},[67,69684,69685,69687,69689,69691,69693,69695,69697,69699,69701,69703,69705,69707,69709,69711,69713],{"class":69,"line":18598},[67,69686,57063],{"class":73},[67,69688,29],{"class":262},[67,69690,62813],{"class":73},[67,69692,2230],{"class":262},[67,69694,62818],{"class":110},[67,69696,85],{"class":73},[67,69698,65996],{"class":114},[67,69700,55712],{"class":110},[67,69702,85],{"class":73},[67,69704,5548],{"class":114},[67,69706,66107],{"class":73},[67,69708,2230],{"class":262},[67,69710,57075],{"class":73},[67,69712,29],{"class":262},[67,69714,323],{"class":73},[67,69716,69717,69719,69721],{"class":69,"line":18612},[67,69718,57168],{"class":73},[67,69720,2994],{"class":262},[67,69722,323],{"class":73},[67,69724,69725,69727,69729],{"class":69,"line":18617},[67,69726,53542],{"class":73},[67,69728,53377],{"class":262},[67,69730,323],{"class":73},[67,69732,69733,69735,69737,69739,69741,69743],{"class":69,"line":18623},[67,69734,53107],{"class":73},[67,69736,53377],{"class":262},[67,69738,55248],{"class":110},[67,69740,85],{"class":73},[67,69742,66144],{"class":114},[67,69744,323],{"class":73},[67,69746,69747,69749,69751,69753,69755,69757,69759,69761,69763,69765,69767,69769,69771,69773,69775,69777],{"class":69,"line":18628},[67,69748,56995],{"class":73},[67,69750,53377],{"class":262},[67,69752,55248],{"class":110},[67,69754,85],{"class":73},[67,69756,66159],{"class":114},[67,69758,62813],{"class":73},[67,69760,3317],{"class":262},[67,69762,57000],{"class":110},[67,69764,85],{"class":73},[67,69766,66170],{"class":114},[67,69768,57008],{"class":110},[67,69770,85],{"class":73},[67,69772,9468],{"class":114},[67,69774,66179],{"class":73},[67,69776,53377],{"class":262},[67,69778,323],{"class":73},[67,69780,69781,69783,69785,69787,69789,69791,69793,69795,69797,69799,69801,69803,69805,69807,69809,69811],{"class":69,"line":18642},[67,69782,56995],{"class":73},[67,69784,53377],{"class":262},[67,69786,55248],{"class":110},[67,69788,85],{"class":73},[67,69790,64383],{"class":114},[67,69792,62813],{"class":73},[67,69794,3317],{"class":262},[67,69796,57000],{"class":110},[67,69798,85],{"class":73},[67,69800,66206],{"class":114},[67,69802,57008],{"class":110},[67,69804,85],{"class":73},[67,69806,9468],{"class":114},[67,69808,66179],{"class":73},[67,69810,53377],{"class":262},[67,69812,323],{"class":73},[67,69814,69815,69817,69819,69821,69823,69825,69827,69829,69831,69833,69835,69837,69839,69841,69843,69845],{"class":69,"line":18647},[67,69816,56995],{"class":73},[67,69818,53377],{"class":262},[67,69820,55248],{"class":110},[67,69822,85],{"class":73},[67,69824,64383],{"class":114},[67,69826,62813],{"class":73},[67,69828,3317],{"class":262},[67,69830,57000],{"class":110},[67,69832,85],{"class":73},[67,69834,66241],{"class":114},[67,69836,57008],{"class":110},[67,69838,85],{"class":73},[67,69840,9468],{"class":114},[67,69842,66179],{"class":73},[67,69844,53377],{"class":262},[67,69846,323],{"class":73},[67,69848,69849,69851,69853,69855,69857,69859,69861,69863,69865,69867,69869,69871,69873,69875,69877,69879],{"class":69,"line":18652},[67,69850,56995],{"class":73},[67,69852,53377],{"class":262},[67,69854,55248],{"class":110},[67,69856,85],{"class":73},[67,69858,64383],{"class":114},[67,69860,62813],{"class":73},[67,69862,3317],{"class":262},[67,69864,57000],{"class":110},[67,69866,85],{"class":73},[67,69868,66276],{"class":114},[67,69870,57008],{"class":110},[67,69872,85],{"class":73},[67,69874,9468],{"class":114},[67,69876,66179],{"class":73},[67,69878,53377],{"class":262},[67,69880,323],{"class":73},[67,69882,69883,69885,69887,69889,69891,69893,69895,69897,69899,69901,69903,69905,69907,69909,69911,69913],{"class":69,"line":18666},[67,69884,56995],{"class":73},[67,69886,53377],{"class":262},[67,69888,55248],{"class":110},[67,69890,85],{"class":73},[67,69892,64383],{"class":114},[67,69894,62813],{"class":73},[67,69896,3317],{"class":262},[67,69898,57000],{"class":110},[67,69900,85],{"class":73},[67,69902,66311],{"class":114},[67,69904,57008],{"class":110},[67,69906,85],{"class":73},[67,69908,9468],{"class":114},[67,69910,66179],{"class":73},[67,69912,53377],{"class":262},[67,69914,323],{"class":73},[67,69916,69917,69919,69921],{"class":69,"line":18678},[67,69918,53542],{"class":73},[67,69920,53377],{"class":262},[67,69922,323],{"class":73},[67,69924,69925,69927,69929],{"class":69,"line":18683},[67,69926,54181],{"class":73},[67,69928,53377],{"class":262},[67,69930,323],{"class":73},[67,69932,69933,69935,69937],{"class":69,"line":18696},[67,69934,328],{"class":73},[67,69936,53578],{"class":262},[67,69938,323],{"class":73},[67,69940,69941],{"class":69,"line":18701},[67,69942,69943],{"class":2058},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[67,69945,69946],{"class":69,"line":18706},[67,69947,69948],{"class":2058},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[67,69950,69951,69953,69955,69957,69959,69961,69963,69966],{"class":69,"line":18711},[67,69952,13021],{"class":84},[67,69954,63053],{"class":77},[67,69956,671],{"class":84},[67,69958,56157],{"class":73},[67,69960,56160],{"class":110},[67,69962,854],{"class":73},[67,69964,69965],{"class":114},"'.tab-nav ul'",[67,69967,829],{"class":73},[67,69969,69970],{"class":69,"line":18724},[67,69971,69972],{"class":2058},"    \u002F\u002F 2.添加事件\n",[67,69974,69975,69977,69979,69981,69983,69985,69987,69989,69991],{"class":69,"line":18729},[67,69976,68714],{"class":73},[67,69978,59574],{"class":110},[67,69980,854],{"class":73},[67,69982,59579],{"class":114},[67,69984,1868],{"class":73},[67,69986,56210],{"class":84},[67,69988,3505],{"class":73},[67,69990,2074],{"class":7033},[67,69992,14241],{"class":73},[67,69994,69995,69997,69999],{"class":69,"line":34402},[67,69996,60005],{"class":73},[67,69998,68770],{"class":110},[67,70000,68773],{"class":73},[67,70002,70003],{"class":69,"line":34408},[67,70004,70005],{"class":2058},"      \u002F\u002Fe.targer是我们点击的对象\n",[67,70007,70008,70010,70012,70014,70017],{"class":69,"line":34414},[67,70009,56241],{"class":84},[67,70011,68794],{"class":73},[67,70013,56247],{"class":84},[67,70015,70016],{"class":114}," 'A'",[67,70018,14241],{"class":73},[67,70020,70021,70023,70025,70027,70030,70032,70034,70036,70038],{"class":69,"line":34420},[67,70022,53690],{"class":73},[67,70024,56160],{"class":110},[67,70026,854],{"class":73},[67,70028,70029],{"class":114},"'.active'",[67,70031,58764],{"class":73},[67,70033,58767],{"class":110},[67,70035,854],{"class":73},[67,70037,66474],{"class":114},[67,70039,829],{"class":73},[67,70041,70042,70045,70047,70049,70051],{"class":69,"line":34426},[67,70043,70044],{"class":73},"        e.target.classList.",[67,70046,7151],{"class":110},[67,70048,854],{"class":73},[67,70050,66474],{"class":114},[67,70052,829],{"class":73},[67,70054,70055],{"class":69,"line":34437},[67,70056,631],{"emptyLinePlaceholder":630},[67,70058,70059],{"class":69,"line":34443},[67,70060,70061],{"class":2058},"        \u002F\u002F 下面大盒子模块\n",[67,70063,70064],{"class":69,"line":34463},[67,70065,70066],{"class":2058},"        \u002F\u002F console.log(e.target.dataset.id)\n",[67,70068,70069,70071,70073,70075,70077],{"class":69,"line":34469},[67,70070,63031],{"class":84},[67,70072,4856],{"class":77},[67,70074,671],{"class":84},[67,70076,47334],{"class":84},[67,70078,70079],{"class":73},"e.target.dataset.id\n",[67,70081,70082,70084,70086,70088,70090,70092,70094,70096,70098],{"class":69,"line":34480},[67,70083,53690],{"class":73},[67,70085,56160],{"class":110},[67,70087,854],{"class":73},[67,70089,66522],{"class":114},[67,70091,58764],{"class":73},[67,70093,58767],{"class":110},[67,70095,854],{"class":73},[67,70097,66474],{"class":114},[67,70099,829],{"class":73},[67,70101,70102,70104,70106,70108,70110,70112,70114,70116,70118,70120,70122,70124,70126],{"class":69,"line":34486},[67,70103,53690],{"class":73},[67,70105,56160],{"class":110},[67,70107,854],{"class":73},[67,70109,66548],{"class":114},[67,70111,2432],{"class":73},[67,70113,47334],{"class":84},[67,70115,906],{"class":77},[67,70117,58793],{"class":114},[67,70119,58764],{"class":73},[67,70121,7151],{"class":110},[67,70123,854],{"class":73},[67,70125,66474],{"class":114},[67,70127,829],{"class":73},[67,70129,70130],{"class":69,"line":34492},[67,70131,631],{"emptyLinePlaceholder":630},[67,70133,70134],{"class":69,"line":34498},[67,70135,54162],{"class":73},[67,70137,70138],{"class":69,"line":34504},[67,70139,35230],{"class":73},[67,70141,70142,70144,70146],{"class":69,"line":34510},[67,70143,54181],{"class":73},[67,70145,53578],{"class":262},[67,70147,323],{"class":73},[67,70149,70150,70152,70154],{"class":69,"line":34516},[67,70151,376],{"class":73},[67,70153,53565],{"class":262},[67,70155,323],{"class":73},[67,70157,70158],{"class":69,"line":34522},[67,70159,631],{"emptyLinePlaceholder":630},[67,70161,70162,70164,70166],{"class":69,"line":34542},[67,70163,376],{"class":73},[67,70165,52403],{"class":262},[67,70167,323],{"class":73},[391,70169,70171],{"id":70170},"_333-页面加载事件","3.3.3 页面加载事件",[26,70173,70174],{},[29,70175,70176],{},"load",[19,70178,70179],{},[3317,70180],{"alt":63,"src":70181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70183,70184],{},"window代表整个窗口，比document还要大",[19,70186,70187],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70189,70190],{},"img.addEventListener('load', function () {",[19,70192,70193],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70195,54228],{},[26,70197,70198],{"start":191},[29,70199,70200],{},"DOMContentLoaded",[19,70202,70203],{},[3317,70204],{"alt":63,"src":70205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70207,70208],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[391,70210,70212],{"id":70211},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70214,70215],{},[3317,70216],{"alt":63,"src":70217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70219,70220],{},[3317,70221],{"alt":63,"src":70222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70224,70225],{},[3317,70226],{"alt":63,"src":70227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70229,70230],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70232,70233],{},"获得的是数字型数据，不带单位",[19,70235,70236],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70238,70239],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70241,70242],{},"它是通过document.documentElement来获取",[19,70244,70245],{},[3317,70246],{"alt":63,"src":70247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70249,70250],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[391,70252,70254],{"id":70253},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70256,70257],{},[3317,70258],{"alt":63,"src":70259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70261,70262],{},[3317,70263],{"alt":63,"src":70264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[391,70266,70268],{"id":70267},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70270,70271],{},[3317,70272],{"alt":63,"src":70273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70275,70276],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70278,70279],{},[3317,70280],{"alt":63,"src":70281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70283,70284],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70286,70287],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70289,70290],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70292,70293],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70295,70296],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70298,70299],{},[3317,70300],{"alt":63,"src":70301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70303,70304],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70306,70307],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70309,70310],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70312,70313],{},"e.pageX-box.getBoundingClientRect()",[391,70315,70317],{"id":70316},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70319,70320],{},[3317,70321],{"alt":63,"src":70322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70324,70325],{},"这个是相对于视口来说的，它是个方法，不是属性值",[391,70327,70329],{"id":70328},"_338-总结","3.3.8 总结",[19,70331,70332],{},[3317,70333],{"alt":63,"src":70334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70336,70337],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70339,70340],{},"修改盒子的宽高只能通过width和height来实现",[391,70342,70344],{"id":70343},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[58,70346,70348],{"className":52401,"code":70347,"language":52403,"meta":63,"style":63},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[32,70349,70350,70355,70360,70365,70370],{"__ignoreMap":63},[67,70351,70352],{"class":69,"line":70},[67,70353,70354],{"class":73},"\u002F* 页面滑动 *\u002F\n",[67,70356,70357],{"class":69,"line":191},[67,70358,70359],{"class":73},"html {\n",[67,70361,70362],{"class":69,"line":202},[67,70363,70364],{"class":73},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[67,70366,70367],{"class":69,"line":641},[67,70368,70369],{"class":73},"  scroll-behavior: smooth;\n",[67,70371,70372],{"class":69,"line":655},[67,70373,3419],{"class":73},[19,70375,70376],{},"默认是auto",[391,70378,70380],{"id":70379},"_3310-日期对象","3.3.10 日期对象",[23794,70382,70384],{"id":70383},"_33101-实例化","3.3.10.1 实例化",[19,70386,70387],{},[3317,70388],{"alt":63,"src":70389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23794,70391,70393],{"id":70392},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70395,70396],{},[3317,70397],{"alt":63,"src":70398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70400,70401],{},"月份+1",[19,70403,70404],{},"老外认为第一天为0，星期天",[19,70406,70407],{},"方法使用的时候必须要跟括号",[19,70409,70410],{},"快速获得日期",[19,70412,70413],{},"\u002F\u002F 得到年月日",[19,70415,70416],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70418,70419],{},"\u002F\u002F 得到当地日期",[19,70421,70422],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70424,70425],{},"\u002F\u002F 得到当地时间",[19,70427,70428],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70430,70431],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70433,70434],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53578,70436,70437],{},"\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,70439,70440],{},"学会去封装函数！",[23794,70442,70444],{"id":70443},"_33103-时间戳","3.3.10.3 时间戳",[19,70446,70447],{},[3317,70448],{"alt":63,"src":70449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70451,70452],{},[3317,70453],{"alt":63,"src":70454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70456,70457],{},"三种方法记住一个就可以",[391,70459,70461],{"id":70460},"_3311-节点操作","3.3.11 节点操作",[23794,70463,70465],{"id":70464},"_33111-dom节点","3.3.11.1 DOM节点",[19,70467,70468],{},[3317,70469],{"alt":63,"src":70470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70472,70473],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23794,70475,70477],{"id":70476},"_33112-查找节点","3.3.11.2 查找节点",[19,70479,70480],{},"前边的document.querySelector()是获取的元素",[19,70482,70483],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70485,70486],{},[3317,70487],{"alt":63,"src":70488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[26,70490,70491],{},[29,70492,70493],{},"父节点",[19,70495,70496],{},[3317,70497],{"alt":63,"src":70498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[26,70500,70501],{"start":191},[29,70502,70503],{},"子节点",[19,70505,70506],{},[3317,70507],{"alt":63,"src":70508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70510,70511],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70513,70514],{},"children获得的是伪数组，是亲儿子",[26,70516,70517],{"start":202},[29,70518,70519],{},"兄弟节点",[19,70521,70522],{},[3317,70523],{"alt":63,"src":70524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23794,70526,70528],{"id":70527},"_33113-增加节点","3.3.11.3 增加节点",[19,70530,70531],{},[3317,70532],{"alt":63,"src":70533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70535,70536],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70538,70539],{},[3317,70540],{"alt":63,"src":70541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70543,70544],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70546,70547],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70549,70550],{},"例：",[53578,70552,70553],{},"\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,70555,70556],{},[3317,70557],{"alt":63,"src":70558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70560,70561],{},"false只克隆标签，里边的内容不会克隆过来",[58,70563,70565],{"className":52401,"code":70564,"language":52403,"meta":63,"style":63},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[32,70566,70567],{"__ignoreMap":63},[67,70568,70569],{"class":69,"line":70},[67,70570,70564],{"class":73},[23794,70572,70574],{"id":70573},"_33114-删除节点","3.3.11.4 删除节点",[19,70576,70577],{},[3317,70578],{"alt":63,"src":70579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70581,70582],{},"父亲删儿子",[19,70584,70585],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[391,70587,70589],{"id":70588},"_3312-m端事件","3.3.12 M端事件",[19,70591,70592],{},"M端就是移动端",[19,70594,70595],{},[3317,70596],{"alt":63,"src":70597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[391,70599,70601],{"id":70600},"_3313-插件","3.3.13 插件",[19,70603,70604],{},"要熟悉官网！！！",[19,70606,70607],{},[2230,70608,70609],{"href":70609,"rel":70610},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25657],[19,70612,70613],{},[2230,70614,70615],{"href":70615,"rel":70616},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25657],[391,70618,70620],{"id":70619},"_3314-学生信息表","3.3.14 学生信息表",[26,70622,70623,70626,70629,70632,70635,70638,70641,70644],{},[29,70624,70625],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[29,70627,70628],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[29,70630,70631],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[29,70633,70634],{},"用好表单元素自带的属性，value,name等",[29,70636,70637],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[29,70639,70640],{},"不要忘记事件对象",[29,70642,70643],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[29,70645,70646],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70648,70649],{},"结构：",[58,70651,70653],{"className":52401,"code":70652,"language":52403,"meta":63,"style":63},"\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",[32,70654,70655,70665,70679,70683,70691,70705,70725,70746,70759,70783,70791,70795,70803,70816,70837,70865,70893,70898,70920,70940,70959,70967,70995,71017,71037,71057,71077,71097,71117,71125,71145,71153,71157,71170,71178,71186,71194,71207,71220,71233,71246,71259,71272,71285,71293,71301,71309,71314,71319,71324,71329,71334,71339,71344,71349,71354,71359,71364,71369,71374,71382,71390,71398,71402,71422,71441,71461,71481,71501,71521,71525,71530,71550,71555,71565,71570,71575,71595,71617,71622,71632,71636,71640,71645,71650,71679,71693,71708,71712,71716,71720,71725,71736,71749,71754,71759,71764,71769,71774,71778,71783,71788,71797,71802,71807,71819,71824,71831,71835,71840,71850,71855,71865,71870,71898,71919,71929,71949,71967,71984,72001,72018,72035,72039,72049,72054,72059,72064,72075,72079,72083,72087,72092,72097,72118,72130,72135,72140,72145,72159,72164,72171,72175,72179,72187,72191,72199,72203],{"__ignoreMap":63},[67,70656,70657,70659,70661,70663],{"class":69,"line":70},[67,70658,53065],{"class":73},[67,70660,53068],{"class":262},[67,70662,53071],{"class":110},[67,70664,323],{"class":73},[67,70666,70667,70669,70671,70673,70675,70677],{"class":69,"line":191},[67,70668,259],{"class":73},[67,70670,52403],{"class":262},[67,70672,53082],{"class":110},[67,70674,85],{"class":73},[67,70676,53087],{"class":114},[67,70678,323],{"class":73},[67,70680,70681],{"class":69,"line":202},[67,70682,631],{"emptyLinePlaceholder":630},[67,70684,70685,70687,70689],{"class":69,"line":641},[67,70686,259],{"class":73},[67,70688,53100],{"class":262},[67,70690,323],{"class":73},[67,70692,70693,70695,70697,70699,70701,70703],{"class":69,"line":655},[67,70694,328],{"class":73},[67,70696,53110],{"class":262},[67,70698,53113],{"class":110},[67,70700,85],{"class":73},[67,70702,53118],{"class":114},[67,70704,60888],{"class":73},[67,70706,70707,70709,70711,70713,70715,70717,70719,70721,70723],{"class":69,"line":660},[67,70708,328],{"class":73},[67,70710,53110],{"class":262},[67,70712,266],{"class":110},[67,70714,85],{"class":73},[67,70716,53157],{"class":114},[67,70718,53137],{"class":110},[67,70720,85],{"class":73},[67,70722,53164],{"class":114},[67,70724,60888],{"class":73},[67,70726,70727,70729,70731,70733,70735,70737,70739,70741,70744],{"class":69,"line":665},[67,70728,328],{"class":73},[67,70730,53110],{"class":262},[67,70732,53129],{"class":110},[67,70734,85],{"class":73},[67,70736,53134],{"class":114},[67,70738,53137],{"class":110},[67,70740,85],{"class":73},[67,70742,70743],{"class":114},"\"ie=edge\"",[67,70745,60888],{"class":73},[67,70747,70748,70750,70752,70755,70757],{"class":69,"line":677},[67,70749,328],{"class":73},[67,70751,53173],{"class":262},[67,70753,70754],{"class":73},">学生信息管理\u003C\u002F",[67,70756,53173],{"class":262},[67,70758,323],{"class":73},[67,70760,70761,70763,70766,70769,70771,70774,70776,70778,70781],{"class":69,"line":683},[67,70762,328],{"class":73},[67,70764,70765],{"class":262},"link",[67,70767,70768],{"class":110}," rel",[67,70770,85],{"class":73},[67,70772,70773],{"class":114},"\"stylesheet\"",[67,70775,62818],{"class":110},[67,70777,85],{"class":73},[67,70779,70780],{"class":114},"\"css\u002Findex.css\"",[67,70782,60888],{"class":73},[67,70784,70785,70787,70789],{"class":69,"line":689},[67,70786,376],{"class":73},[67,70788,53100],{"class":262},[67,70790,323],{"class":73},[67,70792,70793],{"class":69,"line":694},[67,70794,631],{"emptyLinePlaceholder":630},[67,70796,70797,70799,70801],{"class":69,"line":700},[67,70798,259],{"class":73},[67,70800,53565],{"class":262},[67,70802,323],{"class":73},[67,70804,70805,70807,70809,70812,70814],{"class":69,"line":706},[67,70806,328],{"class":73},[67,70808,10],{"class":262},[67,70810,70811],{"class":73},">新增学员\u003C\u002F",[67,70813,10],{"class":262},[67,70815,323],{"class":73},[67,70817,70818,70820,70822,70824,70826,70828,70831,70833,70835],{"class":69,"line":712},[67,70819,328],{"class":73},[67,70821,68385],{"class":262},[67,70823,55248],{"class":110},[67,70825,85],{"class":73},[67,70827,64424],{"class":114},[67,70829,70830],{"class":110}," autocomplete",[67,70832,85],{"class":73},[67,70834,33547],{"class":114},[67,70836,323],{"class":73},[67,70838,70839,70842,70844,70846,70848,70850,70852,70854,70857,70859,70861,70863],{"class":69,"line":717},[67,70840,70841],{"class":73},"    姓名：\u003C",[67,70843,55583],{"class":262},[67,70845,274],{"class":110},[67,70847,85],{"class":73},[67,70849,64459],{"class":114},[67,70851,55248],{"class":110},[67,70853,85],{"class":73},[67,70855,70856],{"class":114},"\"uname\"",[67,70858,266],{"class":110},[67,70860,85],{"class":73},[67,70862,70856],{"class":114},[67,70864,60888],{"class":73},[67,70866,70867,70870,70872,70874,70876,70878,70880,70882,70885,70887,70889,70891],{"class":69,"line":723},[67,70868,70869],{"class":73},"    年龄：\u003C",[67,70871,55583],{"class":262},[67,70873,274],{"class":110},[67,70875,85],{"class":73},[67,70877,64459],{"class":114},[67,70879,55248],{"class":110},[67,70881,85],{"class":73},[67,70883,70884],{"class":114},"\"age\"",[67,70886,266],{"class":110},[67,70888,85],{"class":73},[67,70890,70884],{"class":114},[67,70892,60888],{"class":73},[67,70894,70895],{"class":69,"line":729},[67,70896,70897],{"class":73},"    性别:\n",[67,70899,70900,70902,70905,70907,70909,70912,70914,70916,70918],{"class":69,"line":735},[67,70901,53107],{"class":73},[67,70903,70904],{"class":262},"select",[67,70906,266],{"class":110},[67,70908,85],{"class":73},[67,70910,70911],{"class":114},"\"gender\"",[67,70913,55248],{"class":110},[67,70915,85],{"class":73},[67,70917,70911],{"class":114},[67,70919,323],{"class":73},[67,70921,70922,70924,70927,70929,70931,70933,70936,70938],{"class":69,"line":741},[67,70923,56995],{"class":73},[67,70925,70926],{"class":262},"option",[67,70928,68411],{"class":110},[67,70930,85],{"class":73},[67,70932,11761],{"class":114},[67,70934,70935],{"class":73},">男\u003C\u002F",[67,70937,70926],{"class":262},[67,70939,323],{"class":73},[67,70941,70942,70944,70946,70948,70950,70952,70955,70957],{"class":69,"line":747},[67,70943,56995],{"class":73},[67,70945,70926],{"class":262},[67,70947,68411],{"class":110},[67,70949,85],{"class":73},[67,70951,11830],{"class":114},[67,70953,70954],{"class":73},">女\u003C\u002F",[67,70956,70926],{"class":262},[67,70958,323],{"class":73},[67,70960,70961,70963,70965],{"class":69,"line":753},[67,70962,53542],{"class":73},[67,70964,70904],{"class":262},[67,70966,323],{"class":73},[67,70968,70969,70972,70974,70976,70978,70980,70982,70984,70987,70989,70991,70993],{"class":69,"line":758},[67,70970,70971],{"class":73},"    薪资：\u003C",[67,70973,55583],{"class":262},[67,70975,274],{"class":110},[67,70977,85],{"class":73},[67,70979,64459],{"class":114},[67,70981,55248],{"class":110},[67,70983,85],{"class":73},[67,70985,70986],{"class":114},"\"salary\"",[67,70988,266],{"class":110},[67,70990,85],{"class":73},[67,70992,70986],{"class":114},[67,70994,60888],{"class":73},[67,70996,70997,71000,71002,71004,71006,71009,71011,71013,71015],{"class":69,"line":764},[67,70998,70999],{"class":73},"    就业城市：\u003C",[67,71001,70904],{"class":262},[67,71003,266],{"class":110},[67,71005,85],{"class":73},[67,71007,71008],{"class":114},"\"city\"",[67,71010,55248],{"class":110},[67,71012,85],{"class":73},[67,71014,71008],{"class":114},[67,71016,323],{"class":73},[67,71018,71019,71021,71023,71025,71027,71030,71033,71035],{"class":69,"line":770},[67,71020,56995],{"class":73},[67,71022,70926],{"class":262},[67,71024,68411],{"class":110},[67,71026,85],{"class":73},[67,71028,71029],{"class":114},"\"北京\"",[67,71031,71032],{"class":73},">北京\u003C\u002F",[67,71034,70926],{"class":262},[67,71036,323],{"class":73},[67,71038,71039,71041,71043,71045,71047,71050,71053,71055],{"class":69,"line":776},[67,71040,56995],{"class":73},[67,71042,70926],{"class":262},[67,71044,68411],{"class":110},[67,71046,85],{"class":73},[67,71048,71049],{"class":114},"\"上海\"",[67,71051,71052],{"class":73},">上海\u003C\u002F",[67,71054,70926],{"class":262},[67,71056,323],{"class":73},[67,71058,71059,71061,71063,71065,71067,71070,71073,71075],{"class":69,"line":782},[67,71060,56995],{"class":73},[67,71062,70926],{"class":262},[67,71064,68411],{"class":110},[67,71066,85],{"class":73},[67,71068,71069],{"class":114},"\"广州\"",[67,71071,71072],{"class":73},">广州\u003C\u002F",[67,71074,70926],{"class":262},[67,71076,323],{"class":73},[67,71078,71079,71081,71083,71085,71087,71090,71093,71095],{"class":69,"line":788},[67,71080,56995],{"class":73},[67,71082,70926],{"class":262},[67,71084,68411],{"class":110},[67,71086,85],{"class":73},[67,71088,71089],{"class":114},"\"深圳\"",[67,71091,71092],{"class":73},">深圳\u003C\u002F",[67,71094,70926],{"class":262},[67,71096,323],{"class":73},[67,71098,71099,71101,71103,71105,71107,71110,71113,71115],{"class":69,"line":793},[67,71100,56995],{"class":73},[67,71102,70926],{"class":262},[67,71104,68411],{"class":110},[67,71106,85],{"class":73},[67,71108,71109],{"class":114},"\"曹县\"",[67,71111,71112],{"class":73},">曹县\u003C\u002F",[67,71114,70926],{"class":262},[67,71116,323],{"class":73},[67,71118,71119,71121,71123],{"class":69,"line":798},[67,71120,53542],{"class":73},[67,71122,70904],{"class":262},[67,71124,323],{"class":73},[67,71126,71127,71129,71131,71133,71135,71138,71141,71143],{"class":69,"line":816},[67,71128,53107],{"class":73},[67,71130,55648],{"class":262},[67,71132,55248],{"class":110},[67,71134,85],{"class":73},[67,71136,71137],{"class":114},"\"add\"",[67,71139,71140],{"class":73},">录入\u003C\u002F",[67,71142,55648],{"class":262},[67,71144,323],{"class":73},[67,71146,71147,71149,71151],{"class":69,"line":832},[67,71148,54181],{"class":73},[67,71150,68385],{"class":262},[67,71152,323],{"class":73},[67,71154,71155],{"class":69,"line":843},[67,71156,631],{"emptyLinePlaceholder":630},[67,71158,71159,71161,71163,71166,71168],{"class":69,"line":848},[67,71160,328],{"class":73},[67,71162,10],{"class":262},[67,71164,71165],{"class":73},">就业榜\u003C\u002F",[67,71167,10],{"class":262},[67,71169,323],{"class":73},[67,71171,71172,71174,71176],{"class":69,"line":863},[67,71173,328],{"class":73},[67,71175,399],{"class":262},[67,71177,323],{"class":73},[67,71179,71180,71182,71184],{"class":69,"line":876},[67,71181,53107],{"class":73},[67,71183,402],{"class":262},[67,71185,323],{"class":73},[67,71187,71188,71190,71192],{"class":69,"line":889},[67,71189,56995],{"class":73},[67,71191,405],{"class":262},[67,71193,323],{"class":73},[67,71195,71196,71198,71200,71203,71205],{"class":69,"line":894},[67,71197,57063],{"class":73},[67,71199,408],{"class":262},[67,71201,71202],{"class":73},">序号\u003C\u002F",[67,71204,408],{"class":262},[67,71206,323],{"class":73},[67,71208,71209,71211,71213,71216,71218],{"class":69,"line":911},[67,71210,57063],{"class":73},[67,71212,408],{"class":262},[67,71214,71215],{"class":73},">姓名\u003C\u002F",[67,71217,408],{"class":262},[67,71219,323],{"class":73},[67,71221,71222,71224,71226,71229,71231],{"class":69,"line":927},[67,71223,57063],{"class":73},[67,71225,408],{"class":262},[67,71227,71228],{"class":73},">年龄\u003C\u002F",[67,71230,408],{"class":262},[67,71232,323],{"class":73},[67,71234,71235,71237,71239,71242,71244],{"class":69,"line":932},[67,71236,57063],{"class":73},[67,71238,408],{"class":262},[67,71240,71241],{"class":73},">性别\u003C\u002F",[67,71243,408],{"class":262},[67,71245,323],{"class":73},[67,71247,71248,71250,71252,71255,71257],{"class":69,"line":955},[67,71249,57063],{"class":73},[67,71251,408],{"class":262},[67,71253,71254],{"class":73},">薪资\u003C\u002F",[67,71256,408],{"class":262},[67,71258,323],{"class":73},[67,71260,71261,71263,71265,71268,71270],{"class":69,"line":971},[67,71262,57063],{"class":73},[67,71264,408],{"class":262},[67,71266,71267],{"class":73},">就业城市\u003C\u002F",[67,71269,408],{"class":262},[67,71271,323],{"class":73},[67,71273,71274,71276,71278,71281,71283],{"class":69,"line":1010},[67,71275,57063],{"class":73},[67,71277,408],{"class":262},[67,71279,71280],{"class":73},">操作\u003C\u002F",[67,71282,408],{"class":262},[67,71284,323],{"class":73},[67,71286,71287,71289,71291],{"class":69,"line":1016},[67,71288,57168],{"class":73},[67,71290,405],{"class":262},[67,71292,323],{"class":73},[67,71294,71295,71297,71299],{"class":69,"line":1021},[67,71296,53542],{"class":73},[67,71298,402],{"class":262},[67,71300,323],{"class":73},[67,71302,71303,71305,71307],{"class":69,"line":1034},[67,71304,53107],{"class":73},[67,71306,419],{"class":262},[67,71308,323],{"class":73},[67,71310,71311],{"class":69,"line":1053},[67,71312,71313],{"class":2058},"      \u003C!-- \n",[67,71315,71316],{"class":69,"line":1070},[67,71317,71318],{"class":2058},"        \u003Ctr>\n",[67,71320,71321],{"class":69,"line":1083},[67,71322,71323],{"class":2058},"          \u003Ctd>1001\u003C\u002Ftd>\n",[67,71325,71326],{"class":69,"line":1088},[67,71327,71328],{"class":2058},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[67,71330,71331],{"class":69,"line":1093},[67,71332,71333],{"class":2058},"          \u003Ctd>19\u003C\u002Ftd>\n",[67,71335,71336],{"class":69,"line":1110},[67,71337,71338],{"class":2058},"          \u003Ctd>男\u003C\u002Ftd>\n",[67,71340,71341],{"class":69,"line":11603},[67,71342,71343],{"class":2058},"          \u003Ctd>15000\u003C\u002Ftd>\n",[67,71345,71346],{"class":69,"line":11612},[67,71347,71348],{"class":2058},"          \u003Ctd>上海\u003C\u002Ftd>\n",[67,71350,71351],{"class":69,"line":11617},[67,71352,71353],{"class":2058},"          \u003Ctd>\n",[67,71355,71356],{"class":69,"line":11623},[67,71357,71358],{"class":2058},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[67,71360,71361],{"class":69,"line":11644},[67,71362,71363],{"class":2058},"          \u003C\u002Ftd>\n",[67,71365,71366],{"class":69,"line":11650},[67,71367,71368],{"class":2058},"        \u003C\u002Ftr> \n",[67,71370,71371],{"class":69,"line":11664},[67,71372,71373],{"class":2058},"        -->\n",[67,71375,71376,71378,71380],{"class":69,"line":11670},[67,71377,53542],{"class":73},[67,71379,419],{"class":262},[67,71381,323],{"class":73},[67,71383,71384,71386,71388],{"class":69,"line":11697},[67,71385,54181],{"class":73},[67,71387,399],{"class":262},[67,71389,323],{"class":73},[67,71391,71392,71394,71396],{"class":69,"line":11706},[67,71393,328],{"class":73},[67,71395,53578],{"class":262},[67,71397,323],{"class":73},[67,71399,71400],{"class":69,"line":11712},[67,71401,61719],{"class":2058},[67,71403,71404,71406,71409,71411,71413,71415,71417,71420],{"class":69,"line":11720},[67,71405,13021],{"class":84},[67,71407,71408],{"class":77}," uname",[67,71410,671],{"class":84},[67,71412,56157],{"class":73},[67,71414,56160],{"class":110},[67,71416,854],{"class":73},[67,71418,71419],{"class":114},"'.uname'",[67,71421,829],{"class":73},[67,71423,71424,71426,71428,71430,71432,71434,71436,71439],{"class":69,"line":11725},[67,71425,13021],{"class":84},[67,71427,17486],{"class":77},[67,71429,671],{"class":84},[67,71431,56157],{"class":73},[67,71433,56160],{"class":110},[67,71435,854],{"class":73},[67,71437,71438],{"class":114},"'.age'",[67,71440,829],{"class":73},[67,71442,71443,71445,71448,71450,71452,71454,71456,71459],{"class":69,"line":18401},[67,71444,13021],{"class":84},[67,71446,71447],{"class":77}," gender",[67,71449,671],{"class":84},[67,71451,56157],{"class":73},[67,71453,56160],{"class":110},[67,71455,854],{"class":73},[67,71457,71458],{"class":114},"'.gender'",[67,71460,829],{"class":73},[67,71462,71463,71465,71468,71470,71472,71474,71476,71479],{"class":69,"line":18407},[67,71464,13021],{"class":84},[67,71466,71467],{"class":77}," salary",[67,71469,671],{"class":84},[67,71471,56157],{"class":73},[67,71473,56160],{"class":110},[67,71475,854],{"class":73},[67,71477,71478],{"class":114},"'.salary'",[67,71480,829],{"class":73},[67,71482,71483,71485,71488,71490,71492,71494,71496,71499],{"class":69,"line":18430},[67,71484,13021],{"class":84},[67,71486,71487],{"class":77}," city",[67,71489,671],{"class":84},[67,71491,56157],{"class":73},[67,71493,56160],{"class":110},[67,71495,854],{"class":73},[67,71497,71498],{"class":114},"'.city'",[67,71500,829],{"class":73},[67,71502,71503,71505,71508,71510,71512,71514,71516,71519],{"class":69,"line":18436},[67,71504,13021],{"class":84},[67,71506,71507],{"class":77}," tbody",[67,71509,671],{"class":84},[67,71511,56157],{"class":73},[67,71513,56160],{"class":110},[67,71515,854],{"class":73},[67,71517,71518],{"class":114},"'tbody'",[67,71520,829],{"class":73},[67,71522,71523],{"class":69,"line":18459},[67,71524,631],{"emptyLinePlaceholder":630},[67,71526,71527],{"class":69,"line":18473},[67,71528,71529],{"class":2058},"    \u002F\u002F 获取所有带有name属性的元素\n",[67,71531,71532,71534,71537,71539,71541,71543,71545,71548],{"class":69,"line":18493},[67,71533,13021],{"class":84},[67,71535,71536],{"class":77}," items",[67,71538,671],{"class":84},[67,71540,56157],{"class":73},[67,71542,57442],{"class":110},[67,71544,854],{"class":73},[67,71546,71547],{"class":114},"'[name]'",[67,71549,829],{"class":73},[67,71551,71552],{"class":69,"line":18499},[67,71553,71554],{"class":2058},"    \u002F\u002F 声明一个空的数组\n",[67,71556,71557,71559,71561,71563],{"class":69,"line":18510},[67,71558,13021],{"class":84},[67,71560,59456],{"class":77},[67,71562,671],{"class":84},[67,71564,53603],{"class":73},[67,71566,71567],{"class":69,"line":18533},[67,71568,71569],{"class":2058},"    \u002F\u002F 1.录入模块\n",[67,71571,71572],{"class":69,"line":18555},[67,71573,71574],{"class":2058},"    \u002F\u002F 1.1这是一个表单提交事件\n",[67,71576,71577,71579,71582,71584,71586,71588,71590,71593],{"class":69,"line":18560},[67,71578,13021],{"class":84},[67,71580,71581],{"class":77}," info",[67,71583,671],{"class":84},[67,71585,56157],{"class":73},[67,71587,56160],{"class":110},[67,71589,854],{"class":73},[67,71591,71592],{"class":114},"'.info'",[67,71594,829],{"class":73},[67,71596,71597,71600,71602,71604,71607,71609,71611,71613,71615],{"class":69,"line":18566},[67,71598,71599],{"class":73},"    info.",[67,71601,59574],{"class":110},[67,71603,854],{"class":73},[67,71605,71606],{"class":114},"'submit'",[67,71608,1868],{"class":73},[67,71610,56210],{"class":84},[67,71612,3505],{"class":73},[67,71614,2074],{"class":7033},[67,71616,14241],{"class":73},[67,71618,71619],{"class":69,"line":18580},[67,71620,71621],{"class":2058},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[67,71623,71624,71627,71630],{"class":69,"line":18593},[67,71625,71626],{"class":73},"      e.",[67,71628,71629],{"class":110},"preventDefault",[67,71631,3809],{"class":73},[67,71633,71634],{"class":69,"line":18598},[67,71635,61773],{"class":2058},[67,71637,71638],{"class":69,"line":18612},[67,71639,631],{"emptyLinePlaceholder":630},[67,71641,71642],{"class":69,"line":18617},[67,71643,71644],{"class":2058},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[67,71646,71647],{"class":69,"line":18623},[67,71648,71649],{"class":2058},"      \u002F\u002F 先遍历循环\n",[67,71651,71652,71654,71656,71658,71660,71662,71664,71666,71668,71671,71673,71675,71677],{"class":69,"line":18628},[67,71653,54048],{"class":84},[67,71655,3505],{"class":73},[67,71657,53612],{"class":84},[67,71659,11244],{"class":73},[67,71661,85],{"class":84},[67,71663,5913],{"class":77},[67,71665,11251],{"class":73},[67,71667,259],{"class":84},[67,71669,71670],{"class":73}," items.",[67,71672,53733],{"class":77},[67,71674,5036],{"class":73},[67,71676,4125],{"class":84},[67,71678,14241],{"class":73},[67,71680,71681,71683,71686,71688,71691],{"class":69,"line":18642},[67,71682,4329],{"class":84},[67,71684,71685],{"class":73}," (items[i].value ",[67,71687,56247],{"class":84},[67,71689,71690],{"class":114}," ''",[67,71692,14241],{"class":73},[67,71694,71695,71698,71701,71703,71706],{"class":69,"line":18647},[67,71696,71697],{"class":84},"          return",[67,71699,71700],{"class":110}," alert",[67,71702,854],{"class":73},[67,71704,71705],{"class":114},"'输入内容不能为空'",[67,71707,829],{"class":73},[67,71709,71710],{"class":69,"line":18652},[67,71711,4361],{"class":73},[67,71713,71714],{"class":69,"line":18666},[67,71715,54162],{"class":73},[67,71717,71718],{"class":69,"line":18678},[67,71719,631],{"emptyLinePlaceholder":630},[67,71721,71722],{"class":69,"line":18683},[67,71723,71724],{"class":2058},"      \u002F\u002F 创建新的对象\n",[67,71726,71727,71729,71732,71734],{"class":69,"line":18696},[67,71728,59989],{"class":84},[67,71730,71731],{"class":77}," obj",[67,71733,671],{"class":84},[67,71735,17369],{"class":73},[67,71737,71738,71741,71743,71745,71747],{"class":69,"line":18701},[67,71739,71740],{"class":73},"        stuID: arr.",[67,71742,53733],{"class":77},[67,71744,47334],{"class":84},[67,71746,906],{"class":77},[67,71748,33238],{"class":73},[67,71750,71751],{"class":69,"line":18706},[67,71752,71753],{"class":73},"        uname: uname.value,\n",[67,71755,71756],{"class":69,"line":18711},[67,71757,71758],{"class":73},"        age: age.value,\n",[67,71760,71761],{"class":69,"line":18724},[67,71762,71763],{"class":73},"        gender: gender.value,\n",[67,71765,71766],{"class":69,"line":18729},[67,71767,71768],{"class":73},"        salary: salary.value,\n",[67,71770,71771],{"class":69,"line":34402},[67,71772,71773],{"class":73},"        city: city.value\n",[67,71775,71776],{"class":69,"line":34408},[67,71777,54162],{"class":73},[67,71779,71780],{"class":69,"line":34414},[67,71781,71782],{"class":2058},"      \u002F\u002F console.log(obj);\n",[67,71784,71785],{"class":69,"line":34420},[67,71786,71787],{"class":2058},"      \u002F\u002F 追加到数组里面\n",[67,71789,71790,71792,71794],{"class":69,"line":34426},[67,71791,59768],{"class":73},[67,71793,53649],{"class":110},[67,71795,71796],{"class":73},"(obj)\n",[67,71798,71799],{"class":69,"line":34437},[67,71800,71801],{"class":2058},"      \u002F\u002F console.log(arr);\n",[67,71803,71804],{"class":69,"line":34443},[67,71805,71806],{"class":2058},"      \u002F\u002F 清空表单  reset重置表单\n",[67,71808,71809,71812,71814,71817],{"class":69,"line":34463},[67,71810,71811],{"class":77},"      this",[67,71813,2547],{"class":73},[67,71815,71816],{"class":110},"reset",[67,71818,3809],{"class":73},[67,71820,71821],{"class":69,"line":34469},[67,71822,71823],{"class":2058},"      \u002F\u002F 调用渲染函数\n",[67,71825,71826,71829],{"class":69,"line":34480},[67,71827,71828],{"class":110},"      render",[67,71830,3809],{"class":73},[67,71832,71833],{"class":69,"line":34486},[67,71834,35230],{"class":73},[67,71836,71837],{"class":69,"line":34492},[67,71838,71839],{"class":2058},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[67,71841,71842,71845,71848],{"class":69,"line":34498},[67,71843,71844],{"class":84},"    function",[67,71846,71847],{"class":110}," render",[67,71849,12653],{"class":73},[67,71851,71852],{"class":69,"line":34504},[67,71853,71854],{"class":2058},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[67,71856,71857,71860,71862],{"class":69,"line":34510},[67,71858,71859],{"class":73},"      tbody.innerHTML ",[67,71861,85],{"class":84},[67,71863,71864],{"class":114}," ''\n",[67,71866,71867],{"class":69,"line":34516},[67,71868,71869],{"class":2058},"      \u002F\u002F 遍历数组\n",[67,71871,71872,71874,71876,71878,71880,71882,71884,71886,71888,71890,71892,71894,71896],{"class":69,"line":34522},[67,71873,54048],{"class":84},[67,71875,3505],{"class":73},[67,71877,53612],{"class":84},[67,71879,11244],{"class":73},[67,71881,85],{"class":84},[67,71883,5913],{"class":77},[67,71885,11251],{"class":73},[67,71887,259],{"class":84},[67,71889,53730],{"class":73},[67,71891,53733],{"class":77},[67,71893,5036],{"class":73},[67,71895,4125],{"class":84},[67,71897,14241],{"class":73},[67,71899,71900,71902,71905,71907,71909,71912,71914,71917],{"class":69,"line":34542},[67,71901,63031],{"class":84},[67,71903,71904],{"class":77}," tr",[67,71906,671],{"class":84},[67,71908,56157],{"class":73},[67,71910,71911],{"class":110},"createElement",[67,71913,854],{"class":73},[67,71915,71916],{"class":114},"'tr'",[67,71918,829],{"class":73},[67,71920,71921,71924,71926],{"class":69,"line":34548},[67,71922,71923],{"class":73},"        tr.innerHTML ",[67,71925,85],{"class":84},[67,71927,71928],{"class":114}," `\n",[67,71930,71931,71934,71936,71938,71940,71943,71946],{"class":69,"line":34564},[67,71932,71933],{"class":114},"        \u003Ctd>${",[67,71935,5700],{"class":73},[67,71937,2879],{"class":114},[67,71939,2432],{"class":73},[67,71941,71942],{"class":114},"].",[67,71944,71945],{"class":73},"stuID",[67,71947,71948],{"class":114},"}\u003C\u002Ftd>\n",[67,71950,71951,71954,71956,71958,71960,71962,71965],{"class":69,"line":34570},[67,71952,71953],{"class":114},"          \u003Ctd>${",[67,71955,5700],{"class":73},[67,71957,2879],{"class":114},[67,71959,2432],{"class":73},[67,71961,71942],{"class":114},[67,71963,71964],{"class":73},"uname",[67,71966,71948],{"class":114},[67,71968,71969,71971,71973,71975,71977,71979,71982],{"class":69,"line":34584},[67,71970,71953],{"class":114},[67,71972,5700],{"class":73},[67,71974,2879],{"class":114},[67,71976,2432],{"class":73},[67,71978,71942],{"class":114},[67,71980,71981],{"class":73},"age",[67,71983,71948],{"class":114},[67,71985,71986,71988,71990,71992,71994,71996,71999],{"class":69,"line":34590},[67,71987,71953],{"class":114},[67,71989,5700],{"class":73},[67,71991,2879],{"class":114},[67,71993,2432],{"class":73},[67,71995,71942],{"class":114},[67,71997,71998],{"class":73},"gender",[67,72000,71948],{"class":114},[67,72002,72003,72005,72007,72009,72011,72013,72016],{"class":69,"line":34605},[67,72004,71953],{"class":114},[67,72006,5700],{"class":73},[67,72008,2879],{"class":114},[67,72010,2432],{"class":73},[67,72012,71942],{"class":114},[67,72014,72015],{"class":73},"salary",[67,72017,71948],{"class":114},[67,72019,72020,72022,72024,72026,72028,72030,72033],{"class":69,"line":34611},[67,72021,71953],{"class":114},[67,72023,5700],{"class":73},[67,72025,2879],{"class":114},[67,72027,2432],{"class":73},[67,72029,71942],{"class":114},[67,72031,72032],{"class":73},"city",[67,72034,71948],{"class":114},[67,72036,72037],{"class":69,"line":34620},[67,72038,71353],{"class":114},[67,72040,72041,72044,72046],{"class":69,"line":34626},[67,72042,72043],{"class":114},"            \u003Ca href=\"javascript:\" data-id=${",[67,72045,2432],{"class":73},[67,72047,72048],{"class":114},"}>删除\u003C\u002Fa>\n",[67,72050,72051],{"class":69,"line":34635},[67,72052,72053],{"class":114},"          \u003C\u002Ftd> \n",[67,72055,72056],{"class":69,"line":34641},[67,72057,72058],{"class":114},"          `\n",[67,72060,72061],{"class":69,"line":34647},[67,72062,72063],{"class":2058},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[67,72065,72066,72069,72072],{"class":69,"line":34656},[67,72067,72068],{"class":73},"        tbody.",[67,72070,72071],{"class":110},"appendChild",[67,72073,72074],{"class":73},"(tr)\n",[67,72076,72077],{"class":69,"line":34662},[67,72078,54162],{"class":73},[67,72080,72081],{"class":69,"line":34673},[67,72082,4020],{"class":73},[67,72084,72085],{"class":69,"line":34679},[67,72086,631],{"emptyLinePlaceholder":630},[67,72088,72089],{"class":69,"line":34698},[67,72090,72091],{"class":2058},"    \u002F\u002F 3.删除委托\n",[67,72093,72094],{"class":69,"line":34704},[67,72095,72096],{"class":2058},"    \u002F\u002F 3.1 事件委托 tbody\n",[67,72098,72099,72102,72104,72106,72108,72110,72112,72114,72116],{"class":69,"line":34715},[67,72100,72101],{"class":73},"    tbody.",[67,72103,59574],{"class":110},[67,72105,854],{"class":73},[67,72107,59579],{"class":114},[67,72109,1868],{"class":73},[67,72111,56210],{"class":84},[67,72113,3505],{"class":73},[67,72115,2074],{"class":7033},[67,72117,14241],{"class":73},[67,72119,72120,72122,72124,72126,72128],{"class":69,"line":34721},[67,72121,56241],{"class":84},[67,72123,68794],{"class":73},[67,72125,56247],{"class":84},[67,72127,70016],{"class":114},[67,72129,14241],{"class":73},[67,72131,72132],{"class":69,"line":34741},[67,72133,72134],{"class":2058},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[67,72136,72137],{"class":69,"line":34757},[67,72138,72139],{"class":2058},"        \u002F\u002F console.log(e.target.dataset.id);\n",[67,72141,72142],{"class":69,"line":34763},[67,72143,72144],{"class":2058},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[67,72146,72147,72150,72152,72155,72157],{"class":69,"line":34777},[67,72148,72149],{"class":73},"        arr.",[67,72151,59771],{"class":110},[67,72153,72154],{"class":73},"(e.target.dataset.id, ",[67,72156,2209],{"class":77},[67,72158,829],{"class":73},[67,72160,72161],{"class":69,"line":34783},[67,72162,72163],{"class":2058},"        \u002F\u002F 重新渲染一次\n",[67,72165,72166,72169],{"class":69,"line":34789},[67,72167,72168],{"class":110},"        render",[67,72170,3809],{"class":73},[67,72172,72173],{"class":69,"line":34800},[67,72174,54162],{"class":73},[67,72176,72177],{"class":69,"line":34806},[67,72178,35230],{"class":73},[67,72180,72181,72183,72185],{"class":69,"line":34812},[67,72182,54181],{"class":73},[67,72184,53578],{"class":262},[67,72186,323],{"class":73},[67,72188,72189],{"class":69,"line":34822},[67,72190,631],{"emptyLinePlaceholder":630},[67,72192,72193,72195,72197],{"class":69,"line":34828},[67,72194,376],{"class":73},[67,72196,53565],{"class":262},[67,72198,323],{"class":73},[67,72200,72201],{"class":69,"line":34839},[67,72202,631],{"emptyLinePlaceholder":630},[67,72204,72205,72207,72209],{"class":69,"line":34845},[67,72206,376],{"class":73},[67,72208,52403],{"class":262},[67,72210,323],{"class":73},[19,72212,72213],{},"样式：",[58,72215,72219],{"className":72216,"code":72217,"language":72218,"meta":63,"style":63},"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",[32,72220,72221,72226,72236,72245,72249,72253,72258,72268,72273,72277,72282,72292,72297,72306,72310,72314,72319,72324,72334,72344,72349,72353,72358,72367,72377,72382,72392,72402,72406,72411,72419,72423,72428,72433,72438,72446,72455,72459,72464,72473,72477,72482,72491,72495,72500,72509,72518,72526,72530,72535,72544,72554,72563,72573,72579,72588,72598,72608,72612,72617,72626,72634,72644,72652,72661,72670,72680,72688,72692,72697,72706],{"__ignoreMap":63},[67,72222,72223],{"class":69,"line":70},[67,72224,72225],{"class":73},"* {\n",[67,72227,72228,72231,72233],{"class":69,"line":191},[67,72229,72230],{"class":262},"  margin",[67,72232,53203],{"class":73},[67,72234,72235],{"class":114},"0;\n",[67,72237,72238,72241,72243],{"class":69,"line":202},[67,72239,72240],{"class":114},"  padding",[67,72242,53203],{"class":73},[67,72244,72235],{"class":114},[67,72246,72247],{"class":69,"line":641},[67,72248,3419],{"class":73},[67,72250,72251],{"class":69,"line":655},[67,72252,631],{"emptyLinePlaceholder":630},[67,72254,72255],{"class":69,"line":660},[67,72256,72257],{"class":114},"a {\n",[67,72259,72260,72263,72265],{"class":69,"line":665},[67,72261,72262],{"class":262},"  text-decoration",[67,72264,53203],{"class":73},[67,72266,72267],{"class":114},"none;\n",[67,72269,72270],{"class":69,"line":677},[67,72271,72272],{"class":114},"  color:#721c24;\n",[67,72274,72275],{"class":69,"line":683},[67,72276,3419],{"class":73},[67,72278,72279],{"class":69,"line":689},[67,72280,72281],{"class":114},"h1 {\n",[67,72283,72284,72287,72289],{"class":69,"line":694},[67,72285,72286],{"class":262},"  text-align",[67,72288,53203],{"class":73},[67,72290,72291],{"class":114},"center;\n",[67,72293,72294],{"class":69,"line":700},[67,72295,72296],{"class":114},"  color:#333;\n",[67,72298,72299,72301,72303],{"class":69,"line":706},[67,72300,72230],{"class":262},[67,72302,53203],{"class":73},[67,72304,72305],{"class":114},"20px 0;\n",[67,72307,72308],{"class":69,"line":712},[67,72309,4499],{"class":73},[67,72311,72312],{"class":69,"line":717},[67,72313,3419],{"class":73},[67,72315,72316],{"class":69,"line":723},[67,72317,72318],{"class":114},"table {\n",[67,72320,72321],{"class":69,"line":729},[67,72322,72323],{"class":114},"  margin:0 auto;\n",[67,72325,72326,72329,72331],{"class":69,"line":735},[67,72327,72328],{"class":262},"  width",[67,72330,53203],{"class":73},[67,72332,72333],{"class":114},"800px;\n",[67,72335,72336,72339,72341],{"class":69,"line":741},[67,72337,72338],{"class":262},"  border-collapse",[67,72340,53203],{"class":73},[67,72342,72343],{"class":114},"collapse;\n",[67,72345,72346],{"class":69,"line":747},[67,72347,72348],{"class":114},"  color:#004085;\n",[67,72350,72351],{"class":69,"line":753},[67,72352,3419],{"class":73},[67,72354,72355],{"class":69,"line":758},[67,72356,72357],{"class":114},"th {\n",[67,72359,72360,72362,72364],{"class":69,"line":764},[67,72361,72240],{"class":262},[67,72363,53203],{"class":73},[67,72365,72366],{"class":114},"10px;\n",[67,72368,72369,72372,72374],{"class":69,"line":770},[67,72370,72371],{"class":262},"  background",[67,72373,53203],{"class":73},[67,72375,72376],{"class":2058},"#cfe5ff;\n",[67,72378,72379],{"class":69,"line":776},[67,72380,72381],{"class":73},"  \n",[67,72383,72384,72387,72389],{"class":69,"line":782},[67,72385,72386],{"class":262},"  font-size",[67,72388,53203],{"class":73},[67,72390,72391],{"class":114},"20px;\n",[67,72393,72394,72397,72399],{"class":69,"line":788},[67,72395,72396],{"class":262},"  font-weight",[67,72398,53203],{"class":73},[67,72400,72401],{"class":114},"400;\n",[67,72403,72404],{"class":69,"line":793},[67,72405,3419],{"class":73},[67,72407,72408],{"class":69,"line":798},[67,72409,72410],{"class":114},"td,th {\n",[67,72412,72413,72416],{"class":69,"line":816},[67,72414,72415],{"class":114},"  border:1px solid",[67,72417,72418],{"class":2058}," #b8daff;\n",[67,72420,72421],{"class":69,"line":832},[67,72422,3419],{"class":73},[67,72424,72425],{"class":69,"line":843},[67,72426,72427],{"class":114},"td {\n",[67,72429,72430],{"class":69,"line":848},[67,72431,72432],{"class":114},"  padding:10px;\n",[67,72434,72435],{"class":69,"line":863},[67,72436,72437],{"class":114},"  color:#666;\n",[67,72439,72440,72442,72444],{"class":69,"line":876},[67,72441,72286],{"class":262},[67,72443,53203],{"class":73},[67,72445,72291],{"class":114},[67,72447,72448,72450,72452],{"class":69,"line":889},[67,72449,72386],{"class":262},[67,72451,53203],{"class":73},[67,72453,72454],{"class":114},"16px;\n",[67,72456,72457],{"class":69,"line":894},[67,72458,3419],{"class":73},[67,72460,72461],{"class":69,"line":911},[67,72462,72463],{"class":114},"tbody tr {\n",[67,72465,72466,72468,72470],{"class":69,"line":927},[67,72467,72371],{"class":262},[67,72469,53203],{"class":73},[67,72471,72472],{"class":2058},"#fff;\n",[67,72474,72475],{"class":69,"line":932},[67,72476,3419],{"class":73},[67,72478,72479],{"class":69,"line":955},[67,72480,72481],{"class":114},"tbody tr:hover {\n",[67,72483,72484,72486,72488],{"class":69,"line":971},[67,72485,72371],{"class":262},[67,72487,53203],{"class":73},[67,72489,72490],{"class":2058},"#e1ecf8;\n",[67,72492,72493],{"class":69,"line":1010},[67,72494,3419],{"class":73},[67,72496,72497],{"class":69,"line":1016},[67,72498,72499],{"class":114},".info {\n",[67,72501,72502,72504,72506],{"class":69,"line":1021},[67,72503,72328],{"class":262},[67,72505,53203],{"class":73},[67,72507,72508],{"class":114},"900px;\n",[67,72510,72511,72513,72515],{"class":69,"line":1034},[67,72512,72230],{"class":262},[67,72514,53203],{"class":73},[67,72516,72517],{"class":114},"50px auto;\n",[67,72519,72520,72522,72524],{"class":69,"line":1053},[67,72521,72286],{"class":262},[67,72523,53203],{"class":73},[67,72525,72291],{"class":114},[67,72527,72528],{"class":69,"line":1070},[67,72529,3419],{"class":73},[67,72531,72532],{"class":69,"line":1083},[67,72533,72534],{"class":114},".info  input, .info select {\n",[67,72536,72537,72539,72541],{"class":69,"line":1088},[67,72538,72328],{"class":262},[67,72540,53203],{"class":73},[67,72542,72543],{"class":114},"80px;\n",[67,72545,72546,72549,72551],{"class":69,"line":1093},[67,72547,72548],{"class":262},"  height",[67,72550,53203],{"class":73},[67,72552,72553],{"class":114},"27px;\n",[67,72555,72556,72559,72561],{"class":69,"line":1110},[67,72557,72558],{"class":262},"  outline",[67,72560,53203],{"class":73},[67,72562,72267],{"class":114},[67,72564,72565,72568,72570],{"class":69,"line":11603},[67,72566,72567],{"class":262},"  border-radius",[67,72569,53203],{"class":73},[67,72571,72572],{"class":114},"5px;\n",[67,72574,72575,72577],{"class":69,"line":11612},[67,72576,72415],{"class":114},[67,72578,72418],{"class":2058},[67,72580,72581,72584,72586],{"class":69,"line":11617},[67,72582,72583],{"class":262},"  padding-left",[67,72585,53203],{"class":73},[67,72587,72572],{"class":114},[67,72589,72590,72593,72595],{"class":69,"line":11623},[67,72591,72592],{"class":262},"  box-sizing",[67,72594,53203],{"class":73},[67,72596,72597],{"class":114},"border-box;\n",[67,72599,72600,72603,72605],{"class":69,"line":11644},[67,72601,72602],{"class":262},"  margin-right",[67,72604,53203],{"class":73},[67,72606,72607],{"class":114},"15px;\n",[67,72609,72610],{"class":69,"line":11650},[67,72611,3419],{"class":73},[67,72613,72614],{"class":69,"line":11664},[67,72615,72616],{"class":114},".info button {\n",[67,72618,72619,72621,72623],{"class":69,"line":11670},[67,72620,72328],{"class":262},[67,72622,53203],{"class":73},[67,72624,72625],{"class":114},"60px;\n",[67,72627,72628,72630,72632],{"class":69,"line":11697},[67,72629,72548],{"class":262},[67,72631,53203],{"class":73},[67,72633,72553],{"class":114},[67,72635,72636,72639,72641],{"class":69,"line":11706},[67,72637,72638],{"class":262},"  background-color",[67,72640,53203],{"class":73},[67,72642,72643],{"class":2058},"#004085;\n",[67,72645,72646,72648,72650],{"class":69,"line":11712},[67,72647,72558],{"class":262},[67,72649,53203],{"class":73},[67,72651,72267],{"class":114},[67,72653,72654,72657,72659],{"class":69,"line":11720},[67,72655,72656],{"class":262},"  border",[67,72658,53203],{"class":73},[67,72660,72235],{"class":114},[67,72662,72663,72666,72668],{"class":69,"line":11725},[67,72664,72665],{"class":262},"  color",[67,72667,53203],{"class":73},[67,72669,72472],{"class":2058},[67,72671,72672,72675,72677],{"class":69,"line":18401},[67,72673,72674],{"class":262},"  cursor",[67,72676,53203],{"class":73},[67,72678,72679],{"class":114},"pointer;\n",[67,72681,72682,72684,72686],{"class":69,"line":18407},[67,72683,72567],{"class":262},[67,72685,53203],{"class":73},[67,72687,72572],{"class":114},[67,72689,72690],{"class":69,"line":18430},[67,72691,3419],{"class":73},[67,72693,72694],{"class":69,"line":18436},[67,72695,72696],{"class":114},".info .age {\n",[67,72698,72699,72701,72703],{"class":69,"line":18459},[67,72700,72328],{"class":262},[67,72702,53203],{"class":73},[67,72704,72705],{"class":114},"50px;\n",[67,72707,72708],{"class":69,"line":18473},[67,72709,3419],{"class":73},[19,72711,72712],{},"思路：",[19,72714,72715],{},[3317,72716],{"alt":63,"src":72717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72719,72720],{},[3317,72721],{"alt":63,"src":72722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72724,72725],{},[3317,72726],{"alt":63,"src":72727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[391,72729,72731],{"id":72730},"_3315-重绘回流","3.3.15 重绘回流",[19,72733,72734],{},[3317,72735],{"alt":63,"src":72736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72738,72739],{},[3317,72740],{"alt":63,"src":72741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72743,72744],{},[3317,72745],{"alt":63,"src":72746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72748,72750],{"id":72749},"_34-bom","3.4 BOM",[19,72752,72753],{},[3317,72754],{"alt":63,"src":72755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72757,72758],{},"平时写的document省略了window而已，实际上是window.document",[19,72760,72761],{},"函数也是这样，调用的时候实际为window.fn()",[19,72763,72764],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72766,72767],{},"window大部分情况下可以省略",[391,72769,72771],{"id":72770},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72773,72774],{},"只执行一次",[19,72776,72777],{},[3317,72778],{"alt":63,"src":72779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72781,72782],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72784,72785],{},[3317,72786],{"alt":63,"src":72787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[391,72789,72791],{"id":72790},"_342-js执行机制","3.4.2 JS执行机制",[19,72793,72794],{},[3317,72795],{"alt":63,"src":72796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72798,72799],{},"两个的结果都是1111 3333 2222",[19,72801,72802],{},[3317,72803],{"alt":63,"src":72804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72806,72807],{},[3317,72808],{"alt":63,"src":72809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72811,72812],{},[3317,72813],{"alt":63,"src":72814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72816,72817],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72819,72820],{},"工作流程：",[19,72822,72823],{},[3317,72824],{"alt":63,"src":72825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72827,72828],{},[3317,72829],{"alt":63,"src":72830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72832,72833],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72835,72836],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[391,72838,72840],{"id":72839},"_343-location对象","3.4.3 location对象",[19,72842,72843],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72845,72846],{},[3317,72847],{"alt":63,"src":72848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72850,72851],{},"href可以跳转页面",[26,72853,72854],{},[29,72855,72856],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72858,72859],{},"search得到提交信息之后网站后边的地址",[19,72861,72862],{},[3317,72863],{"alt":63,"src":72864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72866,72867],{},[3317,72868],{"alt":63,"src":72869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[26,72871,72872],{"start":191},[29,72873,72874],{},"hash:这个获取单页面应用#后边的地址",[19,72876,72877],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72879,72880],{},[3317,72881],{"alt":63,"src":72882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[58,72884,72886],{"className":250,"code":72885,"language":252,"meta":63,"style":63},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[32,72887,72888,72908,72928],{"__ignoreMap":63},[67,72889,72890,72892,72894,72896,72898,72901,72904,72906],{"class":69,"line":70},[67,72891,328],{"class":73},[67,72893,2230],{"class":262},[67,72895,62818],{"class":110},[67,72897,85],{"class":73},[67,72899,72900],{"class":114},"\"#\u002Fmy\"",[67,72902,72903],{"class":73},">我的\u003C\u002F",[67,72905,2230],{"class":262},[67,72907,323],{"class":73},[67,72909,72910,72912,72914,72916,72918,72921,72924,72926],{"class":69,"line":191},[67,72911,328],{"class":73},[67,72913,2230],{"class":262},[67,72915,62818],{"class":110},[67,72917,85],{"class":73},[67,72919,72920],{"class":114},"\"#\u002Ffriend\"",[67,72922,72923],{"class":73},">关注\u003C\u002F",[67,72925,2230],{"class":262},[67,72927,323],{"class":73},[67,72929,72930,72932,72934,72936,72938,72941,72944,72946],{"class":69,"line":202},[67,72931,328],{"class":73},[67,72933,2230],{"class":262},[67,72935,62818],{"class":110},[67,72937,85],{"class":73},[67,72939,72940],{"class":114},"\"#\u002Fdownload\"",[67,72942,72943],{"class":73},">下载\u003C\u002F",[67,72945,2230],{"class":262},[67,72947,323],{"class":73},[19,72949,72950],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[26,72952,72953],{"start":202},[29,72954,72955,72956,72958,72959,72961],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55478,72957],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55478,72960],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[391,72963,72965],{"id":72964},"_345-navigator对象","3.4.5 navigator对象",[19,72967,72968],{},[3317,72969],{"alt":63,"src":72970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[58,72972,72976],{"className":72973,"code":72974,"language":72975,"meta":63,"style":63},"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",[32,72977,72978,72983,72994,73006,73011,73062,73103,73108,73121,73133,73138],{"__ignoreMap":63},[67,72979,72980],{"class":69,"line":70},[67,72981,72982],{"class":2058},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[67,72984,72985,72987,72989,72991],{"class":69,"line":191},[67,72986,2218],{"class":84},[67,72988,854],{"class":73},[67,72990,56210],{"class":84},[67,72992,72993],{"class":73}," () { \n",[67,72995,72996,72998,73001,73003],{"class":69,"line":202},[67,72997,8608],{"class":84},[67,72999,73000],{"class":77}," userAgent",[67,73002,671],{"class":84},[67,73004,73005],{"class":73}," navigator.userAgent \n",[67,73007,73008],{"class":69,"line":641},[67,73009,73010],{"class":2058},"\u002F\u002F 验证是否为Android或iPhone \n",[67,73012,73013,73015,73018,73020,73023,73026,73028,73030,73033,73035,73038,73042,73044,73046,73048,73051,73053,73055,73057,73059],{"class":69,"line":655},[67,73014,8608],{"class":84},[67,73016,73017],{"class":77}," android",[67,73019,671],{"class":84},[67,73021,73022],{"class":73}," userAgent.",[67,73024,73025],{"class":110},"match",[67,73027,854],{"class":73},[67,73029,2573],{"class":114},[67,73031,73032],{"class":49745},"(Android);",[67,73034,2974],{"class":84},[67,73036,73037],{"class":77},"[\\s",[67,73039,73041],{"class":73040},"snhLl","\\\u002F",[67,73043,2928],{"class":77},[67,73045,2471],{"class":84},[67,73047,854],{"class":49745},[67,73049,73050],{"class":77},"[\\d.]",[67,73052,2471],{"class":84},[67,73054,2420],{"class":49745},[67,73056,2974],{"class":84},[67,73058,2573],{"class":114},[67,73060,73061],{"class":73},") \n",[67,73063,73064,73066,73069,73071,73073,73075,73077,73079,73082,73085,73088,73090,73092,73095,73097,73099,73101],{"class":69,"line":660},[67,73065,8608],{"class":84},[67,73067,73068],{"class":77}," iphone",[67,73070,671],{"class":84},[67,73072,73022],{"class":73},[67,73074,73025],{"class":110},[67,73076,854],{"class":73},[67,73078,2573],{"class":114},[67,73080,73081],{"class":49745},"(iPhone",[67,73083,73084],{"class":77},"\\s",[67,73086,73087],{"class":49745},"OS)",[67,73089,73084],{"class":77},[67,73091,854],{"class":49745},[67,73093,73094],{"class":77},"[\\d_]",[67,73096,2471],{"class":84},[67,73098,2420],{"class":49745},[67,73100,2573],{"class":114},[67,73102,73061],{"class":73},[67,73104,73105],{"class":69,"line":665},[67,73106,73107],{"class":2058},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[67,73109,73110,73112,73115,73118],{"class":69,"line":677},[67,73111,1096],{"class":84},[67,73113,73114],{"class":73}," (android ",[67,73116,73117],{"class":84},"||",[67,73119,73120],{"class":73}," iphone) { \n",[67,73122,73123,73126,73128,73131],{"class":69,"line":683},[67,73124,73125],{"class":73},"location.href ",[67,73127,85],{"class":84},[67,73129,73130],{"class":114}," 'http:\u002F\u002Fm.itcast.cn'",[67,73132,4499],{"class":73},[67,73134,73135],{"class":69,"line":689},[67,73136,73137],{"class":73},"} \n",[67,73139,73140],{"class":69,"line":694},[67,73141,73142],{"class":73},"})()\n",[391,73144,73146],{"id":73145},"_346-histroy对象","3.4.6 histroy对象",[19,73148,73149],{},[3317,73150],{"alt":63,"src":73151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73153,73154],{},"浏览器地址的前进与后退!!!",[19,73156,73157],{},"history.back() 等效于 history.go(-1)",[19,73159,73160],{},"history.forward() 等效于 history.go(1)",[14,73162,73164],{"id":73163},"_35-本地存储","3.5 本地存储",[26,73166,73167,73170,73173],{},[29,73168,73169],{},"数据存储在用户浏览器中",[29,73171,73172],{},"设置、读取方便、甚至页面刷新不丢失数据",[29,73174,73175],{},"容量较大，sessionStorage和localStorage约 5M 左右",[391,73177,73179],{"id":73178},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73181,73182],{},"只能存储字符串",[19,73184,73185],{},[3317,73186],{"alt":63,"src":73187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73189,73190],{},[3317,73191],{"alt":63,"src":73192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73194,73195],{},"键值对要加引号,不然就会当变量来看了",[19,73197,73198],{},"localStorage.setItem('uname', 'pink')",[19,73200,73201],{},"刷新之后信息不再丢失",[19,73203,73204],{},"操作key,value会跟着变",[19,73206,73207],{},"删除只删除键就可以,即名字",[19,73209,73198],{},[19,73211,73212],{},"改:",[19,73214,73215],{},"localStorage.setItem('uname','red')",[19,73217,73218],{},"有这个键就是改,没有这个键就是改",[19,73220,73221],{},[3317,73222],{"alt":63,"src":73223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73225,73226],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73228,73229],{},[3317,73230],{"alt":63,"src":73231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73233,73234],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[391,73236,73238],{"id":73237},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73240,73241],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73243,73244],{},"特性:",[26,73246,73247,73250,73253,73256],{},[29,73248,73249],{},"生命周期为关闭浏览器窗口",[29,73251,73252],{},"在同一个窗口(页面)下数据可以共享",[29,73254,73255],{},"以键值对的形式存储使用",[29,73257,73258],{},"用法跟localStorage 基本相同",[391,73260,73262],{"id":73261},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73264,73265],{},"本地只能存储字符串,无法直接存储复杂数据类型",[58,73267,73269],{"className":250,"code":73268,"language":252,"meta":63,"style":63},"\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",[32,73270,73271,73279,73284,73289,73294,73299,73303,73308,73313],{"__ignoreMap":63},[67,73272,73273,73275,73277],{"class":69,"line":70},[67,73274,259],{"class":73},[67,73276,53578],{"class":262},[67,73278,323],{"class":73},[67,73280,73281],{"class":69,"line":191},[67,73282,73283],{"class":73},"    const obj = {\n",[67,73285,73286],{"class":69,"line":202},[67,73287,73288],{"class":73},"      uname: 'pink老师',\n",[67,73290,73291],{"class":69,"line":641},[67,73292,73293],{"class":73},"      age: 18,\n",[67,73295,73296],{"class":69,"line":655},[67,73297,73298],{"class":73},"      gender: '女'\n",[67,73300,73301],{"class":69,"line":660},[67,73302,4020],{"class":73},[67,73304,73305],{"class":69,"line":665},[67,73306,73307],{"class":73},"    \u002F\u002F 存储复杂数据类型\n",[67,73309,73310],{"class":69,"line":677},[67,73311,73312],{"class":73},"    localStorage.setItem('obj', obj)\n",[67,73314,73315,73317,73319],{"class":69,"line":683},[67,73316,54181],{"class":73},[67,73318,53578],{"class":262},[67,73320,323],{"class":73},[19,73322,73323],{},[3317,73324],{"alt":63,"src":73325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73327,73328],{},"如果获取一下数据:",[19,73330,73331],{},"log(localStorage.getItem('obj'))",[19,73333,73334],{},[3317,73335],{"alt":63,"src":73336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73338,73339],{},"发现直接存对象是使用不了的!!!",[23794,73341,73343],{"id":73342},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73345,73346],{},[3317,73347],{"alt":63,"src":73348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[58,73350,73352],{"className":52401,"code":73351,"language":52403,"meta":63,"style":63},"\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",[32,73353,73354,73362,73372,73382,73391,73399,73403,73407,73433,73452,73460,73464,73469,73474],{"__ignoreMap":63},[67,73355,73356,73358,73360],{"class":69,"line":70},[67,73357,259],{"class":73},[67,73359,53578],{"class":262},[67,73361,323],{"class":73},[67,73363,73364,73366,73368,73370],{"class":69,"line":191},[67,73365,13021],{"class":84},[67,73367,71731],{"class":77},[67,73369,671],{"class":84},[67,73371,17369],{"class":73},[67,73373,73374,73377,73380],{"class":69,"line":202},[67,73375,73376],{"class":73},"      uname: ",[67,73378,73379],{"class":114},"'pink老师'",[67,73381,33238],{"class":73},[67,73383,73384,73387,73389],{"class":69,"line":641},[67,73385,73386],{"class":73},"      age: ",[67,73388,2639],{"class":77},[67,73390,33238],{"class":73},[67,73392,73393,73396],{"class":69,"line":655},[67,73394,73395],{"class":73},"      gender: ",[67,73397,73398],{"class":114},"'女'\n",[67,73400,73401],{"class":69,"line":660},[67,73402,4020],{"class":73},[67,73404,73405],{"class":69,"line":665},[67,73406,73307],{"class":2058},[67,73408,73409,73412,73415,73417,73420,73422,73425,73427,73430],{"class":69,"line":677},[67,73410,73411],{"class":73},"  localStorage.",[67,73413,73414],{"class":110},"setItem",[67,73416,854],{"class":73},[67,73418,73419],{"class":114},"'obj'",[67,73421,1868],{"class":73},[67,73423,73424],{"class":77},"JSON",[67,73426,2547],{"class":73},[67,73428,73429],{"class":110},"stringify",[67,73431,73432],{"class":73},"(obj))\n",[67,73434,73435,73438,73440,73443,73446,73448,73450],{"class":69,"line":683},[67,73436,73437],{"class":73},"  console.",[67,73439,60008],{"class":110},[67,73441,73442],{"class":73},"(localStorage.",[67,73444,73445],{"class":110},"getItem",[67,73447,854],{"class":73},[67,73449,73419],{"class":114},[67,73451,1050],{"class":73},[67,73453,73454,73456,73458],{"class":69,"line":689},[67,73455,54181],{"class":73},[67,73457,53578],{"class":262},[67,73459,323],{"class":73},[67,73461,73462],{"class":69,"line":694},[67,73463,72381],{"class":73},[67,73465,73466],{"class":69,"line":700},[67,73467,73468],{"class":73},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[67,73470,73471],{"class":69,"line":706},[67,73472,73473],{"class":73},"  类型是字符串的\n",[67,73475,73476],{"class":69,"line":712},[67,73477,73478],{"class":73},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23794,73480,73482],{"id":73481},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73484,73485],{},[3317,73486],{"alt":63,"src":73487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73489,73490],{},[3317,73491],{"alt":63,"src":73492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[58,73494,73496],{"className":250,"code":73495,"language":252,"meta":63,"style":63},"  \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",[32,73497,73498,73506,73510,73514,73518,73522,73526,73531,73536,73541,73546,73551,73556,73561,73566],{"__ignoreMap":63},[67,73499,73500,73502,73504],{"class":69,"line":70},[67,73501,328],{"class":73},[67,73503,53578],{"class":262},[67,73505,323],{"class":73},[67,73507,73508],{"class":69,"line":191},[67,73509,73283],{"class":73},[67,73511,73512],{"class":69,"line":202},[67,73513,73288],{"class":73},[67,73515,73516],{"class":69,"line":641},[67,73517,73293],{"class":73},[67,73519,73520],{"class":69,"line":655},[67,73521,73298],{"class":73},[67,73523,73524],{"class":69,"line":660},[67,73525,4020],{"class":73},[67,73527,73528],{"class":69,"line":665},[67,73529,73530],{"class":73},"    \u002F\u002F 1.存储复杂数据类型\n",[67,73532,73533],{"class":69,"line":677},[67,73534,73535],{"class":73},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[67,73537,73538],{"class":69,"line":683},[67,73539,73540],{"class":73},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[67,73542,73543],{"class":69,"line":689},[67,73544,73545],{"class":73},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[67,73547,73548],{"class":69,"line":694},[67,73549,73550],{"class":73},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[67,73552,73553],{"class":69,"line":700},[67,73554,73555],{"class":73},"    \u002F\u002F 取\n",[67,73557,73558],{"class":69,"line":706},[67,73559,73560],{"class":73},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[67,73562,73563],{"class":69,"line":712},[67,73564,73565],{"class":73},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[67,73567,73568,73570,73572],{"class":69,"line":717},[67,73569,54181],{"class":73},[67,73571,53578],{"class":262},[67,73573,323],{"class":73},[19,73575,73576],{},[3317,73577],{"alt":63,"src":73578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[391,73580,73582],{"id":73581},"_356-数组map方法","3.5.6 数组map方法",[19,73584,73585],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73587,73588],{},[3317,73589],{"alt":63,"src":73590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73592,73593],{},[3317,73594],{"alt":63,"src":73595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73597,73598,73601],{},[2144,73599,73600],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73603,73604],{},"map有返回值，但是forEach没有返回值",[19,73606,73607],{},"map是个方法。用的时候要加 ()",[19,73609,73610],{},"map返回的是一个数组",[391,73612,73614],{"id":73613},"_357-数组中join方法","3.5.7 数组中join方法",[19,73616,73617],{},[3317,73618],{"alt":63,"src":73619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73621,73622],{},"类似于python中拼接字符串一样！",[26,73624,73625,73628,73631],{},[29,73626,73627],{},"小括号为空则逗号分开",[29,73629,73630],{},"小括号为空字符串 ''，则元素之间没有分隔符",[29,73632,73633],{},"小括号用啥符号就用进行分割",[391,73635,73637],{"id":73636},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[26,73639,73640,73643,73646,73649,73652],{},[29,73641,73642],{},"记住本地时间获取快速方式：new Date().toDateString()",[29,73644,73645],{},"尽量减少DOM操作，用好map+join的渲染方式",[29,73647,73648],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[29,73650,73651],{},"return可以实现函数的结束",[29,73653,73654],{},"禁止跳转是 preventDefault() 不要忘记",[58,73656,73658],{"className":52401,"code":73657,"language":52403,"meta":63,"style":63},"\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",[32,73659,73660,73670,73684,73688,73696,73710,73730,73742,73750,73756,73766,73776,73780,73784,73790,73800,73812,73816,73820,73827,73839,73853,73863,73867,73871,73878,73885,73892,73904,73916,73926,73938,73942,73946,73953,73960,73972,73984,73994,74006,74036,74040,74044,74051,74063,74075,74099,74109,74119,74123,74127,74135,74146,74158,74170,74182,74199,74211,74223,74227,74231,74238,74250,74262,74274,74285,74303,74316,74328,74352,74363,74367,74371,74379,74389,74393,74397,74403,74415,74426,74436,74440,74444,74450,74472,74476,74480,74486,74492,74504,74514,74526,74556,74569,74586,74590,74594,74605,74627,74637,74641,74645,74658,74668,74680,74692,74704,74716,74726,74736,74746,74757,74770,74774,74782,74790,74794,74802,74815,74835,74868,74901,74934,74960,74978,74996,75004,75030,75048,75066,75084,75102,75120,75128,75136,75154,75162,75191,75199,75207,75215,75228,75240,75252,75264,75276,75288,75301,75313,75321,75329,75337,75342,75347,75351,75355,75359,75363,75367,75371,75376,75381,75386,75391,75399,75407,75415,75420,75425,75430,75435,75440,75445,75450,75455,75460,75465,75470,75475,75480,75485,75489,75494,75499,75509,75518,75522,75527,75536,75552,75594,75634,75673,75738,75746,75750,75755,75773,75781,75786,75791,75821,75827,75832,75845,75857,75869,75881,75893,75905,75917,75921,75931,75935,75940,75945,75949,75958,75962,75967,75972,75991,75996,76016,76020,76025,76029,76034,76052,76070,76088,76107,76126,76145,76150,76156,76177,76183,76192,76198,76204,76210,76237,76250,76255,76265,76271,76277,76283,76289,76294,76300,76306,76312,76318,76351,76356,76361,76366,76371,76377,76383,76389,76400,76405,76411,76418,76432,76438,76462,76467,76472,76478,76484,76505,76511,76524,76530,76536,76542,76548,76553,76559,76565,76571,76589,76603,76609,76617,76623,76645,76650,76655,76660,76665,76670,76679,76688,76693],{"__ignoreMap":63},[67,73661,73662,73664,73666,73668],{"class":69,"line":70},[67,73663,53065],{"class":73},[67,73665,53068],{"class":262},[67,73667,53071],{"class":110},[67,73669,323],{"class":73},[67,73671,73672,73674,73676,73678,73680,73682],{"class":69,"line":191},[67,73673,259],{"class":73},[67,73675,52403],{"class":262},[67,73677,53082],{"class":110},[67,73679,85],{"class":73},[67,73681,53087],{"class":114},[67,73683,323],{"class":73},[67,73685,73686],{"class":69,"line":202},[67,73687,631],{"emptyLinePlaceholder":630},[67,73689,73690,73692,73694],{"class":69,"line":641},[67,73691,259],{"class":73},[67,73693,53100],{"class":262},[67,73695,323],{"class":73},[67,73697,73698,73700,73702,73704,73706,73708],{"class":69,"line":655},[67,73699,328],{"class":73},[67,73701,53110],{"class":262},[67,73703,53113],{"class":110},[67,73705,85],{"class":73},[67,73707,53118],{"class":114},[67,73709,323],{"class":73},[67,73711,73712,73714,73716,73718,73720,73722,73724,73726,73728],{"class":69,"line":660},[67,73713,328],{"class":73},[67,73715,53110],{"class":262},[67,73717,266],{"class":110},[67,73719,85],{"class":73},[67,73721,53157],{"class":114},[67,73723,53137],{"class":110},[67,73725,85],{"class":73},[67,73727,53164],{"class":114},[67,73729,323],{"class":73},[67,73731,73732,73734,73736,73738,73740],{"class":69,"line":665},[67,73733,328],{"class":73},[67,73735,53173],{"class":262},[67,73737,53176],{"class":73},[67,73739,53173],{"class":262},[67,73741,323],{"class":73},[67,73743,73744,73746,73748],{"class":69,"line":677},[67,73745,328],{"class":73},[67,73747,1903],{"class":262},[67,73749,323],{"class":73},[67,73751,73752,73754],{"class":69,"line":683},[67,73753,8220],{"class":262},[67,73755,17369],{"class":73},[67,73757,73758,73760,73762,73764],{"class":69,"line":689},[67,73759,56456],{"class":77},[67,73761,53203],{"class":73},[67,73763,78],{"class":77},[67,73765,3148],{"class":73},[67,73767,73768,73770,73772,73774],{"class":69,"line":694},[67,73769,56467],{"class":77},[67,73771,53203],{"class":73},[67,73773,78],{"class":77},[67,73775,3148],{"class":73},[67,73777,73778],{"class":69,"line":700},[67,73779,4020],{"class":73},[67,73781,73782],{"class":69,"line":706},[67,73783,631],{"emptyLinePlaceholder":630},[67,73785,73786,73788],{"class":69,"line":712},[67,73787,59040],{"class":262},[67,73789,17369],{"class":73},[67,73791,73792,73794,73796,73798],{"class":69,"line":717},[67,73793,59047],{"class":77},[67,73795,53203],{"class":73},[67,73797,53358],{"class":77},[67,73799,3148],{"class":73},[67,73801,73802,73804,73806,73808,73810],{"class":69,"line":723},[67,73803,63837],{"class":77},[67,73805,53203],{"class":73},[67,73807,2689],{"class":77},[67,73809,53258],{"class":84},[67,73811,3148],{"class":73},[67,73813,73814],{"class":69,"line":729},[67,73815,4020],{"class":73},[67,73817,73818],{"class":69,"line":735},[67,73819,631],{"emptyLinePlaceholder":630},[67,73821,73822,73825],{"class":69,"line":741},[67,73823,73824],{"class":110},"    .info",[67,73826,17369],{"class":73},[67,73828,73829,73831,73833,73835,73837],{"class":69,"line":747},[67,73830,56532],{"class":77},[67,73832,53203],{"class":73},[67,73834,53255],{"class":77},[67,73836,53258],{"class":84},[67,73838,3148],{"class":73},[67,73840,73841,73843,73845,73847,73849,73851],{"class":69,"line":753},[67,73842,56467],{"class":77},[67,73844,53203],{"class":73},[67,73846,2437],{"class":77},[67,73848,53258],{"class":84},[67,73850,53322],{"class":77},[67,73852,3148],{"class":73},[67,73854,73855,73857,73859,73861],{"class":69,"line":758},[67,73856,59047],{"class":77},[67,73858,53203],{"class":73},[67,73860,53358],{"class":77},[67,73862,3148],{"class":73},[67,73864,73865],{"class":69,"line":764},[67,73866,4020],{"class":73},[67,73868,73869],{"class":69,"line":770},[67,73870,631],{"emptyLinePlaceholder":630},[67,73872,73873,73876],{"class":69,"line":776},[67,73874,73875],{"class":110},"    .uname",[67,73877,33238],{"class":73},[67,73879,73880,73883],{"class":69,"line":782},[67,73881,73882],{"class":110},"    .age",[67,73884,33238],{"class":73},[67,73886,73887,73890],{"class":69,"line":788},[67,73888,73889],{"class":110},"    .salary",[67,73891,17369],{"class":73},[67,73893,73894,73896,73898,73900,73902],{"class":69,"line":793},[67,73895,56532],{"class":77},[67,73897,53203],{"class":73},[67,73899,2302],{"class":77},[67,73901,53258],{"class":84},[67,73903,3148],{"class":73},[67,73905,73906,73908,73910,73912,73914],{"class":69,"line":798},[67,73907,56546],{"class":77},[67,73909,53203],{"class":73},[67,73911,2689],{"class":77},[67,73913,53258],{"class":84},[67,73915,3148],{"class":73},[67,73917,73918,73920,73922,73924],{"class":69,"line":816},[67,73919,63541],{"class":77},[67,73921,53203],{"class":73},[67,73923,56498],{"class":77},[67,73925,3148],{"class":73},[67,73927,73928,73930,73932,73934,73936],{"class":69,"line":832},[67,73929,63511],{"class":77},[67,73931,53203],{"class":73},[67,73933,2564],{"class":77},[67,73935,53258],{"class":84},[67,73937,3148],{"class":73},[67,73939,73940],{"class":69,"line":843},[67,73941,4020],{"class":73},[67,73943,73944],{"class":69,"line":848},[67,73945,631],{"emptyLinePlaceholder":630},[67,73947,73948,73951],{"class":69,"line":863},[67,73949,73950],{"class":110},"    .gender",[67,73952,33238],{"class":73},[67,73954,73955,73958],{"class":69,"line":876},[67,73956,73957],{"class":110},"    .city",[67,73959,17369],{"class":73},[67,73961,73962,73964,73966,73968,73970],{"class":69,"line":889},[67,73963,56532],{"class":77},[67,73965,53203],{"class":73},[67,73967,2302],{"class":77},[67,73969,53258],{"class":84},[67,73971,3148],{"class":73},[67,73973,73974,73976,73978,73980,73982],{"class":69,"line":894},[67,73975,56546],{"class":77},[67,73977,53203],{"class":73},[67,73979,2814],{"class":77},[67,73981,53258],{"class":84},[67,73983,3148],{"class":73},[67,73985,73986,73988,73990,73992],{"class":69,"line":911},[67,73987,63541],{"class":77},[67,73989,53203],{"class":73},[67,73991,56498],{"class":77},[67,73993,3148],{"class":73},[67,73995,73996,73998,74000,74002,74004],{"class":69,"line":927},[67,73997,63511],{"class":77},[67,73999,53203],{"class":73},[67,74001,2564],{"class":77},[67,74003,53258],{"class":84},[67,74005,3148],{"class":73},[67,74007,74008,74010,74012,74014,74016,74018,74021,74023,74025,74027,74030,74032,74034],{"class":69,"line":932},[67,74009,63737],{"class":77},[67,74011,53203],{"class":73},[67,74013,2209],{"class":77},[67,74015,53258],{"class":84},[67,74017,53287],{"class":77},[67,74019,74020],{"class":77}," rgb",[67,74022,854],{"class":73},[67,74024,3565],{"class":77},[67,74026,1868],{"class":73},[67,74028,74029],{"class":77},"197",[67,74031,1868],{"class":73},[67,74033,74029],{"class":77},[67,74035,4544],{"class":73},[67,74037,74038],{"class":69,"line":955},[67,74039,4020],{"class":73},[67,74041,74042],{"class":69,"line":971},[67,74043,631],{"emptyLinePlaceholder":630},[67,74045,74046,74049],{"class":69,"line":1010},[67,74047,74048],{"class":262},"    button",[67,74050,17369],{"class":73},[67,74052,74053,74055,74057,74059,74061],{"class":69,"line":1016},[67,74054,56546],{"class":77},[67,74056,53203],{"class":73},[67,74058,2814],{"class":77},[67,74060,53258],{"class":84},[67,74062,3148],{"class":73},[67,74064,74065,74067,74069,74071,74073],{"class":69,"line":1021},[67,74066,56532],{"class":77},[67,74068,53203],{"class":73},[67,74070,2474],{"class":77},[67,74072,53258],{"class":84},[67,74074,3148],{"class":73},[67,74076,74077,74079,74081,74084,74086,74088,74090,74093,74095,74097],{"class":69,"line":1034},[67,74078,56645],{"class":77},[67,74080,53203],{"class":73},[67,74082,74083],{"class":77},"rgb",[67,74085,854],{"class":73},[67,74087,2957],{"class":77},[67,74089,1868],{"class":73},[67,74091,74092],{"class":77},"187",[67,74094,1868],{"class":73},[67,74096,2290],{"class":77},[67,74098,4544],{"class":73},[67,74100,74101,74103,74105,74107],{"class":69,"line":1053},[67,74102,59177],{"class":77},[67,74104,53203],{"class":73},[67,74106,62603],{"class":77},[67,74108,3148],{"class":73},[67,74110,74111,74113,74115,74117],{"class":69,"line":1070},[67,74112,63737],{"class":77},[67,74114,53203],{"class":73},[67,74116,78],{"class":77},[67,74118,3148],{"class":73},[67,74120,74121],{"class":69,"line":1083},[67,74122,4020],{"class":73},[67,74124,74125],{"class":69,"line":1088},[67,74126,631],{"emptyLinePlaceholder":630},[67,74128,74129,74131,74133],{"class":69,"line":1093},[67,74130,74048],{"class":262},[67,74132,53454],{"class":262},[67,74134,17369],{"class":73},[67,74136,74137,74139,74141,74144],{"class":69,"line":1110},[67,74138,56770],{"class":77},[67,74140,53203],{"class":73},[67,74142,74143],{"class":77},"inline-block",[67,74145,3148],{"class":73},[67,74147,74148,74150,74152,74154,74156],{"class":69,"line":11603},[67,74149,56532],{"class":77},[67,74151,53203],{"class":73},[67,74153,2437],{"class":77},[67,74155,53258],{"class":84},[67,74157,3148],{"class":73},[67,74159,74160,74162,74164,74166,74168],{"class":69,"line":11612},[67,74161,56546],{"class":77},[67,74163,53203],{"class":73},[67,74165,2437],{"class":77},[67,74167,53258],{"class":84},[67,74169,3148],{"class":73},[67,74171,74172,74174,74176,74178,74180],{"class":69,"line":11617},[67,74173,59120],{"class":77},[67,74175,53203],{"class":73},[67,74177,2462],{"class":77},[67,74179,53258],{"class":84},[67,74181,3148],{"class":73},[67,74183,74184,74186,74188,74190,74192,74194,74197],{"class":69,"line":11623},[67,74185,63737],{"class":77},[67,74187,53203],{"class":73},[67,74189,2209],{"class":77},[67,74191,53258],{"class":84},[67,74193,53287],{"class":77},[67,74195,74196],{"class":77}," #fff",[67,74198,3148],{"class":73},[67,74200,74201,74203,74205,74207,74209],{"class":69,"line":11644},[67,74202,56895],{"class":77},[67,74204,53203],{"class":73},[67,74206,2310],{"class":77},[67,74208,53258],{"class":84},[67,74210,3148],{"class":73},[67,74212,74213,74215,74217,74219,74221],{"class":69,"line":11650},[67,74214,63511],{"class":77},[67,74216,53203],{"class":73},[67,74218,2209],{"class":77},[67,74220,53258],{"class":84},[67,74222,3148],{"class":73},[67,74224,74225],{"class":69,"line":11664},[67,74226,4020],{"class":73},[67,74228,74229],{"class":69,"line":11670},[67,74230,631],{"emptyLinePlaceholder":630},[67,74232,74233,74236],{"class":69,"line":11697},[67,74234,74235],{"class":110},"    .total",[67,74237,17369],{"class":73},[67,74239,74240,74242,74244,74246,74248],{"class":69,"line":11706},[67,74241,56532],{"class":77},[67,74243,53203],{"class":73},[67,74245,63390],{"class":77},[67,74247,53258],{"class":84},[67,74249,3148],{"class":73},[67,74251,74252,74254,74256,74258,74260],{"class":69,"line":11712},[67,74253,56546],{"class":77},[67,74255,53203],{"class":73},[67,74257,2392],{"class":77},[67,74259,53258],{"class":84},[67,74261,3148],{"class":73},[67,74263,74264,74266,74268,74270,74272],{"class":69,"line":11720},[67,74265,59120],{"class":77},[67,74267,53203],{"class":73},[67,74269,2392],{"class":77},[67,74271,53258],{"class":84},[67,74273,3148],{"class":73},[67,74275,74276,74278,74280,74283],{"class":69,"line":11725},[67,74277,59047],{"class":77},[67,74279,53203],{"class":73},[67,74281,74282],{"class":77},"right",[67,74284,3148],{"class":73},[67,74286,74287,74289,74291,74293,74295,74297,74299,74301],{"class":69,"line":18401},[67,74288,56467],{"class":77},[67,74290,53203],{"class":73},[67,74292,2392],{"class":77},[67,74294,53258],{"class":84},[67,74296,53322],{"class":77},[67,74298,3871],{"class":77},[67,74300,53258],{"class":84},[67,74302,3148],{"class":73},[67,74304,74305,74308,74310,74312,74314],{"class":69,"line":18407},[67,74306,74307],{"class":77},"      padding-right",[67,74309,53203],{"class":73},[67,74311,2437],{"class":77},[67,74313,53258],{"class":84},[67,74315,3148],{"class":73},[67,74317,74318,74320,74322,74324,74326],{"class":69,"line":18430},[67,74319,56683],{"class":77},[67,74321,53203],{"class":73},[67,74323,2513],{"class":77},[67,74325,53258],{"class":84},[67,74327,3148],{"class":73},[67,74329,74330,74332,74334,74336,74338,74341,74343,74346,74348,74350],{"class":69,"line":18436},[67,74331,56645],{"class":77},[67,74333,53203],{"class":73},[67,74335,74083],{"class":77},[67,74337,854],{"class":73},[67,74339,74340],{"class":77},"237",[67,74342,1868],{"class":73},[67,74344,74345],{"class":77},"235",[67,74347,1868],{"class":73},[67,74349,74345],{"class":77},[67,74351,4544],{"class":73},[67,74353,74354,74357,74359,74361],{"class":69,"line":18459},[67,74355,74356],{"class":77},"      box-sizing",[67,74358,53203],{"class":73},[67,74360,62266],{"class":77},[67,74362,3148],{"class":73},[67,74364,74365],{"class":69,"line":18473},[67,74366,4020],{"class":73},[67,74368,74369],{"class":69,"line":18493},[67,74370,631],{"emptyLinePlaceholder":630},[67,74372,74373,74375,74377],{"class":69,"line":18499},[67,74374,74235],{"class":110},[67,74376,53454],{"class":262},[67,74378,17369],{"class":73},[67,74380,74381,74383,74385,74387],{"class":69,"line":18510},[67,74382,59177],{"class":77},[67,74384,53203],{"class":73},[67,74386,59182],{"class":77},[67,74388,3148],{"class":73},[67,74390,74391],{"class":69,"line":18533},[67,74392,4020],{"class":73},[67,74394,74395],{"class":69,"line":18555},[67,74396,631],{"emptyLinePlaceholder":630},[67,74398,74399,74401],{"class":69,"line":18560},[67,74400,66783],{"class":262},[67,74402,17369],{"class":73},[67,74404,74405,74407,74409,74411,74413],{"class":69,"line":18566},[67,74406,56532],{"class":77},[67,74408,53203],{"class":73},[67,74410,63390],{"class":77},[67,74412,53258],{"class":84},[67,74414,3148],{"class":73},[67,74416,74417,74419,74421,74424],{"class":69,"line":18580},[67,74418,56467],{"class":77},[67,74420,53203],{"class":73},[67,74422,74423],{"class":77},"auto",[67,74425,3148],{"class":73},[67,74427,74428,74430,74432,74434],{"class":69,"line":18593},[67,74429,66790],{"class":77},[67,74431,53203],{"class":73},[67,74433,66795],{"class":77},[67,74435,3148],{"class":73},[67,74437,74438],{"class":69,"line":18598},[67,74439,4020],{"class":73},[67,74441,74442],{"class":69,"line":18612},[67,74443,631],{"emptyLinePlaceholder":630},[67,74445,74446,74448],{"class":69,"line":18617},[67,74447,66875],{"class":262},[67,74449,17369],{"class":73},[67,74451,74452,74454,74456,74458,74460,74462,74464,74466,74468,74470],{"class":69,"line":18623},[67,74453,56645],{"class":77},[67,74455,53203],{"class":73},[67,74457,74083],{"class":77},[67,74459,854],{"class":73},[67,74461,74340],{"class":77},[67,74463,1868],{"class":73},[67,74465,74345],{"class":77},[67,74467,1868],{"class":73},[67,74469,74345],{"class":77},[67,74471,4544],{"class":73},[67,74473,74474],{"class":69,"line":18628},[67,74475,4020],{"class":73},[67,74477,74478],{"class":69,"line":18642},[67,74479,631],{"emptyLinePlaceholder":630},[67,74481,74482,74484],{"class":69,"line":18647},[67,74483,66875],{"class":262},[67,74485,33238],{"class":73},[67,74487,74488,74490],{"class":69,"line":18652},[67,74489,66941],{"class":262},[67,74491,17369],{"class":73},[67,74493,74494,74496,74498,74500,74502],{"class":69,"line":18666},[67,74495,56546],{"class":77},[67,74497,53203],{"class":73},[67,74499,2265],{"class":77},[67,74501,53258],{"class":84},[67,74503,3148],{"class":73},[67,74505,74506,74508,74510,74512],{"class":69,"line":18678},[67,74507,59047],{"class":77},[67,74509,53203],{"class":73},[67,74511,410],{"class":77},[67,74513,3148],{"class":73},[67,74515,74516,74518,74520,74522,74524],{"class":69,"line":18683},[67,74517,56683],{"class":77},[67,74519,53203],{"class":73},[67,74521,2538],{"class":77},[67,74523,53258],{"class":84},[67,74525,3148],{"class":73},[67,74527,74528,74530,74532,74534,74536,74538,74540,74542,74545,74547,74550,74552,74554],{"class":69,"line":18696},[67,74529,63737],{"class":77},[67,74531,53203],{"class":73},[67,74533,2209],{"class":77},[67,74535,53258],{"class":84},[67,74537,53287],{"class":77},[67,74539,74020],{"class":77},[67,74541,854],{"class":73},[67,74543,74544],{"class":77},"228",[67,74546,1868],{"class":73},[67,74548,74549],{"class":77},"225",[67,74551,1868],{"class":73},[67,74553,74549],{"class":77},[67,74555,4544],{"class":73},[67,74557,74558,74561,74563,74565,74567],{"class":69,"line":18701},[67,74559,74560],{"class":77},"      padding-left",[67,74562,53203],{"class":73},[67,74564,2310],{"class":77},[67,74566,53258],{"class":84},[67,74568,3148],{"class":73},[67,74570,74571,74573,74575,74577,74580,74582,74584],{"class":69,"line":18706},[67,74572,63621],{"class":77},[67,74574,53203],{"class":73},[67,74576,29907],{"class":77},[67,74578,74579],{"class":77}," linear",[67,74581,1002],{"class":77},[67,74583,2684],{"class":84},[67,74585,3148],{"class":73},[67,74587,74588],{"class":69,"line":18711},[67,74589,4020],{"class":73},[67,74591,74592],{"class":69,"line":18724},[67,74593,631],{"emptyLinePlaceholder":630},[67,74595,74596,74599,74601,74603],{"class":69,"line":18729},[67,74597,74598],{"class":262},"    tbody",[67,74600,71904],{"class":262},[67,74602,62701],{"class":110},[67,74604,17369],{"class":73},[67,74606,74607,74609,74611,74613,74615,74617,74619,74621,74623,74625],{"class":69,"line":34402},[67,74608,56645],{"class":77},[67,74610,53203],{"class":73},[67,74612,74083],{"class":77},[67,74614,854],{"class":73},[67,74616,74340],{"class":77},[67,74618,1868],{"class":73},[67,74620,74345],{"class":77},[67,74622,1868],{"class":73},[67,74624,74345],{"class":77},[67,74626,4544],{"class":73},[67,74628,74629,74631,74633,74635],{"class":69,"line":34408},[67,74630,63785],{"class":77},[67,74632,53203],{"class":73},[67,74634,63790],{"class":77},[67,74636,3148],{"class":73},[67,74638,74639],{"class":69,"line":34414},[67,74640,4020],{"class":73},[67,74642,74643],{"class":69,"line":34420},[67,74644,631],{"emptyLinePlaceholder":630},[67,74646,74647,74649,74651,74654,74656],{"class":69,"line":34426},[67,74648,74598],{"class":262},[67,74650,71904],{"class":262},[67,74652,74653],{"class":262}," td",[67,74655,3253],{"class":262},[67,74657,17369],{"class":73},[67,74659,74660,74662,74664,74666],{"class":69,"line":34437},[67,74661,56770],{"class":77},[67,74663,53203],{"class":73},[67,74665,62630],{"class":77},[67,74667,3148],{"class":73},[67,74669,74670,74672,74674,74676,74678],{"class":69,"line":34443},[67,74671,56532],{"class":77},[67,74673,53203],{"class":73},[67,74675,2896],{"class":77},[67,74677,53258],{"class":84},[67,74679,3148],{"class":73},[67,74681,74682,74684,74686,74688,74690],{"class":69,"line":34463},[67,74683,56546],{"class":77},[67,74685,53203],{"class":73},[67,74687,2814],{"class":77},[67,74689,53258],{"class":84},[67,74691,3148],{"class":73},[67,74693,74694,74696,74698,74700,74702],{"class":69,"line":34469},[67,74695,59120],{"class":77},[67,74697,53203],{"class":73},[67,74699,2814],{"class":77},[67,74701,53258],{"class":84},[67,74703,3148],{"class":73},[67,74705,74706,74708,74710,74712,74714],{"class":69,"line":34480},[67,74707,63837],{"class":77},[67,74709,53203],{"class":73},[67,74711,2077],{"class":77},[67,74713,53258],{"class":84},[67,74715,3148],{"class":73},[67,74717,74718,74720,74722,74724],{"class":69,"line":34486},[67,74719,59177],{"class":77},[67,74721,53203],{"class":73},[67,74723,62603],{"class":77},[67,74725,3148],{"class":73},[67,74727,74728,74730,74732,74734],{"class":69,"line":34492},[67,74729,59047],{"class":77},[67,74731,53203],{"class":73},[67,74733,53358],{"class":77},[67,74735,3148],{"class":73},[67,74737,74738,74740,74742,74744],{"class":69,"line":34498},[67,74739,65730],{"class":77},[67,74741,53203],{"class":73},[67,74743,56498],{"class":77},[67,74745,3148],{"class":73},[67,74747,74748,74750,74752,74755],{"class":69,"line":34504},[67,74749,56645],{"class":77},[67,74751,53203],{"class":73},[67,74753,74754],{"class":77},"orange",[67,74756,3148],{"class":73},[67,74758,74759,74761,74763,74766,74768],{"class":69,"line":34510},[67,74760,56895],{"class":77},[67,74762,53203],{"class":73},[67,74764,74765],{"class":77},"12.5",[67,74767,53258],{"class":84},[67,74769,3148],{"class":73},[67,74771,74772],{"class":69,"line":34516},[67,74773,4020],{"class":73},[67,74775,74776,74778,74780],{"class":69,"line":34522},[67,74777,54181],{"class":73},[67,74779,1903],{"class":262},[67,74781,323],{"class":73},[67,74783,74784,74786,74788],{"class":69,"line":34542},[67,74785,376],{"class":73},[67,74787,53100],{"class":262},[67,74789,323],{"class":73},[67,74791,74792],{"class":69,"line":34548},[67,74793,631],{"emptyLinePlaceholder":630},[67,74795,74796,74798,74800],{"class":69,"line":34564},[67,74797,259],{"class":73},[67,74799,53565],{"class":262},[67,74801,323],{"class":73},[67,74803,74804,74806,74808,74811,74813],{"class":69,"line":34570},[67,74805,328],{"class":73},[67,74807,14],{"class":262},[67,74809,74810],{"class":73},">学生就业统计表\u003C\u002F",[67,74812,14],{"class":262},[67,74814,323],{"class":73},[67,74816,74817,74819,74821,74823,74825,74827,74829,74831,74833],{"class":69,"line":34584},[67,74818,328],{"class":73},[67,74820,68385],{"class":262},[67,74822,55248],{"class":110},[67,74824,85],{"class":73},[67,74826,64424],{"class":114},[67,74828,70830],{"class":110},[67,74830,85],{"class":73},[67,74832,33547],{"class":114},[67,74834,323],{"class":73},[67,74836,74837,74839,74841,74843,74845,74847,74849,74851,74853,74855,74857,74860,74862,74864,74866],{"class":69,"line":34590},[67,74838,53107],{"class":73},[67,74840,55583],{"class":262},[67,74842,274],{"class":110},[67,74844,85],{"class":73},[67,74846,64459],{"class":114},[67,74848,266],{"class":110},[67,74850,85],{"class":73},[67,74852,70856],{"class":114},[67,74854,62781],{"class":110},[67,74856,85],{"class":73},[67,74858,74859],{"class":114},"\"姓名\"",[67,74861,55248],{"class":110},[67,74863,85],{"class":73},[67,74865,70856],{"class":114},[67,74867,323],{"class":73},[67,74869,74870,74872,74874,74876,74878,74880,74882,74884,74886,74888,74890,74893,74895,74897,74899],{"class":69,"line":34605},[67,74871,53107],{"class":73},[67,74873,55583],{"class":262},[67,74875,274],{"class":110},[67,74877,85],{"class":73},[67,74879,64459],{"class":114},[67,74881,266],{"class":110},[67,74883,85],{"class":73},[67,74885,70884],{"class":114},[67,74887,62781],{"class":110},[67,74889,85],{"class":73},[67,74891,74892],{"class":114},"\"年龄\"",[67,74894,55248],{"class":110},[67,74896,85],{"class":73},[67,74898,70884],{"class":114},[67,74900,323],{"class":73},[67,74902,74903,74905,74907,74909,74911,74913,74915,74917,74919,74921,74923,74926,74928,74930,74932],{"class":69,"line":34611},[67,74904,53107],{"class":73},[67,74906,55583],{"class":262},[67,74908,274],{"class":110},[67,74910,85],{"class":73},[67,74912,64459],{"class":114},[67,74914,266],{"class":110},[67,74916,85],{"class":73},[67,74918,70986],{"class":114},[67,74920,62781],{"class":110},[67,74922,85],{"class":73},[67,74924,74925],{"class":114},"\"薪资\"",[67,74927,55248],{"class":110},[67,74929,85],{"class":73},[67,74931,70986],{"class":114},[67,74933,323],{"class":73},[67,74935,74936,74938,74940,74942,74944,74946,74948,74950,74952,74954,74956,74958],{"class":69,"line":34620},[67,74937,53107],{"class":73},[67,74939,70904],{"class":262},[67,74941,266],{"class":110},[67,74943,85],{"class":73},[67,74945,70911],{"class":114},[67,74947,16756],{"class":110},[67,74949,85],{"class":73},[67,74951,9468],{"class":114},[67,74953,55248],{"class":110},[67,74955,85],{"class":73},[67,74957,70911],{"class":114},[67,74959,323],{"class":73},[67,74961,74962,74964,74966,74968,74970,74972,74974,74976],{"class":69,"line":34626},[67,74963,56995],{"class":73},[67,74965,70926],{"class":262},[67,74967,68411],{"class":110},[67,74969,85],{"class":73},[67,74971,11761],{"class":114},[67,74973,70935],{"class":73},[67,74975,70926],{"class":262},[67,74977,323],{"class":73},[67,74979,74980,74982,74984,74986,74988,74990,74992,74994],{"class":69,"line":34635},[67,74981,56995],{"class":73},[67,74983,70926],{"class":262},[67,74985,68411],{"class":110},[67,74987,85],{"class":73},[67,74989,11830],{"class":114},[67,74991,70954],{"class":73},[67,74993,70926],{"class":262},[67,74995,323],{"class":73},[67,74997,74998,75000,75002],{"class":69,"line":34641},[67,74999,53542],{"class":73},[67,75001,70904],{"class":262},[67,75003,323],{"class":73},[67,75005,75006,75008,75010,75012,75014,75016,75018,75020,75022,75024,75026,75028],{"class":69,"line":34647},[67,75007,53107],{"class":73},[67,75009,70904],{"class":262},[67,75011,266],{"class":110},[67,75013,85],{"class":73},[67,75015,71008],{"class":114},[67,75017,16756],{"class":110},[67,75019,85],{"class":73},[67,75021,9468],{"class":114},[67,75023,55248],{"class":110},[67,75025,85],{"class":73},[67,75027,71008],{"class":114},[67,75029,323],{"class":73},[67,75031,75032,75034,75036,75038,75040,75042,75044,75046],{"class":69,"line":34656},[67,75033,56995],{"class":73},[67,75035,70926],{"class":262},[67,75037,68411],{"class":110},[67,75039,85],{"class":73},[67,75041,71029],{"class":114},[67,75043,71032],{"class":73},[67,75045,70926],{"class":262},[67,75047,323],{"class":73},[67,75049,75050,75052,75054,75056,75058,75060,75062,75064],{"class":69,"line":34662},[67,75051,56995],{"class":73},[67,75053,70926],{"class":262},[67,75055,68411],{"class":110},[67,75057,85],{"class":73},[67,75059,71049],{"class":114},[67,75061,71052],{"class":73},[67,75063,70926],{"class":262},[67,75065,323],{"class":73},[67,75067,75068,75070,75072,75074,75076,75078,75080,75082],{"class":69,"line":34673},[67,75069,56995],{"class":73},[67,75071,70926],{"class":262},[67,75073,68411],{"class":110},[67,75075,85],{"class":73},[67,75077,71069],{"class":114},[67,75079,71072],{"class":73},[67,75081,70926],{"class":262},[67,75083,323],{"class":73},[67,75085,75086,75088,75090,75092,75094,75096,75098,75100],{"class":69,"line":34679},[67,75087,56995],{"class":73},[67,75089,70926],{"class":262},[67,75091,68411],{"class":110},[67,75093,85],{"class":73},[67,75095,71089],{"class":114},[67,75097,71092],{"class":73},[67,75099,70926],{"class":262},[67,75101,323],{"class":73},[67,75103,75104,75106,75108,75110,75112,75114,75116,75118],{"class":69,"line":34698},[67,75105,56995],{"class":73},[67,75107,70926],{"class":262},[67,75109,68411],{"class":110},[67,75111,85],{"class":73},[67,75113,71109],{"class":114},[67,75115,71112],{"class":73},[67,75117,70926],{"class":262},[67,75119,323],{"class":73},[67,75121,75122,75124,75126],{"class":69,"line":34704},[67,75123,53542],{"class":73},[67,75125,70904],{"class":262},[67,75127,323],{"class":73},[67,75129,75130,75132,75134],{"class":69,"line":34715},[67,75131,53107],{"class":73},[67,75133,55648],{"class":262},[67,75135,323],{"class":73},[67,75137,75138,75140,75142,75145,75147,75150,75152],{"class":69,"line":34721},[67,75139,56995],{"class":73},[67,75141,67],{"class":262},[67,75143,75144],{"class":73},">+\u003C\u002F",[67,75146,67],{"class":262},[67,75148,75149],{"class":73},">添加\u003C\u002F",[67,75151,55648],{"class":262},[67,75153,323],{"class":73},[67,75155,75156,75158,75160],{"class":69,"line":34741},[67,75157,54181],{"class":73},[67,75159,68385],{"class":262},[67,75161,323],{"class":73},[67,75163,75164,75166,75168,75170,75172,75174,75177,75179,75182,75184,75187,75189],{"class":69,"line":34757},[67,75165,328],{"class":73},[67,75167,53377],{"class":262},[67,75169,55248],{"class":110},[67,75171,85],{"class":73},[67,75173,64340],{"class":114},[67,75175,75176],{"class":73},">共有数据 \u003C",[67,75178,67],{"class":262},[67,75180,75181],{"class":73},">0\u003C\u002F",[67,75183,67],{"class":262},[67,75185,75186],{"class":73},"> 条\u003C\u002F",[67,75188,53377],{"class":262},[67,75190,323],{"class":73},[67,75192,75193,75195,75197],{"class":69,"line":34763},[67,75194,328],{"class":73},[67,75196,399],{"class":262},[67,75198,323],{"class":73},[67,75200,75201,75203,75205],{"class":69,"line":34777},[67,75202,53107],{"class":73},[67,75204,402],{"class":262},[67,75206,323],{"class":73},[67,75208,75209,75211,75213],{"class":69,"line":34783},[67,75210,56995],{"class":73},[67,75212,405],{"class":262},[67,75214,323],{"class":73},[67,75216,75217,75219,75221,75224,75226],{"class":69,"line":34789},[67,75218,57063],{"class":73},[67,75220,408],{"class":262},[67,75222,75223],{"class":73},">ID\u003C\u002F",[67,75225,408],{"class":262},[67,75227,323],{"class":73},[67,75229,75230,75232,75234,75236,75238],{"class":69,"line":34800},[67,75231,57063],{"class":73},[67,75233,408],{"class":262},[67,75235,71215],{"class":73},[67,75237,408],{"class":262},[67,75239,323],{"class":73},[67,75241,75242,75244,75246,75248,75250],{"class":69,"line":34806},[67,75243,57063],{"class":73},[67,75245,408],{"class":262},[67,75247,71228],{"class":73},[67,75249,408],{"class":262},[67,75251,323],{"class":73},[67,75253,75254,75256,75258,75260,75262],{"class":69,"line":34812},[67,75255,57063],{"class":73},[67,75257,408],{"class":262},[67,75259,71241],{"class":73},[67,75261,408],{"class":262},[67,75263,323],{"class":73},[67,75265,75266,75268,75270,75272,75274],{"class":69,"line":34822},[67,75267,57063],{"class":73},[67,75269,408],{"class":262},[67,75271,71254],{"class":73},[67,75273,408],{"class":262},[67,75275,323],{"class":73},[67,75277,75278,75280,75282,75284,75286],{"class":69,"line":34828},[67,75279,57063],{"class":73},[67,75281,408],{"class":262},[67,75283,71267],{"class":73},[67,75285,408],{"class":262},[67,75287,323],{"class":73},[67,75289,75290,75292,75294,75297,75299],{"class":69,"line":34839},[67,75291,57063],{"class":73},[67,75293,408],{"class":262},[67,75295,75296],{"class":73},">录入时间\u003C\u002F",[67,75298,408],{"class":262},[67,75300,323],{"class":73},[67,75302,75303,75305,75307,75309,75311],{"class":69,"line":34845},[67,75304,57063],{"class":73},[67,75306,408],{"class":262},[67,75308,71280],{"class":73},[67,75310,408],{"class":262},[67,75312,323],{"class":73},[67,75314,75315,75317,75319],{"class":69,"line":34855},[67,75316,57168],{"class":73},[67,75318,405],{"class":262},[67,75320,323],{"class":73},[67,75322,75323,75325,75327],{"class":69,"line":34860},[67,75324,53542],{"class":73},[67,75326,402],{"class":262},[67,75328,323],{"class":73},[67,75330,75331,75333,75335],{"class":69,"line":34866},[67,75332,53107],{"class":73},[67,75334,419],{"class":262},[67,75336,323],{"class":73},[67,75338,75339],{"class":69,"line":34915},[67,75340,75341],{"class":2058},"      \u003C!-- \u003Ctr>\n",[67,75343,75344],{"class":69,"line":34962},[67,75345,75346],{"class":2058},"        \u003Ctd>1\u003C\u002Ftd>\n",[67,75348,75349],{"class":69,"line":34967},[67,75350,75346],{"class":2058},[67,75352,75353],{"class":69,"line":34973},[67,75354,75346],{"class":2058},[67,75356,75357],{"class":69,"line":34992},[67,75358,75346],{"class":2058},[67,75360,75361],{"class":69,"line":34998},[67,75362,75346],{"class":2058},[67,75364,75365],{"class":69,"line":35018},[67,75366,75346],{"class":2058},[67,75368,75369],{"class":69,"line":35024},[67,75370,75346],{"class":2058},[67,75372,75373],{"class":69,"line":35030},[67,75374,75375],{"class":2058},"        \u003Ctd>\n",[67,75377,75378],{"class":69,"line":35040},[67,75379,75380],{"class":2058},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[67,75382,75383],{"class":69,"line":35045},[67,75384,75385],{"class":2058},"        \u003C\u002Ftd>\n",[67,75387,75388],{"class":69,"line":35051},[67,75389,75390],{"class":2058},"      \u003C\u002Ftr> -->\n",[67,75392,75393,75395,75397],{"class":69,"line":35067},[67,75394,53542],{"class":73},[67,75396,419],{"class":262},[67,75398,323],{"class":73},[67,75400,75401,75403,75405],{"class":69,"line":35112},[67,75402,54181],{"class":73},[67,75404,399],{"class":262},[67,75406,323],{"class":73},[67,75408,75409,75411,75413],{"class":69,"line":35118},[67,75410,328],{"class":73},[67,75412,53578],{"class":262},[67,75414,323],{"class":73},[67,75416,75417],{"class":69,"line":35124},[67,75418,75419],{"class":2058},"    \u002F\u002F const initData = [{\n",[67,75421,75422],{"class":69,"line":35130},[67,75423,75424],{"class":2058},"    \u002F\u002F   unameId: 1,\n",[67,75426,75427],{"class":69,"line":35141},[67,75428,75429],{"class":2058},"    \u002F\u002F   uname: '华晨宇',\n",[67,75431,75432],{"class":69,"line":35147},[67,75433,75434],{"class":2058},"    \u002F\u002F   age: 22,\n",[67,75436,75437],{"class":69,"line":35153},[67,75438,75439],{"class":2058},"    \u002F\u002F   salary: 12000,\n",[67,75441,75442],{"class":69,"line":35159},[67,75443,75444],{"class":2058},"    \u002F\u002F   gender: '男',\n",[67,75446,75447],{"class":69,"line":35177},[67,75448,75449],{"class":2058},"    \u002F\u002F   city: '北京',\n",[67,75451,75452],{"class":69,"line":35191},[67,75453,75454],{"class":2058},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[67,75456,75457],{"class":69,"line":35200},[67,75458,75459],{"class":2058},"    \u002F\u002F }]\n",[67,75461,75462],{"class":69,"line":35209},[67,75463,75464],{"class":2058},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[67,75466,75467],{"class":69,"line":35218},[67,75468,75469],{"class":2058},"    \u002F\u002F 1.渲染业务\n",[67,75471,75472],{"class":69,"line":35227},[67,75473,75474],{"class":2058},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[67,75476,75477],{"class":69,"line":35233},[67,75478,75479],{"class":2058},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[67,75481,75482],{"class":69,"line":35239},[67,75483,75484],{"class":2058},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[67,75486,75487],{"class":69,"line":35247},[67,75488,631],{"emptyLinePlaceholder":630},[67,75490,75491],{"class":69,"line":35252},[67,75492,75493],{"class":2058},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[67,75495,75496],{"class":69,"line":35258},[67,75497,75498],{"class":2058},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[67,75500,75501,75503,75505,75507],{"class":69,"line":35269},[67,75502,13021],{"class":84},[67,75504,59456],{"class":77},[67,75506,671],{"class":84},[67,75508,53603],{"class":73},[67,75510,75511,75514,75516],{"class":69,"line":35275},[67,75512,75513],{"class":73},"    console.",[67,75515,60008],{"class":110},[67,75517,54176],{"class":73},[67,75519,75520],{"class":69,"line":35295},[67,75521,631],{"emptyLinePlaceholder":630},[67,75523,75524],{"class":69,"line":35301},[67,75525,75526],{"class":2058},"    \u002F\u002F 时间函数\n",[67,75528,75529,75531,75534],{"class":69,"line":35307},[67,75530,71844],{"class":84},[67,75532,75533],{"class":110}," getTime",[67,75535,12653],{"class":73},[67,75537,75538,75540,75543,75545,75547,75550],{"class":69,"line":35313},[67,75539,59989],{"class":84},[67,75541,75542],{"class":77}," date",[67,75544,671],{"class":84},[67,75546,13378],{"class":84},[67,75548,75549],{"class":110}," Date",[67,75551,3809],{"class":73},[67,75553,75554,75556,75558,75560,75563,75566,75568,75570,75572,75575,75578,75580,75582,75584,75586,75588,75590,75592],{"class":69,"line":35330},[67,75555,59989],{"class":84},[67,75557,17888],{"class":77},[67,75559,671],{"class":84},[67,75561,75562],{"class":73}," date.",[67,75564,75565],{"class":110},"getHours",[67,75567,14849],{"class":73},[67,75569,259],{"class":84},[67,75571,3871],{"class":77},[67,75573,75574],{"class":84}," ?",[67,75576,75577],{"class":114}," '0'",[67,75579,47334],{"class":84},[67,75581,75562],{"class":73},[67,75583,75565],{"class":110},[67,75585,14849],{"class":73},[67,75587,2848],{"class":84},[67,75589,75562],{"class":73},[67,75591,75565],{"class":110},[67,75593,3809],{"class":73},[67,75595,75596,75598,75601,75603,75605,75608,75610,75612,75614,75616,75618,75620,75622,75624,75626,75628,75630,75632],{"class":69,"line":35336},[67,75597,59989],{"class":84},[67,75599,75600],{"class":77}," m",[67,75602,671],{"class":84},[67,75604,75562],{"class":73},[67,75606,75607],{"class":110},"getMinutes",[67,75609,14849],{"class":73},[67,75611,259],{"class":84},[67,75613,3871],{"class":77},[67,75615,75574],{"class":84},[67,75617,75577],{"class":114},[67,75619,47334],{"class":84},[67,75621,75562],{"class":73},[67,75623,75607],{"class":110},[67,75625,14849],{"class":73},[67,75627,2848],{"class":84},[67,75629,75562],{"class":73},[67,75631,75607],{"class":110},[67,75633,3809],{"class":73},[67,75635,75636,75638,75640,75642,75644,75647,75649,75651,75653,75655,75657,75659,75661,75663,75665,75667,75669,75671],{"class":69,"line":35342},[67,75637,59989],{"class":84},[67,75639,10234],{"class":77},[67,75641,671],{"class":84},[67,75643,75562],{"class":73},[67,75645,75646],{"class":110},"getSeconds",[67,75648,14849],{"class":73},[67,75650,259],{"class":84},[67,75652,3871],{"class":77},[67,75654,75574],{"class":84},[67,75656,75577],{"class":114},[67,75658,47334],{"class":84},[67,75660,75562],{"class":73},[67,75662,75646],{"class":110},[67,75664,14849],{"class":73},[67,75666,2848],{"class":84},[67,75668,75562],{"class":73},[67,75670,75646],{"class":110},[67,75672,3809],{"class":73},[67,75674,75675,75677,75680,75682,75684,75687,75689,75692,75694,75697,75699,75701,75704,75706,75708,75710,75712,75714,75716,75719,75721,75724,75726,75729,75731,75733,75735],{"class":69,"line":35348},[67,75676,59989],{"class":84},[67,75678,75679],{"class":77}," str",[67,75681,671],{"class":84},[67,75683,64663],{"class":114},[67,75685,75686],{"class":73},"date",[67,75688,2547],{"class":114},[67,75690,75691],{"class":110},"getFullYear",[67,75693,4259],{"class":114},[67,75695,75696],{"class":114},"}\u002F${",[67,75698,75686],{"class":73},[67,75700,2547],{"class":114},[67,75702,75703],{"class":110},"getMonth",[67,75705,14849],{"class":114},[67,75707,2471],{"class":84},[67,75709,906],{"class":77},[67,75711,75696],{"class":114},[67,75713,75686],{"class":73},[67,75715,2547],{"class":114},[67,75717,75718],{"class":110},"getDate",[67,75720,4259],{"class":114},[67,75722,75723],{"class":114},"} ${",[67,75725,2406],{"class":73},[67,75727,75728],{"class":114},"}:${",[67,75730,2533],{"class":73},[67,75732,75728],{"class":114},[67,75734,2684],{"class":73},[67,75736,75737],{"class":114},"}`\n",[67,75739,75740,75743],{"class":69,"line":35354},[67,75741,75742],{"class":84},"      return",[67,75744,75745],{"class":73}," str\n",[67,75747,75748],{"class":69,"line":35360},[67,75749,4020],{"class":73},[67,75751,75752],{"class":69,"line":35387},[67,75753,75754],{"class":2058},"    \u002F\u002F 渲染函数\n",[67,75756,75757,75759,75761,75763,75765,75767,75769,75771],{"class":69,"line":35411},[67,75758,13021],{"class":84},[67,75760,71507],{"class":77},[67,75762,671],{"class":84},[67,75764,56157],{"class":73},[67,75766,56160],{"class":110},[67,75768,854],{"class":73},[67,75770,71518],{"class":114},[67,75772,829],{"class":73},[67,75774,75775,75777,75779],{"class":69,"line":35417},[67,75776,71844],{"class":84},[67,75778,71847],{"class":110},[67,75780,12653],{"class":73},[67,75782,75783],{"class":69,"line":35423},[67,75784,75785],{"class":2058},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[67,75787,75788],{"class":69,"line":35429},[67,75789,75790],{"class":2058},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[67,75792,75793,75795,75798,75800,75802,75805,75807,75809,75811,75814,75816,75819],{"class":69,"line":35440},[67,75794,59989],{"class":84},[67,75796,75797],{"class":77}," trArr",[67,75799,671],{"class":84},[67,75801,53730],{"class":73},[67,75803,75804],{"class":110},"map",[67,75806,854],{"class":73},[67,75808,56210],{"class":84},[67,75810,3505],{"class":73},[67,75812,75813],{"class":7033},"ele",[67,75815,1868],{"class":73},[67,75817,75818],{"class":7033},"index",[67,75820,14241],{"class":73},[67,75822,75823,75825],{"class":69,"line":35451},[67,75824,16550],{"class":84},[67,75826,71928],{"class":114},[67,75828,75829],{"class":69,"line":35457},[67,75830,75831],{"class":114},"      \u003Ctr>\n",[67,75833,75834,75836,75838,75840,75843],{"class":69,"line":35474},[67,75835,71933],{"class":114},[67,75837,75813],{"class":73},[67,75839,2547],{"class":114},[67,75841,75842],{"class":73},"unameId",[67,75844,71948],{"class":114},[67,75846,75847,75849,75851,75853,75855],{"class":69,"line":35497},[67,75848,71933],{"class":114},[67,75850,75813],{"class":73},[67,75852,2547],{"class":114},[67,75854,71964],{"class":73},[67,75856,71948],{"class":114},[67,75858,75859,75861,75863,75865,75867],{"class":69,"line":35520},[67,75860,71933],{"class":114},[67,75862,75813],{"class":73},[67,75864,2547],{"class":114},[67,75866,71981],{"class":73},[67,75868,71948],{"class":114},[67,75870,75871,75873,75875,75877,75879],{"class":69,"line":35526},[67,75872,71933],{"class":114},[67,75874,75813],{"class":73},[67,75876,2547],{"class":114},[67,75878,71998],{"class":73},[67,75880,71948],{"class":114},[67,75882,75883,75885,75887,75889,75891],{"class":69,"line":35531},[67,75884,71933],{"class":114},[67,75886,75813],{"class":73},[67,75888,2547],{"class":114},[67,75890,72015],{"class":73},[67,75892,71948],{"class":114},[67,75894,75895,75897,75899,75901,75903],{"class":69,"line":35540},[67,75896,71933],{"class":114},[67,75898,75813],{"class":73},[67,75900,2547],{"class":114},[67,75902,72032],{"class":73},[67,75904,71948],{"class":114},[67,75906,75907,75909,75911,75913,75915],{"class":69,"line":35550},[67,75908,71933],{"class":114},[67,75910,75813],{"class":73},[67,75912,2547],{"class":114},[67,75914,4220],{"class":73},[67,75916,71948],{"class":114},[67,75918,75919],{"class":69,"line":35556},[67,75920,75375],{"class":114},[67,75922,75923,75926,75928],{"class":69,"line":35561},[67,75924,75925],{"class":114},"          \u003Ca href=\"#\" data-id=\"${",[67,75927,75818],{"class":73},[67,75929,75930],{"class":114},"}\">删除\u003C\u002Fa>\n",[67,75932,75933],{"class":69,"line":35567},[67,75934,75385],{"class":114},[67,75936,75937],{"class":69,"line":35580},[67,75938,75939],{"class":114},"      \u003C\u002Ftr>\n",[67,75941,75942],{"class":69,"line":35586},[67,75943,75944],{"class":114},"  `\n",[67,75946,75947],{"class":69,"line":35597},[67,75948,66575],{"class":73},[67,75950,75951,75953,75955],{"class":69,"line":35608},[67,75952,60005],{"class":73},[67,75954,60008],{"class":110},[67,75956,75957],{"class":73},"(trArr)\n",[67,75959,75960],{"class":69,"line":35627},[67,75961,631],{"emptyLinePlaceholder":630},[67,75963,75964],{"class":69,"line":51286},[67,75965,75966],{"class":2058},"      \u002F\u002F (2) 把数组转换为字符串join\n",[67,75968,75969],{"class":69,"line":51291},[67,75970,75971],{"class":2058},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[67,75973,75974,75976,75978,75981,75984,75986,75989],{"class":69,"line":51300},[67,75975,71859],{"class":73},[67,75977,85],{"class":84},[67,75979,75980],{"class":73}," trArr.",[67,75982,75983],{"class":110},"join",[67,75985,854],{"class":73},[67,75987,75988],{"class":114},"''",[67,75990,829],{"class":73},[67,75992,75993],{"class":69,"line":51309},[67,75994,75995],{"class":2058},"      \u002F\u002F 显示共有几条\n",[67,75997,75998,76000,76002,76004,76007,76010,76012,76014],{"class":69,"line":51314},[67,75999,57532],{"class":73},[67,76001,56160],{"class":110},[67,76003,854],{"class":73},[67,76005,76006],{"class":114},"'.total span'",[67,76008,76009],{"class":73},").innerHTML ",[67,76011,85],{"class":84},[67,76013,53730],{"class":73},[67,76015,57592],{"class":77},[67,76017,76018],{"class":69,"line":51319},[67,76019,4020],{"class":73},[67,76021,76022],{"class":69,"line":51324},[67,76023,76024],{"class":2058},"    \u002F\u002F render()\n",[67,76026,76027],{"class":69,"line":51337},[67,76028,631],{"emptyLinePlaceholder":630},[67,76030,76031],{"class":69,"line":51342},[67,76032,76033],{"class":2058},"    \u002F\u002F 获取DOM对象\n",[67,76035,76036,76038,76040,76042,76044,76046,76048,76050],{"class":69,"line":51351},[67,76037,13021],{"class":84},[67,76039,71581],{"class":77},[67,76041,671],{"class":84},[67,76043,56157],{"class":73},[67,76045,56160],{"class":110},[67,76047,854],{"class":73},[67,76049,71592],{"class":114},[67,76051,829],{"class":73},[67,76053,76054,76056,76058,76060,76062,76064,76066,76068],{"class":69,"line":51360},[67,76055,13021],{"class":84},[67,76057,71408],{"class":77},[67,76059,671],{"class":84},[67,76061,56157],{"class":73},[67,76063,56160],{"class":110},[67,76065,854],{"class":73},[67,76067,71419],{"class":114},[67,76069,829],{"class":73},[67,76071,76072,76074,76076,76078,76080,76082,76084,76086],{"class":69,"line":51377},[67,76073,13021],{"class":84},[67,76075,17486],{"class":77},[67,76077,671],{"class":84},[67,76079,56157],{"class":73},[67,76081,56160],{"class":110},[67,76083,854],{"class":73},[67,76085,71438],{"class":114},[67,76087,829],{"class":73},[67,76089,76091,76093,76095,76097,76099,76101,76103,76105],{"class":69,"line":76090},231,[67,76092,13021],{"class":84},[67,76094,71467],{"class":77},[67,76096,671],{"class":84},[67,76098,56157],{"class":73},[67,76100,56160],{"class":110},[67,76102,854],{"class":73},[67,76104,71478],{"class":114},[67,76106,829],{"class":73},[67,76108,76110,76112,76114,76116,76118,76120,76122,76124],{"class":69,"line":76109},232,[67,76111,13021],{"class":84},[67,76113,71447],{"class":77},[67,76115,671],{"class":84},[67,76117,56157],{"class":73},[67,76119,56160],{"class":110},[67,76121,854],{"class":73},[67,76123,71458],{"class":114},[67,76125,829],{"class":73},[67,76127,76129,76131,76133,76135,76137,76139,76141,76143],{"class":69,"line":76128},233,[67,76130,13021],{"class":84},[67,76132,71487],{"class":77},[67,76134,671],{"class":84},[67,76136,56157],{"class":73},[67,76138,56160],{"class":110},[67,76140,854],{"class":73},[67,76142,71498],{"class":114},[67,76144,829],{"class":73},[67,76146,76148],{"class":69,"line":76147},234,[67,76149,631],{"emptyLinePlaceholder":630},[67,76151,76153],{"class":69,"line":76152},235,[67,76154,76155],{"class":2058},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[67,76157,76159,76161,76163,76165,76167,76169,76171,76173,76175],{"class":69,"line":76158},236,[67,76160,71599],{"class":73},[67,76162,59574],{"class":110},[67,76164,854],{"class":73},[67,76166,71606],{"class":114},[67,76168,1868],{"class":73},[67,76170,56210],{"class":84},[67,76172,3505],{"class":73},[67,76174,2074],{"class":7033},[67,76176,14241],{"class":73},[67,76178,76180],{"class":69,"line":76179},237,[67,76181,76182],{"class":2058},"      \u002F\u002F 禁止浏览器跳转\n",[67,76184,76186,76188,76190],{"class":69,"line":76185},238,[67,76187,71626],{"class":73},[67,76189,71629],{"class":110},[67,76191,3809],{"class":73},[67,76193,76195],{"class":69,"line":76194},239,[67,76196,76197],{"class":2058},"      \u002F\u002F 非空判断\n",[67,76199,76201],{"class":69,"line":76200},240,[67,76202,76203],{"class":2058},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[67,76205,76207],{"class":69,"line":76206},241,[67,76208,76209],{"class":2058},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[67,76211,76213,76215,76217,76219,76222,76224,76227,76230,76232,76234],{"class":69,"line":76212},242,[67,76214,56241],{"class":84},[67,76216,3505],{"class":73},[67,76218,2218],{"class":84},[67,76220,76221],{"class":73},"uname.value ",[67,76223,73117],{"class":84},[67,76225,76226],{"class":84}," !",[67,76228,76229],{"class":73},"age.value ",[67,76231,73117],{"class":84},[67,76233,76226],{"class":84},[67,76235,76236],{"class":73},"salary.value) {\n",[67,76238,76240,76242,76244,76246,76248],{"class":69,"line":76239},243,[67,76241,16550],{"class":84},[67,76243,71700],{"class":110},[67,76245,854],{"class":73},[67,76247,71705],{"class":114},[67,76249,829],{"class":73},[67,76251,76253],{"class":69,"line":76252},244,[67,76254,54162],{"class":73},[67,76256,76258,76260,76262],{"class":69,"line":76257},245,[67,76259,59768],{"class":73},[67,76261,53649],{"class":110},[67,76263,76264],{"class":73},"({\n",[67,76266,76268],{"class":69,"line":76267},246,[67,76269,76270],{"class":2058},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[67,76272,76274],{"class":69,"line":76273},247,[67,76275,76276],{"class":2058},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[67,76278,76280],{"class":69,"line":76279},248,[67,76281,76282],{"class":2058},"        \u002F\u002F 对象的序号应为数组长度+1\n",[67,76284,76286],{"class":69,"line":76285},249,[67,76287,76288],{"class":2058},"        \u002F\u002F unameId: arr.length + 1,\n",[67,76290,76292],{"class":69,"line":76291},250,[67,76293,631],{"emptyLinePlaceholder":630},[67,76295,76297],{"class":69,"line":76296},251,[67,76298,76299],{"class":2058},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[67,76301,76303],{"class":69,"line":76302},252,[67,76304,76305],{"class":2058},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[67,76307,76309],{"class":69,"line":76308},253,[67,76310,76311],{"class":2058},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[67,76313,76315],{"class":69,"line":76314},254,[67,76316,76317],{"class":2058},"        \u002F\u002F 0当假看\n",[67,76319,76321,76324,76326,76328,76331,76333,76335,76337,76340,76342,76344,76347,76349],{"class":69,"line":76320},255,[67,76322,76323],{"class":73},"        unameId: arr.",[67,76325,53733],{"class":77},[67,76327,75574],{"class":84},[67,76329,76330],{"class":73}," arr[arr.",[67,76332,53733],{"class":77},[67,76334,54035],{"class":84},[67,76336,906],{"class":77},[67,76338,76339],{"class":73},"].unameId ",[67,76341,2471],{"class":84},[67,76343,906],{"class":77},[67,76345,76346],{"class":84}," :",[67,76348,906],{"class":77},[67,76350,33238],{"class":73},[67,76352,76354],{"class":69,"line":76353},256,[67,76355,71753],{"class":73},[67,76357,76359],{"class":69,"line":76358},257,[67,76360,71758],{"class":73},[67,76362,76364],{"class":69,"line":76363},258,[67,76365,71768],{"class":73},[67,76367,76369],{"class":69,"line":76368},259,[67,76370,71763],{"class":73},[67,76372,76374],{"class":69,"line":76373},260,[67,76375,76376],{"class":73},"        city: city.value,\n",[67,76378,76380],{"class":69,"line":76379},261,[67,76381,76382],{"class":2058},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[67,76384,76386],{"class":69,"line":76385},262,[67,76387,76388],{"class":2058},"        \u002F\u002F time: new Date().toDateString()\n",[67,76390,76392,76395,76398],{"class":69,"line":76391},263,[67,76393,76394],{"class":73},"        time: ",[67,76396,76397],{"class":110},"getTime",[67,76399,3809],{"class":73},[67,76401,76403],{"class":69,"line":76402},264,[67,76404,66575],{"class":73},[67,76406,76408],{"class":69,"line":76407},265,[67,76409,76410],{"class":2058},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[67,76412,76414,76416],{"class":69,"line":76413},266,[67,76415,71828],{"class":110},[67,76417,3809],{"class":73},[67,76419,76421,76423,76425,76427,76429],{"class":69,"line":76420},267,[67,76422,71811],{"class":77},[67,76424,2547],{"class":73},[67,76426,71816],{"class":110},[67,76428,14849],{"class":73},[67,76430,76431],{"class":2058},"\u002F\u002F重置表单\n",[67,76433,76435],{"class":69,"line":76434},268,[67,76436,76437],{"class":2058},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[67,76439,76441,76444,76446,76448,76451,76453,76455,76457,76459],{"class":69,"line":76440},269,[67,76442,76443],{"class":73},"      localStorage.",[67,76445,73414],{"class":110},[67,76447,854],{"class":73},[67,76449,76450],{"class":114},"'data'",[67,76452,1868],{"class":73},[67,76454,73424],{"class":77},[67,76456,2547],{"class":73},[67,76458,73429],{"class":110},[67,76460,76461],{"class":73},"(arr))\n",[67,76463,76465],{"class":69,"line":76464},270,[67,76466,35230],{"class":73},[67,76468,76470],{"class":69,"line":76469},271,[67,76471,631],{"emptyLinePlaceholder":630},[67,76473,76475],{"class":69,"line":76474},272,[67,76476,76477],{"class":2058},"    \u002F\u002F 3.删除业务\n",[67,76479,76481],{"class":69,"line":76480},273,[67,76482,76483],{"class":2058},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[67,76485,76487,76489,76491,76493,76495,76497,76499,76501,76503],{"class":69,"line":76486},274,[67,76488,72101],{"class":73},[67,76490,59574],{"class":110},[67,76492,854],{"class":73},[67,76494,59579],{"class":114},[67,76496,1868],{"class":73},[67,76498,56210],{"class":84},[67,76500,3505],{"class":73},[67,76502,2074],{"class":7033},[67,76504,14241],{"class":73},[67,76506,76508],{"class":69,"line":76507},275,[67,76509,76510],{"class":2058},"      \u002F\u002F 判断是否点击的是删除按钮\n",[67,76512,76514,76516,76518,76520,76522],{"class":69,"line":76513},276,[67,76515,56241],{"class":84},[67,76517,68794],{"class":73},[67,76519,56247],{"class":84},[67,76521,70016],{"class":114},[67,76523,14241],{"class":73},[67,76525,76527],{"class":69,"line":76526},277,[67,76528,76529],{"class":2058},"        \u002F\u002F alert(1)\n",[67,76531,76533],{"class":69,"line":76532},278,[67,76534,76535],{"class":2058},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[67,76537,76539],{"class":69,"line":76538},279,[67,76540,76541],{"class":2058},"        \u002F\u002F console.log(e.target)\n",[67,76543,76545],{"class":69,"line":76544},280,[67,76546,76547],{"class":2058},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[67,76549,76551],{"class":69,"line":76550},281,[67,76552,631],{"emptyLinePlaceholder":630},[67,76554,76556],{"class":69,"line":76555},282,[67,76557,76558],{"class":2058},"        \u002F\u002F 确认框，确然是否真的要删除\n",[67,76560,76562],{"class":69,"line":76561},283,[67,76563,76564],{"class":2058},"        \u002F\u002F confirm()为确认框\n",[67,76566,76568],{"class":69,"line":76567},284,[67,76569,76570],{"class":2058},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[67,76572,76574,76576,76578,76581,76583,76586],{"class":69,"line":76573},285,[67,76575,4329],{"class":84},[67,76577,3505],{"class":73},[67,76579,76580],{"class":110},"confirm",[67,76582,854],{"class":73},[67,76584,76585],{"class":114},"'您确定要删除这条数据吗？'",[67,76587,76588],{"class":73},")) {\n",[67,76590,76592,76595,76597,76599,76601],{"class":69,"line":76591},286,[67,76593,76594],{"class":73},"          arr.",[67,76596,59771],{"class":110},[67,76598,72154],{"class":73},[67,76600,2209],{"class":77},[67,76602,829],{"class":73},[67,76604,76606],{"class":69,"line":76605},287,[67,76607,76608],{"class":2058},"          \u002F\u002F 3.4 重新渲染页面\n",[67,76610,76612,76615],{"class":69,"line":76611},288,[67,76613,76614],{"class":110},"          render",[67,76616,3809],{"class":73},[67,76618,76620],{"class":69,"line":76619},289,[67,76621,76622],{"class":2058},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[67,76624,76626,76629,76631,76633,76635,76637,76639,76641,76643],{"class":69,"line":76625},290,[67,76627,76628],{"class":73},"          localStorage.",[67,76630,73414],{"class":110},[67,76632,854],{"class":73},[67,76634,76450],{"class":114},[67,76636,1868],{"class":73},[67,76638,73424],{"class":77},[67,76640,2547],{"class":73},[67,76642,73429],{"class":110},[67,76644,76461],{"class":73},[67,76646,76648],{"class":69,"line":76647},291,[67,76649,4361],{"class":73},[67,76651,76653],{"class":69,"line":76652},292,[67,76654,54162],{"class":73},[67,76656,76658],{"class":69,"line":76657},293,[67,76659,631],{"emptyLinePlaceholder":630},[67,76661,76663],{"class":69,"line":76662},294,[67,76664,35230],{"class":73},[67,76666,76668],{"class":69,"line":76667},295,[67,76669,631],{"emptyLinePlaceholder":630},[67,76671,76673,76675,76677],{"class":69,"line":76672},296,[67,76674,54181],{"class":73},[67,76676,53578],{"class":262},[67,76678,323],{"class":73},[67,76680,76682,76684,76686],{"class":69,"line":76681},297,[67,76683,376],{"class":73},[67,76685,53565],{"class":262},[67,76687,323],{"class":73},[67,76689,76691],{"class":69,"line":76690},298,[67,76692,631],{"emptyLinePlaceholder":630},[67,76694,76696,76698,76700],{"class":69,"line":76695},299,[67,76697,376],{"class":73},[67,76699,52403],{"class":262},[67,76701,323],{"class":73},[14,76703,76705],{"id":76704},"_36-正则表达式","3.6 正则表达式",[19,76707,76708],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76710,76711],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76713,76714],{},"正则表达式的作用：",[2994,76716,76717,76724,76730],{},[29,76718,76719,76720,76723],{},"表单验证（ ",[2144,76721,76722],{},"匹配"," ）",[29,76725,76726,76727,76723],{},"过滤敏感词（ ",[2144,76728,76729],{},"替换",[29,76731,76732,76733,76723],{},"字符串中提取我们想要的部分（ ",[2144,76734,76735],{},"提取",[391,76737,76739],{"id":76738},"_361-语法","3.6.1 语法",[19,76741,76742],{},"正则表达式使用步骤：",[26,76744,76745,76748],{},[29,76746,76747],{},"定义规则",[29,76749,76750],{},"查找是否匹配",[19,76752,76753],{},"正则表达式里边不需要写引号",[19,76755,76756],{},[3317,76757],{"alt":63,"src":76758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76760,76761],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76763,76764],{},"reg.test(str)",[19,76766,76767],{},[3317,76768],{"alt":63,"src":76769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76771,76772],{},[3317,76773],{"alt":63,"src":76774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[391,76776,76778],{"id":76777},"_362-元字符","3.6.2 元字符",[26,76780,76781,76784,76787,76790,76797],{},[29,76782,76783],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[29,76785,76786],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[29,76788,76789],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[29,76791,76792,76793],{},"正则验证工具：",[2230,76794,76795],{"href":76795,"rel":76796},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25657],[29,76798,76799],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23794,76801,76803],{"id":76802},"_3621-边界符","3.6.2.1 边界符",[19,76805,76806],{},[3317,76807],{"alt":63,"src":76808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76810,76811],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76813,76814],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76816,76817],{},"只匹配一次",[19,76819,76820],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23794,76822,76824],{"id":76823},"_3622-量词","3.6.2.2 量词",[19,76826,76827],{},[3317,76828],{"alt":63,"src":76829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76831,76832],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23794,76834,76836],{"id":76835},"_3623-元字符","3.6.2.3 元字符",[19,76838,76839],{},[3317,76840],{"alt":63,"src":76841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76843,76844],{},"匹配的是a或b或c []只选一个",[19,76846,76847],{},[3317,76848],{"alt":63,"src":76849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76851,76852],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76854,76855],{},[3317,76856],{"alt":63,"src":76857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76859,76860],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76862,76863],{},[3317,76864],{"alt":63,"src":76865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[58,76867,76869],{"className":52401,"code":76868,"language":52403,"meta":63,"style":63},"\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",[32,76870,76871,76881,76895,76899,76907,76921,76941,76953,76961,76965,76973,76981,76986,77017,77044,77072,77076,77081,77109,77140,77145,77150,77181,77213,77245,77249,77254,77285,77315,77345,77349,77354,77385,77416,77446,77476,77480,77485,77518,77522,77527,77558,77589,77593,77598,77629,77659,77690,77694,77699,77731,77762,77793,77820,77851,77883,77916,77947,77978,78010,78041,78049,78057,78061],{"__ignoreMap":63},[67,76872,76873,76875,76877,76879],{"class":69,"line":70},[67,76874,53065],{"class":73},[67,76876,53068],{"class":262},[67,76878,53071],{"class":110},[67,76880,323],{"class":73},[67,76882,76883,76885,76887,76889,76891,76893],{"class":69,"line":191},[67,76884,259],{"class":73},[67,76886,52403],{"class":262},[67,76888,53082],{"class":110},[67,76890,85],{"class":73},[67,76892,53087],{"class":114},[67,76894,323],{"class":73},[67,76896,76897],{"class":69,"line":202},[67,76898,631],{"emptyLinePlaceholder":630},[67,76900,76901,76903,76905],{"class":69,"line":641},[67,76902,259],{"class":73},[67,76904,53100],{"class":262},[67,76906,323],{"class":73},[67,76908,76909,76911,76913,76915,76917,76919],{"class":69,"line":655},[67,76910,328],{"class":73},[67,76912,53110],{"class":262},[67,76914,53113],{"class":110},[67,76916,85],{"class":73},[67,76918,53118],{"class":114},[67,76920,323],{"class":73},[67,76922,76923,76925,76927,76929,76931,76933,76935,76937,76939],{"class":69,"line":660},[67,76924,328],{"class":73},[67,76926,53110],{"class":262},[67,76928,266],{"class":110},[67,76930,85],{"class":73},[67,76932,53157],{"class":114},[67,76934,53137],{"class":110},[67,76936,85],{"class":73},[67,76938,53164],{"class":114},[67,76940,323],{"class":73},[67,76942,76943,76945,76947,76949,76951],{"class":69,"line":665},[67,76944,328],{"class":73},[67,76946,53173],{"class":262},[67,76948,53176],{"class":73},[67,76950,53173],{"class":262},[67,76952,323],{"class":73},[67,76954,76955,76957,76959],{"class":69,"line":677},[67,76956,376],{"class":73},[67,76958,53100],{"class":262},[67,76960,323],{"class":73},[67,76962,76963],{"class":69,"line":683},[67,76964,631],{"emptyLinePlaceholder":630},[67,76966,76967,76969,76971],{"class":69,"line":689},[67,76968,259],{"class":73},[67,76970,53565],{"class":262},[67,76972,323],{"class":73},[67,76974,76975,76977,76979],{"class":69,"line":694},[67,76976,328],{"class":73},[67,76978,53578],{"class":262},[67,76980,323],{"class":73},[67,76982,76983],{"class":69,"line":700},[67,76984,76985],{"class":2058},"    \u002F\u002F 元字符中\n",[67,76987,76988,76990,76992,76994,76996,76999,77001,77003,77006,77008,77011,77014],{"class":69,"line":706},[67,76989,75513],{"class":73},[67,76991,60008],{"class":110},[67,76993,854],{"class":73},[67,76995,2573],{"class":114},[67,76997,76998],{"class":49745},"哈",[67,77000,2573],{"class":114},[67,77002,2547],{"class":73},[67,77004,77005],{"class":110},"test",[67,77007,854],{"class":73},[67,77009,77010],{"class":114},"'哈'",[67,77012,77013],{"class":73},"))  ",[67,77015,77016],{"class":2058},"\u002F\u002Ftrue\n",[67,77018,77019,77021,77023,77025,77027,77029,77031,77033,77035,77037,77040,77042],{"class":69,"line":712},[67,77020,75513],{"class":73},[67,77022,60008],{"class":110},[67,77024,854],{"class":73},[67,77026,2573],{"class":114},[67,77028,76998],{"class":49745},[67,77030,2573],{"class":114},[67,77032,2547],{"class":73},[67,77034,77005],{"class":110},[67,77036,854],{"class":73},[67,77038,77039],{"class":114},"'哈哈'",[67,77041,77013],{"class":73},[67,77043,77016],{"class":2058},[67,77045,77046,77048,77050,77052,77054,77056,77058,77060,77062,77064,77067,77070],{"class":69,"line":717},[67,77047,75513],{"class":73},[67,77049,60008],{"class":110},[67,77051,854],{"class":73},[67,77053,2573],{"class":114},[67,77055,76998],{"class":49745},[67,77057,2573],{"class":114},[67,77059,2547],{"class":73},[67,77061,77005],{"class":110},[67,77063,854],{"class":73},[67,77065,77066],{"class":114},"'二哈'",[67,77068,77069],{"class":73},"))   ",[67,77071,77016],{"class":2058},[67,77073,77074],{"class":69,"line":723},[67,77075,631],{"emptyLinePlaceholder":630},[67,77077,77078],{"class":69,"line":729},[67,77079,77080],{"class":2058},"    \u002F\u002F 1.边界符\n",[67,77082,77083,77085,77087,77089,77091,77093,77095,77097,77099,77101,77103,77105,77107],{"class":69,"line":735},[67,77084,75513],{"class":73},[67,77086,60008],{"class":110},[67,77088,854],{"class":73},[67,77090,2573],{"class":114},[67,77092,2954],{"class":84},[67,77094,76998],{"class":49745},[67,77096,2573],{"class":114},[67,77098,2547],{"class":73},[67,77100,77005],{"class":110},[67,77102,854],{"class":73},[67,77104,77010],{"class":114},[67,77106,77013],{"class":73},[67,77108,77016],{"class":2058},[67,77110,77111,77113,77115,77117,77119,77121,77123,77125,77127,77129,77131,77133,77135,77137],{"class":69,"line":741},[67,77112,75513],{"class":73},[67,77114,60008],{"class":110},[67,77116,854],{"class":73},[67,77118,2573],{"class":114},[67,77120,2954],{"class":84},[67,77122,76998],{"class":49745},[67,77124,2293],{"class":84},[67,77126,2573],{"class":114},[67,77128,2547],{"class":73},[67,77130,77005],{"class":110},[67,77132,854],{"class":73},[67,77134,77039],{"class":114},[67,77136,77013],{"class":73},[67,77138,77139],{"class":2058},"\u002F\u002Ffalse\n",[67,77141,77142],{"class":69,"line":747},[67,77143,77144],{"class":2058},"    \u002F\u002F 2.量词\n",[67,77146,77147],{"class":69,"line":753},[67,77148,77149],{"class":2058},"    \u002F\u002F 量词 * 类似于 >= 0\n",[67,77151,77152,77154,77156,77158,77160,77162,77164,77167,77169,77171,77173,77175,77177,77179],{"class":69,"line":758},[67,77153,75513],{"class":73},[67,77155,60008],{"class":110},[67,77157,854],{"class":73},[67,77159,2573],{"class":114},[67,77161,2954],{"class":84},[67,77163,76998],{"class":49745},[67,77165,77166],{"class":84},"*$",[67,77168,2573],{"class":114},[67,77170,2547],{"class":73},[67,77172,77005],{"class":110},[67,77174,854],{"class":73},[67,77176,77039],{"class":114},[67,77178,77013],{"class":73},[67,77180,77016],{"class":2058},[67,77182,77183,77185,77187,77189,77191,77193,77195,77197,77199,77201,77203,77205,77208,77210],{"class":69,"line":764},[67,77184,75513],{"class":73},[67,77186,60008],{"class":110},[67,77188,854],{"class":73},[67,77190,2573],{"class":114},[67,77192,2954],{"class":84},[67,77194,76998],{"class":49745},[67,77196,77166],{"class":84},[67,77198,2573],{"class":114},[67,77200,2547],{"class":73},[67,77202,77005],{"class":110},[67,77204,854],{"class":73},[67,77206,77207],{"class":114},"'二哈好傻'",[67,77209,77013],{"class":73},[67,77211,77212],{"class":2058},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[67,77214,77215,77217,77219,77221,77223,77225,77227,77229,77231,77233,77235,77237,77240,77242],{"class":69,"line":770},[67,77216,75513],{"class":73},[67,77218,60008],{"class":110},[67,77220,854],{"class":73},[67,77222,2573],{"class":114},[67,77224,2954],{"class":84},[67,77226,76998],{"class":49745},[67,77228,77166],{"class":84},[67,77230,2573],{"class":114},[67,77232,2547],{"class":73},[67,77234,77005],{"class":110},[67,77236,854],{"class":73},[67,77238,77239],{"class":114},"'哈好哈'",[67,77241,77069],{"class":73},[67,77243,77244],{"class":2058},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[67,77246,77247],{"class":69,"line":776},[67,77248,631],{"emptyLinePlaceholder":630},[67,77250,77251],{"class":69,"line":782},[67,77252,77253],{"class":2058},"    \u002F\u002F +类似于>=1\n",[67,77255,77256,77258,77260,77262,77264,77266,77268,77271,77273,77275,77277,77279,77281,77283],{"class":69,"line":788},[67,77257,75513],{"class":73},[67,77259,60008],{"class":110},[67,77261,854],{"class":73},[67,77263,2573],{"class":114},[67,77265,2954],{"class":84},[67,77267,76998],{"class":49745},[67,77269,77270],{"class":84},"+$",[67,77272,2573],{"class":114},[67,77274,2547],{"class":73},[67,77276,77005],{"class":110},[67,77278,854],{"class":73},[67,77280,77039],{"class":114},[67,77282,77013],{"class":73},[67,77284,77016],{"class":2058},[67,77286,77287,77289,77291,77293,77295,77297,77299,77301,77303,77305,77307,77309,77311,77313],{"class":69,"line":793},[67,77288,75513],{"class":73},[67,77290,60008],{"class":110},[67,77292,854],{"class":73},[67,77294,2573],{"class":114},[67,77296,2954],{"class":84},[67,77298,76998],{"class":49745},[67,77300,77270],{"class":84},[67,77302,2573],{"class":114},[67,77304,2547],{"class":73},[67,77306,77005],{"class":110},[67,77308,854],{"class":73},[67,77310,77207],{"class":114},[67,77312,77013],{"class":73},[67,77314,77212],{"class":2058},[67,77316,77317,77319,77321,77323,77325,77327,77329,77331,77333,77335,77337,77339,77341,77343],{"class":69,"line":798},[67,77318,75513],{"class":73},[67,77320,60008],{"class":110},[67,77322,854],{"class":73},[67,77324,2573],{"class":114},[67,77326,2954],{"class":84},[67,77328,76998],{"class":49745},[67,77330,77270],{"class":84},[67,77332,2573],{"class":114},[67,77334,2547],{"class":73},[67,77336,77005],{"class":110},[67,77338,854],{"class":73},[67,77340,77239],{"class":114},[67,77342,77069],{"class":73},[67,77344,77139],{"class":2058},[67,77346,77347],{"class":69,"line":816},[67,77348,631],{"emptyLinePlaceholder":630},[67,77350,77351],{"class":69,"line":832},[67,77352,77353],{"class":2058},"    \u002F\u002F ?类似于0次或一次\n",[67,77355,77356,77358,77360,77362,77364,77366,77369,77371,77373,77375,77377,77379,77381,77383],{"class":69,"line":843},[67,77357,75513],{"class":73},[67,77359,60008],{"class":110},[67,77361,854],{"class":73},[67,77363,2573],{"class":114},[67,77365,2954],{"class":84},[67,77367,77368],{"class":49745},"哈？",[67,77370,2293],{"class":84},[67,77372,2573],{"class":114},[67,77374,2547],{"class":73},[67,77376,77005],{"class":110},[67,77378,854],{"class":73},[67,77380,75988],{"class":114},[67,77382,77069],{"class":73},[67,77384,77016],{"class":2058},[67,77386,77387,77389,77391,77393,77395,77397,77399,77402,77404,77406,77408,77410,77412,77414],{"class":69,"line":848},[67,77388,75513],{"class":73},[67,77390,60008],{"class":110},[67,77392,854],{"class":73},[67,77394,2573],{"class":114},[67,77396,2954],{"class":84},[67,77398,76998],{"class":49745},[67,77400,77401],{"class":84},"?$",[67,77403,2573],{"class":114},[67,77405,2547],{"class":73},[67,77407,77005],{"class":110},[67,77409,854],{"class":73},[67,77411,77039],{"class":114},[67,77413,77013],{"class":73},[67,77415,77139],{"class":2058},[67,77417,77418,77420,77422,77424,77426,77428,77430,77432,77434,77436,77438,77440,77442,77444],{"class":69,"line":863},[67,77419,75513],{"class":73},[67,77421,60008],{"class":110},[67,77423,854],{"class":73},[67,77425,2573],{"class":114},[67,77427,2954],{"class":84},[67,77429,76998],{"class":49745},[67,77431,77401],{"class":84},[67,77433,2573],{"class":114},[67,77435,2547],{"class":73},[67,77437,77005],{"class":110},[67,77439,854],{"class":73},[67,77441,77207],{"class":114},[67,77443,77013],{"class":73},[67,77445,77212],{"class":2058},[67,77447,77448,77450,77452,77454,77456,77458,77460,77462,77464,77466,77468,77470,77472,77474],{"class":69,"line":876},[67,77449,75513],{"class":73},[67,77451,60008],{"class":110},[67,77453,854],{"class":73},[67,77455,2573],{"class":114},[67,77457,2954],{"class":84},[67,77459,76998],{"class":49745},[67,77461,77401],{"class":84},[67,77463,2573],{"class":114},[67,77465,2547],{"class":73},[67,77467,77005],{"class":110},[67,77469,854],{"class":73},[67,77471,77239],{"class":114},[67,77473,77013],{"class":73},[67,77475,77139],{"class":2058},[67,77477,77478],{"class":69,"line":889},[67,77479,631],{"emptyLinePlaceholder":630},[67,77481,77482],{"class":69,"line":894},[67,77483,77484],{"class":2058},"    \u002F\u002F {n}写几，就必须出现几次\n",[67,77486,77487,77489,77491,77493,77495,77497,77499,77502,77504,77506,77508,77510,77513,77516],{"class":69,"line":911},[67,77488,75513],{"class":73},[67,77490,60008],{"class":110},[67,77492,854],{"class":73},[67,77494,2573],{"class":114},[67,77496,2954],{"class":84},[67,77498,76998],{"class":49745},[67,77500,77501],{"class":84},"{4}$",[67,77503,2573],{"class":114},[67,77505,2547],{"class":73},[67,77507,77005],{"class":110},[67,77509,854],{"class":73},[67,77511,77512],{"class":114},"'哈哈哈哈'",[67,77514,77515],{"class":73},")) ",[67,77517,77016],{"class":2058},[67,77519,77520],{"class":69,"line":927},[67,77521,631],{"emptyLinePlaceholder":630},[67,77523,77524],{"class":69,"line":932},[67,77525,77526],{"class":2058},"    \u002F\u002F {n,}大于等于n次\n",[67,77528,77529,77531,77533,77535,77537,77539,77541,77544,77546,77548,77550,77552,77554,77556],{"class":69,"line":955},[67,77530,75513],{"class":73},[67,77532,60008],{"class":110},[67,77534,854],{"class":73},[67,77536,2573],{"class":114},[67,77538,2954],{"class":84},[67,77540,76998],{"class":49745},[67,77542,77543],{"class":84},"{4,}$",[67,77545,2573],{"class":114},[67,77547,2547],{"class":73},[67,77549,77005],{"class":110},[67,77551,854],{"class":73},[67,77553,77512],{"class":114},[67,77555,77515],{"class":73},[67,77557,77016],{"class":2058},[67,77559,77560,77562,77564,77566,77568,77570,77572,77574,77576,77578,77580,77582,77585,77587],{"class":69,"line":971},[67,77561,75513],{"class":73},[67,77563,60008],{"class":110},[67,77565,854],{"class":73},[67,77567,2573],{"class":114},[67,77569,2954],{"class":84},[67,77571,76998],{"class":49745},[67,77573,77543],{"class":84},[67,77575,2573],{"class":114},[67,77577,2547],{"class":73},[67,77579,77005],{"class":110},[67,77581,854],{"class":73},[67,77583,77584],{"class":114},"'哈哈哈哈哈'",[67,77586,77515],{"class":73},[67,77588,77016],{"class":2058},[67,77590,77591],{"class":69,"line":1010},[67,77592,631],{"emptyLinePlaceholder":630},[67,77594,77595],{"class":69,"line":1016},[67,77596,77597],{"class":2058},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[67,77599,77600,77602,77604,77606,77608,77610,77612,77615,77617,77619,77621,77623,77625,77627],{"class":69,"line":1021},[67,77601,75513],{"class":73},[67,77603,60008],{"class":110},[67,77605,854],{"class":73},[67,77607,2573],{"class":114},[67,77609,2954],{"class":84},[67,77611,76998],{"class":49745},[67,77613,77614],{"class":84},"{4,6}$",[67,77616,2573],{"class":114},[67,77618,2547],{"class":73},[67,77620,77005],{"class":110},[67,77622,854],{"class":73},[67,77624,77512],{"class":114},[67,77626,77515],{"class":73},[67,77628,77016],{"class":2058},[67,77630,77631,77633,77635,77637,77639,77641,77643,77645,77647,77649,77651,77653,77655,77657],{"class":69,"line":1034},[67,77632,75513],{"class":73},[67,77634,60008],{"class":110},[67,77636,854],{"class":73},[67,77638,2573],{"class":114},[67,77640,2954],{"class":84},[67,77642,76998],{"class":49745},[67,77644,77614],{"class":84},[67,77646,2573],{"class":114},[67,77648,2547],{"class":73},[67,77650,77005],{"class":110},[67,77652,854],{"class":73},[67,77654,77584],{"class":114},[67,77656,77515],{"class":73},[67,77658,77016],{"class":2058},[67,77660,77661,77663,77665,77667,77669,77671,77673,77675,77677,77679,77681,77683,77686,77688],{"class":69,"line":1053},[67,77662,75513],{"class":73},[67,77664,60008],{"class":110},[67,77666,854],{"class":73},[67,77668,2573],{"class":114},[67,77670,2954],{"class":84},[67,77672,76998],{"class":49745},[67,77674,77614],{"class":84},[67,77676,2573],{"class":114},[67,77678,2547],{"class":73},[67,77680,77005],{"class":110},[67,77682,854],{"class":73},[67,77684,77685],{"class":114},"'哈哈哈哈哈哈哈'",[67,77687,77515],{"class":73},[67,77689,77139],{"class":2058},[67,77691,77692],{"class":69,"line":1070},[67,77693,631],{"emptyLinePlaceholder":630},[67,77695,77696],{"class":69,"line":1083},[67,77697,77698],{"class":2058},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[67,77700,77701,77703,77705,77707,77709,77711,77714,77716,77718,77720,77722,77724,77727,77729],{"class":69,"line":1088},[67,77702,75513],{"class":73},[67,77704,60008],{"class":110},[67,77706,854],{"class":73},[67,77708,2573],{"class":114},[67,77710,2954],{"class":84},[67,77712,77713],{"class":77},"[abc]",[67,77715,2293],{"class":84},[67,77717,2573],{"class":114},[67,77719,2547],{"class":73},[67,77721,77005],{"class":110},[67,77723,854],{"class":73},[67,77725,77726],{"class":114},"'a'",[67,77728,77013],{"class":73},[67,77730,77016],{"class":2058},[67,77732,77733,77735,77737,77739,77741,77743,77745,77747,77749,77751,77753,77755,77758,77760],{"class":69,"line":1093},[67,77734,75513],{"class":73},[67,77736,60008],{"class":110},[67,77738,854],{"class":73},[67,77740,2573],{"class":114},[67,77742,2954],{"class":84},[67,77744,77713],{"class":77},[67,77746,2293],{"class":84},[67,77748,2573],{"class":114},[67,77750,2547],{"class":73},[67,77752,77005],{"class":110},[67,77754,854],{"class":73},[67,77756,77757],{"class":114},"'b'",[67,77759,77013],{"class":73},[67,77761,77016],{"class":2058},[67,77763,77764,77766,77768,77770,77772,77774,77776,77778,77780,77782,77784,77786,77789,77791],{"class":69,"line":1110},[67,77765,75513],{"class":73},[67,77767,60008],{"class":110},[67,77769,854],{"class":73},[67,77771,2573],{"class":114},[67,77773,2954],{"class":84},[67,77775,77713],{"class":77},[67,77777,2293],{"class":84},[67,77779,2573],{"class":114},[67,77781,2547],{"class":73},[67,77783,77005],{"class":110},[67,77785,854],{"class":73},[67,77787,77788],{"class":114},"'c'",[67,77790,77013],{"class":73},[67,77792,77016],{"class":2058},[67,77794,77795,77797,77799,77801,77803,77805,77807,77809,77811,77813,77816,77818],{"class":69,"line":11603},[67,77796,75513],{"class":73},[67,77798,60008],{"class":110},[67,77800,854],{"class":73},[67,77802,2573],{"class":114},[67,77804,77713],{"class":77},[67,77806,2573],{"class":114},[67,77808,2547],{"class":73},[67,77810,77005],{"class":110},[67,77812,854],{"class":73},[67,77814,77815],{"class":114},"'ab'",[67,77817,77013],{"class":73},[67,77819,77016],{"class":2058},[67,77821,77822,77824,77826,77828,77830,77832,77834,77836,77838,77840,77842,77844,77846,77848],{"class":69,"line":11612},[67,77823,75513],{"class":73},[67,77825,60008],{"class":110},[67,77827,854],{"class":73},[67,77829,2573],{"class":114},[67,77831,2954],{"class":84},[67,77833,77713],{"class":77},[67,77835,2293],{"class":84},[67,77837,2573],{"class":114},[67,77839,2547],{"class":73},[67,77841,77005],{"class":110},[67,77843,854],{"class":73},[67,77845,77815],{"class":114},[67,77847,77013],{"class":73},[67,77849,77850],{"class":2058},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[67,77852,77853,77855,77857,77859,77861,77863,77865,77868,77870,77872,77874,77876,77878,77880],{"class":69,"line":11617},[67,77854,75513],{"class":73},[67,77856,60008],{"class":110},[67,77858,854],{"class":73},[67,77860,2573],{"class":114},[67,77862,2954],{"class":84},[67,77864,77713],{"class":77},[67,77866,77867],{"class":84},"{2}$",[67,77869,2573],{"class":114},[67,77871,2547],{"class":73},[67,77873,77005],{"class":110},[67,77875,854],{"class":73},[67,77877,77815],{"class":114},[67,77879,77013],{"class":73},[67,77881,77882],{"class":2058},"\u002F\u002Ftrue   可以选两个\n",[67,77884,77885,77887,77889,77891,77893,77895,77898,77900,77902,77904,77906,77908,77911,77913],{"class":69,"line":11623},[67,77886,75513],{"class":73},[67,77888,60008],{"class":110},[67,77890,854],{"class":73},[67,77892,2573],{"class":114},[67,77894,2954],{"class":84},[67,77896,77897],{"class":77},"[a-z]",[67,77899,2293],{"class":84},[67,77901,2573],{"class":114},[67,77903,2547],{"class":73},[67,77905,77005],{"class":110},[67,77907,854],{"class":73},[67,77909,77910],{"class":114},"'p'",[67,77912,77069],{"class":73},[67,77914,77915],{"class":2058},"\u002F\u002Ftrue   依然只能选一个\n",[67,77917,77918,77920,77922,77924,77926,77928,77931,77933,77935,77937,77939,77941,77943,77945],{"class":69,"line":11644},[67,77919,75513],{"class":73},[67,77921,60008],{"class":110},[67,77923,854],{"class":73},[67,77925,2573],{"class":114},[67,77927,2954],{"class":84},[67,77929,77930],{"class":77},"[A-Z]",[67,77932,2293],{"class":84},[67,77934,2573],{"class":114},[67,77936,2547],{"class":73},[67,77938,77005],{"class":110},[67,77940,854],{"class":73},[67,77942,77910],{"class":114},[67,77944,77069],{"class":73},[67,77946,77139],{"class":2058},[67,77948,77949,77951,77953,77955,77957,77959,77961,77963,77965,77967,77969,77971,77974,77976],{"class":69,"line":11650},[67,77950,75513],{"class":73},[67,77952,60008],{"class":110},[67,77954,854],{"class":73},[67,77956,2573],{"class":114},[67,77958,2954],{"class":84},[67,77960,77930],{"class":77},[67,77962,2293],{"class":84},[67,77964,2573],{"class":114},[67,77966,2547],{"class":73},[67,77968,77005],{"class":110},[67,77970,854],{"class":73},[67,77972,77973],{"class":114},"'P'",[67,77975,77069],{"class":73},[67,77977,77016],{"class":2058},[67,77979,77980,77982,77984,77986,77988,77990,77993,77995,77997,77999,78001,78003,78006,78008],{"class":69,"line":11664},[67,77981,75513],{"class":73},[67,77983,60008],{"class":110},[67,77985,854],{"class":73},[67,77987,2573],{"class":114},[67,77989,2954],{"class":84},[67,77991,77992],{"class":77},"[0-9]",[67,77994,2293],{"class":84},[67,77996,2573],{"class":114},[67,77998,2547],{"class":73},[67,78000,77005],{"class":110},[67,78002,854],{"class":73},[67,78004,78005],{"class":114},"'0'",[67,78007,77069],{"class":73},[67,78009,77016],{"class":2058},[67,78011,78012,78014,78016,78018,78020,78022,78025,78027,78029,78031,78033,78035,78037,78039],{"class":69,"line":11670},[67,78013,75513],{"class":73},[67,78015,60008],{"class":110},[67,78017,854],{"class":73},[67,78019,2573],{"class":114},[67,78021,2954],{"class":84},[67,78023,78024],{"class":77},"[a-zA-Z0-9]",[67,78026,2293],{"class":84},[67,78028,2573],{"class":114},[67,78030,2547],{"class":73},[67,78032,77005],{"class":110},[67,78034,854],{"class":73},[67,78036,77910],{"class":114},[67,78038,77013],{"class":73},[67,78040,77016],{"class":2058},[67,78042,78043,78045,78047],{"class":69,"line":11697},[67,78044,54181],{"class":73},[67,78046,53578],{"class":262},[67,78048,323],{"class":73},[67,78050,78051,78053,78055],{"class":69,"line":11706},[67,78052,376],{"class":73},[67,78054,53565],{"class":262},[67,78056,323],{"class":73},[67,78058,78059],{"class":69,"line":11712},[67,78060,631],{"emptyLinePlaceholder":630},[67,78062,78063,78065,78067],{"class":69,"line":11720},[67,78064,376],{"class":73},[67,78066,52403],{"class":262},[67,78068,323],{"class":73},[23794,78070,78072],{"id":78071},"_3624-修饰符","3.6.2.4 修饰符",[19,78074,78075],{},[3317,78076],{"alt":63,"src":78077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78079,78080],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78082,78083],{},[3317,78084],{"alt":63,"src":78085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[58,78087,78089],{"className":52401,"code":78088,"language":52403,"meta":63,"style":63},"\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",[32,78090,78091,78101,78115,78123,78137,78157,78169,78177,78185,78193,78225,78256,78261,78293,78304,78337,78346,78354,78362],{"__ignoreMap":63},[67,78092,78093,78095,78097,78099],{"class":69,"line":70},[67,78094,53065],{"class":73},[67,78096,53068],{"class":262},[67,78098,53071],{"class":110},[67,78100,323],{"class":73},[67,78102,78103,78105,78107,78109,78111,78113],{"class":69,"line":191},[67,78104,259],{"class":73},[67,78106,52403],{"class":262},[67,78108,53082],{"class":110},[67,78110,85],{"class":73},[67,78112,53087],{"class":114},[67,78114,323],{"class":73},[67,78116,78117,78119,78121],{"class":69,"line":202},[67,78118,259],{"class":73},[67,78120,53100],{"class":262},[67,78122,323],{"class":73},[67,78124,78125,78127,78129,78131,78133,78135],{"class":69,"line":641},[67,78126,328],{"class":73},[67,78128,53110],{"class":262},[67,78130,53113],{"class":110},[67,78132,85],{"class":73},[67,78134,53118],{"class":114},[67,78136,323],{"class":73},[67,78138,78139,78141,78143,78145,78147,78149,78151,78153,78155],{"class":69,"line":655},[67,78140,328],{"class":73},[67,78142,53110],{"class":262},[67,78144,266],{"class":110},[67,78146,85],{"class":73},[67,78148,53157],{"class":114},[67,78150,53137],{"class":110},[67,78152,85],{"class":73},[67,78154,53164],{"class":114},[67,78156,323],{"class":73},[67,78158,78159,78161,78163,78165,78167],{"class":69,"line":660},[67,78160,328],{"class":73},[67,78162,53173],{"class":262},[67,78164,53176],{"class":73},[67,78166,53173],{"class":262},[67,78168,323],{"class":73},[67,78170,78171,78173,78175],{"class":69,"line":665},[67,78172,376],{"class":73},[67,78174,53100],{"class":262},[67,78176,323],{"class":73},[67,78178,78179,78181,78183],{"class":69,"line":677},[67,78180,259],{"class":73},[67,78182,53565],{"class":262},[67,78184,323],{"class":73},[67,78186,78187,78189,78191],{"class":69,"line":683},[67,78188,328],{"class":73},[67,78190,53578],{"class":262},[67,78192,323],{"class":73},[67,78194,78195,78197,78199,78201,78203,78205,78208,78210,78212,78214,78216,78218,78221,78223],{"class":69,"line":689},[67,78196,75513],{"class":73},[67,78198,60008],{"class":110},[67,78200,854],{"class":73},[67,78202,2573],{"class":114},[67,78204,2954],{"class":84},[67,78206,78207],{"class":49745},"java",[67,78209,2293],{"class":84},[67,78211,2573],{"class":114},[67,78213,2547],{"class":73},[67,78215,77005],{"class":110},[67,78217,854],{"class":73},[67,78219,78220],{"class":114},"'java'",[67,78222,77515],{"class":73},[67,78224,77016],{"class":2058},[67,78226,78227,78229,78231,78233,78235,78237,78239,78241,78243,78245,78247,78249,78252,78254],{"class":69,"line":694},[67,78228,75513],{"class":73},[67,78230,60008],{"class":110},[67,78232,854],{"class":73},[67,78234,2573],{"class":114},[67,78236,2954],{"class":84},[67,78238,78207],{"class":49745},[67,78240,2293],{"class":84},[67,78242,2573],{"class":114},[67,78244,2547],{"class":73},[67,78246,77005],{"class":110},[67,78248,854],{"class":73},[67,78250,78251],{"class":114},"'Java'",[67,78253,77515],{"class":73},[67,78255,77139],{"class":2058},[67,78257,78258],{"class":69,"line":700},[67,78259,78260],{"class":2058},"    \u002F\u002F 不区分大小写、\n",[67,78262,78263,78265,78267,78269,78271,78273,78275,78277,78279,78281,78283,78285,78287,78289,78291],{"class":69,"line":706},[67,78264,75513],{"class":73},[67,78266,60008],{"class":110},[67,78268,854],{"class":73},[67,78270,2573],{"class":114},[67,78272,2954],{"class":84},[67,78274,78207],{"class":49745},[67,78276,2293],{"class":84},[67,78278,2573],{"class":114},[67,78280,2432],{"class":84},[67,78282,2547],{"class":73},[67,78284,77005],{"class":110},[67,78286,854],{"class":73},[67,78288,78251],{"class":114},[67,78290,77515],{"class":73},[67,78292,77016],{"class":2058},[67,78294,78295,78297,78299,78301],{"class":69,"line":712},[67,78296,13021],{"class":84},[67,78298,75679],{"class":77},[67,78300,671],{"class":84},[67,78302,78303],{"class":114}," 'java是一门编程语言，学完java工资很高'\n",[67,78305,78306,78308,78311,78313,78316,78319,78321,78323,78325,78327,78330,78332,78335],{"class":69,"line":717},[67,78307,13021],{"class":84},[67,78309,78310],{"class":77}," result",[67,78312,671],{"class":84},[67,78314,78315],{"class":73}," str.",[67,78317,78318],{"class":110},"replace",[67,78320,854],{"class":73},[67,78322,2573],{"class":114},[67,78324,78207],{"class":49745},[67,78326,2573],{"class":114},[67,78328,78329],{"class":84},"ig",[67,78331,1868],{"class":73},[67,78333,78334],{"class":114},"'前端'",[67,78336,829],{"class":73},[67,78338,78339,78341,78343],{"class":69,"line":723},[67,78340,75513],{"class":73},[67,78342,60008],{"class":110},[67,78344,78345],{"class":73},"(result)\n",[67,78347,78348,78350,78352],{"class":69,"line":729},[67,78349,54181],{"class":73},[67,78351,53578],{"class":262},[67,78353,323],{"class":73},[67,78355,78356,78358,78360],{"class":69,"line":735},[67,78357,376],{"class":73},[67,78359,53565],{"class":262},[67,78361,323],{"class":73},[67,78363,78364,78366,78368],{"class":69,"line":741},[67,78365,376],{"class":73},[67,78367,52403],{"class":262},[67,78369,323],{"class":73},[1903,78371,78372],{},"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":63,"searchDepth":191,"depth":191,"links":78374},[78375,78385,78397,78414,78421,78429],{"id":55122,"depth":191,"text":55123,"children":78376},[78377,78378,78379,78380,78381,78382,78383,78384],{"id":55126,"depth":202,"text":55127},{"id":55159,"depth":202,"text":55160},{"id":55198,"depth":202,"text":55199},{"id":55356,"depth":202,"text":55357},{"id":55404,"depth":202,"text":55405},{"id":55541,"depth":202,"text":55542},{"id":55862,"depth":202,"text":55863},{"id":58850,"depth":202,"text":58851},{"id":58878,"depth":191,"text":58879,"children":78386},[78387,78388,78389,78390,78391,78392,78393,78394,78395,78396],{"id":58882,"depth":202,"text":58883},{"id":58905,"depth":202,"text":58906},{"id":59820,"depth":202,"text":59821},{"id":60510,"depth":202,"text":60511},{"id":60792,"depth":202,"text":60793},{"id":64952,"depth":202,"text":64953},{"id":65122,"depth":202,"text":65123},{"id":65250,"depth":202,"text":65251},{"id":65275,"depth":202,"text":65276},{"id":66664,"depth":202,"text":66665},{"id":67817,"depth":191,"text":67818,"children":78398},[78399,78400,78401,78402,78403,78404,78405,78406,78407,78408,78409,78410,78411,78412,78413],{"id":67821,"depth":202,"text":67822},{"id":68475,"depth":202,"text":68476},{"id":70170,"depth":202,"text":70171},{"id":70211,"depth":202,"text":70212},{"id":70253,"depth":202,"text":70254},{"id":70267,"depth":202,"text":70268},{"id":70316,"depth":202,"text":70317},{"id":70328,"depth":202,"text":70329},{"id":70343,"depth":202,"text":70344},{"id":70379,"depth":202,"text":70380},{"id":70460,"depth":202,"text":70461},{"id":70588,"depth":202,"text":70589},{"id":70600,"depth":202,"text":70601},{"id":70619,"depth":202,"text":70620},{"id":72730,"depth":202,"text":72731},{"id":72749,"depth":191,"text":72750,"children":78415},[78416,78417,78418,78419,78420],{"id":72770,"depth":202,"text":72771},{"id":72790,"depth":202,"text":72791},{"id":72839,"depth":202,"text":72840},{"id":72964,"depth":202,"text":72965},{"id":73145,"depth":202,"text":73146},{"id":73163,"depth":191,"text":73164,"children":78422},[78423,78424,78425,78426,78427,78428],{"id":73178,"depth":202,"text":73179},{"id":73237,"depth":202,"text":73238},{"id":73261,"depth":202,"text":73262},{"id":73581,"depth":202,"text":73582},{"id":73613,"depth":202,"text":73614},{"id":73636,"depth":202,"text":73637},{"id":76704,"depth":191,"text":76705,"children":78430},[78431,78432],{"id":76738,"depth":202,"text":76739},{"id":76777,"depth":202,"text":76778},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55094,"description":25173},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78439,"title":78440,"body":78441,"description":25173,"extension":1930,"meta":94577,"navigation":630,"path":94578,"seo":94579,"stem":94580,"__hash__":94581},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78442,"toc":94513},[78443,78446,78449,78453,78457,78462,78467,78478,78482,78487,78490,78494,78497,78502,78506,78510,78513,78518,78521,78525,78528,78536,78539,78543,78548,78553,78556,78560,78565,78570,78573,78577,78582,78585,78590,78593,78598,78601,78606,78611,78614,78617,78621,78626,78631,78634,78638,78642,78645,78648,78651,78655,78659,78664,78669,78672,78676,78681,78686,78689,78692,78695,78698,78701,78704,78707,78710,78713,78718,78722,78727,78732,78735,78738,78741,78744,78747,78750,78753,78756,78760,78764,78767,78770,78773,78778,78780,78783,78786,78789,78792,78795,78798,78801,78804,78807,78810,78813,78816,78819,78824,78829,78834,78837,78841,78844,78849,78853,78855,78866,78871,78972,78975,78978,78981,78984,78987,78990,78993,78996,78998,79001,79004,79007,79010,79013,79015,79018,79021,79024,79027,79030,79033,79035,79038,79040,79042,79045,79049,79053,79056,79059,79062,79065,79068,79071,79074,79077,79080,79085,79205,79208,79211,79216,79219,79222,79225,79228,79233,79236,79239,79242,79245,79250,79253,79353,79418,79492,79496,79499,79502,79506,79509,79523,79552,79555,79558,79561,79564,79567,79570,79573,79575,79578,79581,79584,79587,79591,79596,79600,79605,79680,79683,79866,79869,79872,79875,79878,79881,79883,79886,79889,79892,79895,79898,79901,79903,79907,79910,79915,79918,79921,79924,79927,79929,79934,79937,79940,79943,79946,79948,79953,79956,79959,79961,79963,79966,79970,79973,79976,79981,79984,79987,79990,80040,80045,80049,80054,80057,80126,80129,80138,80142,80147,80150,80153,80161,80164,80181,81983,81987,81991,81996,81999,82003,82009,82015,82167,82172,82177,82180,82183,82186,82189,82192,82195,82198,82201,82204,82207,82210,82213,82218,82222,82225,82236,82240,82245,82248,82251,82254,82257,82260,82262,82265,82268,82271,82274,82276,82293,82296,82300,82303,82308,82313,82316,82319,82323,82326,82329,82338,82341,82345,82348,82353,82358,82425,82429,82432,82435,82440,82445,82531,82536,82540,82543,82546,82561,82564,82569,82573,82578,82687,82690,82701,82851,82855,82860,82969,82973,82978,82983,82988,82991,82998,83018,83054,83218,83223,83226,83231,83238,83241,83244,83247,83306,83362,83418,83422,83427,83742,83745,83749,83752,83757,83866,83871,83875,83880,83884,83955,83959,83961,83964,83967,84004,84280,84284,84301,84367,84401,84405,84408,84413,84442,84449,84458,84463,84478,84483,84492,84495,84632,84636,84698,84702,84707,84952,84956,84961,84964,84967,84970,84973,84977,84982,86563,86567,86571,86577,86580,86585,86589,86592,86597,86600,86611,86615,86620,86624,86629,86634,86637,86642,86646,86650,86653,86658,86663,86666,86669,86672,86794,86799,86901,86904,86907,86911,86916,87088,87093,87097,87100,87105,87171,87176,87179,87310,87313,87318,87321,87324,87415,87420,87423,87426,87429,87432,87437,87442,87445,87450,87455,87460,87464,87467,87470,87475,87480,87485,87490,87544,87547,87550,87555,87558,87561,87566,87571,87576,87580,87585,87599,87604,87607,87612,87616,87621,87626,87631,87636,87641,87646,87651,87656,87659,87663,87668,87671,87674,87677,87682,87687,87690,87693,87697,87700,87703,87708,87713,87718,87723,87726,87731,87736,87797,87802,87805,87810,89051,89056,89060,89064,89069,89072,89077,89082,89085,89090,89092,89097,89101,89104,89107,89118,89122,89127,89132,89187,89192,89197,89202,89413,89418,89422,89427,89430,89432,89435,89438,89885,89890,89897,89903,89906,89909,90173,90178,90182,90447,90452,90456,90461,90466,90471,90476,90807,90810,90815,90820,90823,90827,90831,90836,90841,90846,90851,90856,90861,90865,90868,90873,90878,90881,90955,90960,90965,90970,90972,90975,91345,91350,91355,91360,91363,91366,91468,91473,91478,91581,91585,91590,91594,91598,91603,91608,91611,91616,91619,91622,92015,92020,92023,92026,92029,92032,92552,92556,92561,92566,92571,92574,92579,92582,92585,92967,92972,92974,92976,92979,92982,93494,93498,93559,93562,93565,93568,93572,93575,93580,93585,94510],[10,78444,78440],{"id":78445},"_4js进阶",[19,78447,78448],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78450,78452],{"id":78451},"_41-作用域","4.1 作用域",[391,78454,78456],{"id":78455},"_411-局部作用域","4.1.1 局部作用域",[19,78458,78459],{},[3317,78460],{"alt":63,"src":78461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78463,78464],{},[3317,78465],{"alt":63,"src":78466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[2994,78468,78469,78472,78475],{},[29,78470,78471],{},"函数作用域在函数内部",[29,78473,78474],{},"块级作用域在{}",[29,78476,78477],{},"对象的那个{}不是作用域，不是块作用域",[391,78479,78481],{"id":78480},"_412-全局作用域","4.1.2 全局作用域",[19,78483,78484],{},[3317,78485],{"alt":63,"src":78486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78488,78489],{},"window.a=10不要这样写",[391,78491,78493],{"id":78492},"_413-作用域链","4.1.3 作用域链",[19,78495,78496],{},"变量查找机制",[19,78498,78499],{},[3317,78500],{"alt":63,"src":78501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78503,78505],{"id":78504},"_42-垃圾回收机制","4.2 垃圾回收机制",[391,78507,78509],{"id":78508},"_421-大体介绍","4.2.1 大体介绍",[19,78511,78512],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78514,78515],{},[3317,78516],{"alt":63,"src":78517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78519,78520],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[391,78522,78524],{"id":78523},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78526,78527],{},"堆栈空间分配区别：",[26,78529,78530,78533],{},[29,78531,78532],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[29,78534,78535],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78537,78538],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23794,78540,78542],{"id":78541},"_4221-引用计数","4.2.2.1 引用计数",[19,78544,78545],{},[3317,78546],{"alt":63,"src":78547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78549,78550],{},[3317,78551],{"alt":63,"src":78552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78554,78555],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23794,78557,78559],{"id":78558},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78561,78562],{},[3317,78563],{"alt":63,"src":78564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78566,78567],{},[3317,78568],{"alt":63,"src":78569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78571,78572],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78574,78576],{"id":78575},"_43-闭包","4.3 闭包",[19,78578,78579],{},[3317,78580],{"alt":63,"src":78581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78583,78584],{},"闭包：内层函数+外层函数的变量",[19,78586,78587],{},[3317,78588],{"alt":63,"src":78589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78591,78592],{},"closure就是闭包",[19,78594,78595],{},[3317,78596],{"alt":63,"src":78597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78599,78600],{},"内层函数必须包含外层函数的变量才是闭包",[19,78602,78603],{},[3317,78604],{"alt":63,"src":78605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78607,78608],{},[3317,78609],{"alt":63,"src":78610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78612,78613],{},"闭包可能会引起内存泄漏",[19,78615,78616],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78618,78620],{"id":78619},"_44-变量提升","4.4 变量提升",[19,78622,78623],{},[3317,78624],{"alt":63,"src":78625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78627,78628],{},[3317,78629],{"alt":63,"src":78630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78632,78633],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78635,78637],{"id":78636},"_45-函数进阶","4.5 函数进阶",[391,78639,78641],{"id":78640},"_451-函数提升","4.5.1 函数提升",[19,78643,78644],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78646,78647],{},"只提升函数声明，不提升函数调用",[53578,78649,78650],{},"\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",[391,78652,78654],{"id":78653},"_452-函数参数","4.5.2 函数参数",[23794,78656,78658],{"id":78657},"_4521-动态参数","4.5.2.1 动态参数",[19,78660,78661],{},[3317,78662],{"alt":63,"src":78663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78665,78666],{},[3317,78667],{"alt":63,"src":78668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78670,78671],{},"箭头函数里边没有arguments",[23794,78673,78675],{"id":78674},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78677,78678],{},[3317,78679],{"alt":63,"src":78680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78682,78683],{},[3317,78684],{"alt":63,"src":78685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78687,78688],{},"剩余参数使用的时候不需要写...",[19,78690,78691],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78693,78694],{},"  function getSum(a,b,...arr) {",[19,78696,78697],{},"  console.log(11)",[19,78699,78700],{},"  }",[19,78702,78703],{},"  getSum(1,2,3,4)",[19,78705,78706],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78708,78709],{},"  getSum(1,2)",[19,78711,78712],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78714,78715],{},[3317,78716],{"alt":63,"src":78717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23794,78719,78721],{"id":78720},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78723,78724],{},[3317,78725],{"alt":63,"src":78726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78728,78729],{},[3317,78730],{"alt":63,"src":78731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78733,78734],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78736,78737],{},"展开运算符可以用于数组之间的合并：",[19,78739,78740],{},"const arr1 = [1, 2, 3]",[19,78742,78743],{},"const arr2 = [3, 4, 5]",[19,78745,78746],{},"const arr = [...arr1, ...arr2]",[19,78748,78749],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78751,78752],{},"剩余参数：函数参数使用，得到真数组",[19,78754,78755],{},"展开运算符：数组中使用，数组展开",[391,78757,78759],{"id":78758},"_453-箭头函数","4.5.3 箭头函数",[23794,78761,78763],{"id":78762},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78765,78766],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78768,78769],{},"它不是万能的！！！",[19,78771,78772],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78774,78775],{},[3317,78776],{"alt":63,"src":78777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78779,2031],{},[19,78781,78782],{},"① 只有一个形参的时候，可以省略小括号：",[19,78784,78785],{},"const fn=x=>{console.log(x)}",[19,78787,78788],{},"② 只有一行代码时可以省略大括号：",[19,78790,78791],{},"const fn=x=>console.log(11)",[19,78793,78794],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78796,78797],{},"const fn=x=>x+x",[19,78799,78800],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78802,78803],{},"⑤ 阻止表单默认提交：",[19,78805,78806],{},"const form = document.querySelector('form')",[19,78808,78809],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78811,78812],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78814,78815],{},"const fn=uname=>({uname:uname})",[19,78817,78818],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78820,78821],{},[3317,78822],{"alt":63,"src":78823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78825,78826],{},[3317,78827],{"alt":63,"src":78828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78830,78831],{},[3317,78832],{"alt":63,"src":78833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78835,78836],{},"一定不要忘记用()，有()就理解为自带return",[23794,78838,78840],{"id":78839},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78842,78843],{},"箭头函数是没有动态参数的arguments",[19,78845,78846],{},[3317,78847],{"alt":63,"src":78848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23794,78850,78852],{"id":78851},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78854,13132],{},[26,78856,78857,78860,78863],{},[29,78858,78859],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[29,78861,78862],{},"事件回调函数使用箭头函数时，this 为全局的 window",[29,78864,78865],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78867,78868],{},[3317,78869],{"alt":63,"src":78870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[58,78872,78874],{"className":250,"code":78873,"language":252,"meta":63,"style":63},"  \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",[32,78875,78876,78884,78889,78894,78899,78904,78909,78913,78918,78922,78926,78931,78936,78941,78945,78949,78954,78959,78964],{"__ignoreMap":63},[67,78877,78878,78880,78882],{"class":69,"line":70},[67,78879,328],{"class":73},[67,78881,53578],{"class":262},[67,78883,323],{"class":73},[67,78885,78886],{"class":69,"line":191},[67,78887,78888],{"class":73},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[67,78890,78891],{"class":69,"line":202},[67,78892,78893],{"class":73},"    console.log(this) \u002F\u002F指向window\n",[67,78895,78896],{"class":69,"line":641},[67,78897,78898],{"class":73},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[67,78900,78901],{"class":69,"line":655},[67,78902,78903],{"class":73},"    function fn() {\n",[67,78905,78906],{"class":69,"line":660},[67,78907,78908],{"class":73},"      console.log(this)  \u002F\u002F指向window\n",[67,78910,78911],{"class":69,"line":665},[67,78912,4020],{"class":73},[67,78914,78915],{"class":69,"line":677},[67,78916,78917],{"class":73},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[67,78919,78920],{"class":69,"line":683},[67,78921,631],{"emptyLinePlaceholder":630},[67,78923,78924],{"class":69,"line":689},[67,78925,73283],{"class":73},[67,78927,78928],{"class":69,"line":694},[67,78929,78930],{"class":73},"      name: 'andy',\n",[67,78932,78933],{"class":69,"line":700},[67,78934,78935],{"class":73},"      sayHai: function () {\n",[67,78937,78938],{"class":69,"line":706},[67,78939,78940],{"class":73},"        console.log(this)\n",[67,78942,78943],{"class":69,"line":712},[67,78944,54162],{"class":73},[67,78946,78947],{"class":69,"line":717},[67,78948,4020],{"class":73},[67,78950,78951],{"class":69,"line":723},[67,78952,78953],{"class":73},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[67,78955,78956],{"class":69,"line":729},[67,78957,78958],{"class":73},"    \u002F\u002F 2.箭头函数的this\n",[67,78960,78961],{"class":69,"line":735},[67,78962,78963],{"class":73},"    const fn = () => console.log(this)\n",[67,78965,78966,78968,78970],{"class":69,"line":741},[67,78967,54181],{"class":73},[67,78969,53578],{"class":262},[67,78971,323],{"class":73},[19,78973,78974],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78976,78977],{},"const fn = () => console.log(this)",[19,78979,78980],{},"fn() \u002F\u002F指向window",[19,78982,78983],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78985,78986],{},"①",[19,78988,78989],{},"const obj = {",[19,78991,78992],{},"uname: 'pink老师',",[19,78994,78995],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78997,2934],{},[19,78999,79000],{},"调用对象里边的函数",[19,79002,79003],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79005,79006],{},"obj.sayHai()",[19,79008,79009],{},"②",[19,79011,79012],{},"const obj1 = {",[19,79014,78992],{},[19,79016,79017],{},"sayHai: function () {",[19,79019,79020],{},"let i = 10",[19,79022,79023],{},"const count = () => {",[19,79025,79026],{},"console.log(this)",[19,79028,79029],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79031,79032],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79034,2934],{},[19,79036,79037],{},"count()",[19,79039,2934],{},[19,79041,2934],{},[19,79043,79044],{},"obj1.sayHai()",[14,79046,79048],{"id":79047},"_46-解构赋值","4.6 解构赋值",[391,79050,79052],{"id":79051},"_461-数组解构","4.6.1 数组解构",[19,79054,79055],{},"以前要是使用数组中的值的话：",[19,79057,79058],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79060,79061],{},"const arr=[100,60,80]",[19,79063,79064],{},"const max=arr[0]",[19,79066,79067],{},"const min=arr[1]",[19,79069,79070],{},"const avg=arr[2]",[19,79072,79073],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79075,79076],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79078,79079],{},"这个写法就类似于上边的那种用很多const的方法",[19,79081,79082],{},[3317,79083],{"alt":63,"src":79084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[58,79086,79088],{"className":52401,"code":79087,"language":52403,"meta":63,"style":63},"①变量之间交换值:\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",[32,79089,79090,79095,79100,79105,79110,79115,79119,79123,79128,79132,79137,79142,79146,79151,79156,79167,79177,79182,79187,79192,79196,79200],{"__ignoreMap":63},[67,79091,79092],{"class":69,"line":70},[67,79093,79094],{"class":73},"①变量之间交换值:\n",[67,79096,79097],{"class":69,"line":191},[67,79098,79099],{"class":73},"let a=1\n",[67,79101,79102],{"class":69,"line":202},[67,79103,79104],{"class":73},"let b=2;\n",[67,79106,79107],{"class":69,"line":641},[67,79108,79109],{"class":73},"必须加这行代码，不然就会报错\n",[67,79111,79112],{"class":69,"line":655},[67,79113,79114],{"class":73},"[b,a]=[a,b]\n",[67,79116,79117],{"class":69,"line":660},[67,79118,631],{"emptyLinePlaceholder":630},[67,79120,79121],{"class":69,"line":665},[67,79122,631],{"emptyLinePlaceholder":630},[67,79124,79125],{"class":69,"line":677},[67,79126,79127],{"class":73},"可以写成下面的方式：\n",[67,79129,79130],{"class":69,"line":683},[67,79131,79099],{"class":73},[67,79133,79134],{"class":69,"line":689},[67,79135,79136],{"class":73},"let b=2\n",[67,79138,79139],{"class":69,"line":694},[67,79140,79141],{"class":73},";[b,a]=[a,b]\n",[67,79143,79144],{"class":69,"line":700},[67,79145,631],{"emptyLinePlaceholder":630},[67,79147,79148],{"class":69,"line":706},[67,79149,79150],{"class":73},"②排序\n",[67,79152,79153],{"class":69,"line":712},[67,79154,79155],{"class":73},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[67,79157,79158,79161,79164],{"class":69,"line":717},[67,79159,79160],{"class":73},"for (let i = 0; i ",[67,79162,259],{"class":79163},"s7hpK",[67,79165,79166],{"class":73}," arr1.length; i++) {\n",[67,79168,79169,79172,79174],{"class":69,"line":723},[67,79170,79171],{"class":73},"   for (let j = 0; j ",[67,79173,259],{"class":79163},[67,79175,79176],{"class":73}," arr1.length - 1; j++) {\n",[67,79178,79179],{"class":69,"line":729},[67,79180,79181],{"class":73},"      if (arr1[j] > arr1[j + 1]) {\n",[67,79183,79184],{"class":69,"line":735},[67,79185,79186],{"class":73},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[67,79188,79189],{"class":69,"line":741},[67,79190,79191],{"class":73},"       }\n",[67,79193,79194],{"class":69,"line":747},[67,79195,6129],{"class":73},[67,79197,79198],{"class":69,"line":753},[67,79199,3419],{"class":73},[67,79201,79202],{"class":69,"line":758},[67,79203,79204],{"class":73},"console.log(arr1)\n",[19,79206,79207],{},"数组解构的细节：",[19,79209,79210],{},"①变量多，单元值少",[19,79212,79213],{},[3317,79214],{"alt":63,"src":79215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79217,79218],{},"防止出现undefined的方法：",[19,79220,79221],{},"const [a=0,b=0] =[1]",[19,79223,79224],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79226,79227],{},"②变量少，单元值多",[19,79229,79230],{},[3317,79231],{"alt":63,"src":79232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79234,79235],{},"此时可以使用剩余参数来接收多余的值",[19,79237,79238],{},"const [a,b,...c]=[1,2,3,4]",[19,79240,79241],{},"console.log(c) 输出[3,4]",[19,79243,79244],{},"③可以按需导入，忽略某些返回值",[19,79246,79247],{},[3317,79248],{"alt":63,"src":79249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79251,79252],{},"④支持多维数组的结构",[58,79254,79258],{"className":79255,"code":79256,"language":79257,"meta":63,"style":63},"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",[32,79259,79260,79288,79304,79319,79334],{"__ignoreMap":63},[67,79261,79262,79264,79266,79268,79270,79272,79274,79276,79279,79281,79283,79285],{"class":69,"line":70},[67,79263,8608],{"class":84},[67,79265,53598],{"class":73},[67,79267,85],{"class":84},[67,79269,53990],{"class":73},[67,79271,2209],{"class":77},[67,79273,1868],{"class":73},[67,79275,2077],{"class":77},[67,79277,79278],{"class":73},", [",[67,79280,2071],{"class":77},[67,79282,1868],{"class":73},[67,79284,1047],{"class":77},[67,79286,79287],{"class":73},"]]\n",[67,79289,79290,79293,79295,79297,79299,79301],{"class":69,"line":191},[67,79291,79292],{"class":73},"console.",[67,79294,60008],{"class":110},[67,79296,5671],{"class":73},[67,79298,78],{"class":77},[67,79300,6036],{"class":73},[67,79302,79303],{"class":2058},"  \u002F\u002F1\n",[67,79305,79306,79308,79310,79312,79314,79316],{"class":69,"line":202},[67,79307,79292],{"class":73},[67,79309,60008],{"class":110},[67,79311,5671],{"class":73},[67,79313,2209],{"class":77},[67,79315,6036],{"class":73},[67,79317,79318],{"class":2058},"  \u002F\u002F2\n",[67,79320,79321,79323,79325,79327,79329,79331],{"class":69,"line":641},[67,79322,79292],{"class":73},[67,79324,60008],{"class":110},[67,79326,5671],{"class":73},[67,79328,2077],{"class":77},[67,79330,6036],{"class":73},[67,79332,79333],{"class":2058},"  \u002F\u002F[3,4]\n",[67,79335,79336,79338,79340,79342,79344,79346,79348,79350],{"class":69,"line":655},[67,79337,79292],{"class":73},[67,79339,60008],{"class":110},[67,79341,5671],{"class":73},[67,79343,2077],{"class":77},[67,79345,6720],{"class":73},[67,79347,78],{"class":77},[67,79349,6036],{"class":73},[67,79351,79352],{"class":2058},"  \u002F\u002F3\n",[58,79354,79356],{"className":79255,"code":79355,"language":79257,"meta":63,"style":63},"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",[32,79357,79358,79385,79396,79407],{"__ignoreMap":63},[67,79359,79360,79362,79365,79367,79369,79371,79373,79375,79377,79379,79381,79383],{"class":69,"line":70},[67,79361,8608],{"class":84},[67,79363,79364],{"class":73}," [a, b, c] ",[67,79366,85],{"class":84},[67,79368,53990],{"class":73},[67,79370,2209],{"class":77},[67,79372,1868],{"class":73},[67,79374,2077],{"class":77},[67,79376,79278],{"class":73},[67,79378,2071],{"class":77},[67,79380,1868],{"class":73},[67,79382,1047],{"class":77},[67,79384,79287],{"class":73},[67,79386,79387,79389,79391,79394],{"class":69,"line":191},[67,79388,79292],{"class":73},[67,79390,60008],{"class":110},[67,79392,79393],{"class":73},"(a)",[67,79395,79303],{"class":2058},[67,79397,79398,79400,79402,79405],{"class":69,"line":202},[67,79399,79292],{"class":73},[67,79401,60008],{"class":110},[67,79403,79404],{"class":73},"(b)",[67,79406,79318],{"class":2058},[67,79408,79409,79411,79413,79416],{"class":69,"line":641},[67,79410,79292],{"class":73},[67,79412,60008],{"class":110},[67,79414,79415],{"class":73},"(c)",[67,79417,79333],{"class":2058},[58,79419,79421],{"className":79255,"code":79420,"language":79257,"meta":63,"style":63},"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",[32,79422,79423,79450,79460,79470,79480],{"__ignoreMap":63},[67,79424,79425,79427,79430,79432,79434,79436,79438,79440,79442,79444,79446,79448],{"class":69,"line":70},[67,79426,8608],{"class":84},[67,79428,79429],{"class":73}," [a, b, [c, d]] ",[67,79431,85],{"class":84},[67,79433,53990],{"class":73},[67,79435,2209],{"class":77},[67,79437,1868],{"class":73},[67,79439,2077],{"class":77},[67,79441,79278],{"class":73},[67,79443,2071],{"class":77},[67,79445,1868],{"class":73},[67,79447,1047],{"class":77},[67,79449,79287],{"class":73},[67,79451,79452,79454,79456,79458],{"class":69,"line":191},[67,79453,79292],{"class":73},[67,79455,60008],{"class":110},[67,79457,79393],{"class":73},[67,79459,79303],{"class":2058},[67,79461,79462,79464,79466,79468],{"class":69,"line":202},[67,79463,79292],{"class":73},[67,79465,60008],{"class":110},[67,79467,79404],{"class":73},[67,79469,79318],{"class":2058},[67,79471,79472,79474,79476,79478],{"class":69,"line":641},[67,79473,79292],{"class":73},[67,79475,60008],{"class":110},[67,79477,79415],{"class":73},[67,79479,79352],{"class":2058},[67,79481,79482,79484,79486,79489],{"class":69,"line":655},[67,79483,79292],{"class":73},[67,79485,60008],{"class":110},[67,79487,79488],{"class":73},"(d)",[67,79490,79491],{"class":2058},"  \u002F\u002F4\n",[391,79493,79495],{"id":79494},"_462-对象解构","4.6.2 对象解构",[19,79497,79498],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79500,79501],{},"用的非常非常多！！！！！！",[23794,79503,79505],{"id":79504},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79507,79508],{},"基本语法：",[26,79510,79511,79514,79517,79520],{},[29,79512,79513],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[29,79515,79516],{},"对象属性的值将被赋值给与属性名相同的变量",[29,79518,79519],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[29,79521,79522],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[58,79524,79526],{"className":52401,"code":79525,"language":52403,"meta":63,"style":63},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[32,79527,79528,79533,79538,79543,79547],{"__ignoreMap":63},[67,79529,79530],{"class":69,"line":70},[67,79531,79532],{"class":73},"const obj = {\n",[67,79534,79535],{"class":69,"line":191},[67,79536,79537],{"class":73},"   uname: 'pink老师',\n",[67,79539,79540],{"class":69,"line":202},[67,79541,79542],{"class":73},"   age: 18,\n",[67,79544,79545],{"class":69,"line":641},[67,79546,3419],{"class":73},[67,79548,79549],{"class":69,"line":655},[67,79550,79551],{"class":73},"const { uname, age } = obj\n",[19,79553,79554],{},"上方代码这样写等价于：",[19,79556,79557],{},"const uname等价于obj.uname",[19,79559,79560],{},"变量名可以重新改名：",[19,79562,79563],{},"const uname='red老师'",[19,79565,79566],{},"const user={",[19,79568,79569],{},"  uname:'pink老师',",[19,79571,79572],{},"  age:18",[19,79574,2934],{},[19,79576,79577],{},"const {uname,age}=user",[19,79579,79580],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79582,79583],{},"const {旧变量名：新变量名}=对象",[19,79585,79586],{},"const {uname:username,age}=user",[23794,79588,79590],{"id":79589},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79592,79593],{},[3317,79594],{"alt":63,"src":79595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23794,79597,79599],{"id":79598},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79601,79602],{},[3317,79603],{"alt":63,"src":79604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[58,79606,79608],{"className":250,"code":79607,"language":252,"meta":63,"style":63},"  \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",[32,79609,79610,79618,79623,79628,79633,79638,79643,79648,79653,79658,79662,79667,79672],{"__ignoreMap":63},[67,79611,79612,79614,79616],{"class":69,"line":70},[67,79613,328],{"class":73},[67,79615,53578],{"class":262},[67,79617,323],{"class":73},[67,79619,79620],{"class":69,"line":191},[67,79621,79622],{"class":73},"    const pig = {\n",[67,79624,79625],{"class":69,"line":202},[67,79626,79627],{"class":73},"      name: '佩奇',\n",[67,79629,79630],{"class":69,"line":641},[67,79631,79632],{"class":73},"      family: {\n",[67,79634,79635],{"class":69,"line":655},[67,79636,79637],{"class":73},"        mother: '猪妈妈',\n",[67,79639,79640],{"class":69,"line":660},[67,79641,79642],{"class":73},"        father: '猪爸爸',\n",[67,79644,79645],{"class":69,"line":665},[67,79646,79647],{"class":73},"        sister: '乔治'\n",[67,79649,79650],{"class":69,"line":677},[67,79651,79652],{"class":73},"      },\n",[67,79654,79655],{"class":69,"line":683},[67,79656,79657],{"class":73},"      age: 6\n",[67,79659,79660],{"class":69,"line":689},[67,79661,4020],{"class":73},[67,79663,79664],{"class":69,"line":694},[67,79665,79666],{"class":73},"    \u002F\u002F 多级对象解构\n",[67,79668,79669],{"class":69,"line":700},[67,79670,79671],{"class":73},"    const { name, family: { mother, father, sister }, age } = pig\n",[67,79673,79674,79676,79678],{"class":69,"line":706},[67,79675,54181],{"class":73},[67,79677,53578],{"class":262},[67,79679,323],{"class":73},[19,79681,79682],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[58,79684,79687],{"className":79685,"code":79686,"language":78207,"meta":63,"style":63},"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",[32,79688,79689,79694,79705,79717,79729,79738,79742,79753,79765,79775,79780,79784,79794,79805,79814,79818,79822,79833,79844,79853,79857,79862],{"__ignoreMap":63},[67,79690,79691],{"class":69,"line":70},[67,79692,79693],{"class":2058},"    \u002F\u002F 这是后台传递过来的数据\n",[67,79695,79696,79698,79701,79703],{"class":69,"line":191},[67,79697,13021],{"class":84},[67,79699,79700],{"class":73}," msg ",[67,79702,85],{"class":84},[67,79704,17369],{"class":73},[67,79706,79707,79710,79712,79715],{"class":69,"line":202},[67,79708,79709],{"class":114},"      \"code\"",[67,79711,2848],{"class":84},[67,79713,79714],{"class":77}," 200",[67,79716,33238],{"class":73},[67,79718,79719,79722,79724,79727],{"class":69,"line":641},[67,79720,79721],{"class":114},"      \"msg\"",[67,79723,2848],{"class":84},[67,79725,79726],{"class":114}," \"获取新闻列表成功\"",[67,79728,33238],{"class":73},[67,79730,79731,79734,79736],{"class":69,"line":655},[67,79732,79733],{"class":114},"      \"data\"",[67,79735,2848],{"class":84},[67,79737,57208],{"class":73},[67,79739,79740],{"class":69,"line":660},[67,79741,4342],{"class":73},[67,79743,79744,79747,79749,79751],{"class":69,"line":665},[67,79745,79746],{"class":114},"          \"id\"",[67,79748,2848],{"class":84},[67,79750,906],{"class":77},[67,79752,33238],{"class":73},[67,79754,79755,79758,79760,79763],{"class":69,"line":677},[67,79756,79757],{"class":114},"          \"title\"",[67,79759,2848],{"class":84},[67,79761,79762],{"class":114}," \"5G商用自己，三大运用商收入下降\"",[67,79764,33238],{"class":73},[67,79766,79767,79770,79772],{"class":69,"line":683},[67,79768,79769],{"class":114},"          \"count\"",[67,79771,2848],{"class":84},[67,79773,79774],{"class":77}," 58\n",[67,79776,79777],{"class":69,"line":689},[67,79778,79779],{"class":73},"        },\n",[67,79781,79782],{"class":69,"line":694},[67,79783,4342],{"class":73},[67,79785,79786,79788,79790,79792],{"class":69,"line":700},[67,79787,79746],{"class":114},[67,79789,2848],{"class":84},[67,79791,16553],{"class":77},[67,79793,33238],{"class":73},[67,79795,79796,79798,79800,79803],{"class":69,"line":706},[67,79797,79757],{"class":114},[67,79799,2848],{"class":84},[67,79801,79802],{"class":114}," \"国际媒体头条速览\"",[67,79804,33238],{"class":73},[67,79806,79807,79809,79811],{"class":69,"line":712},[67,79808,79769],{"class":114},[67,79810,2848],{"class":84},[67,79812,79813],{"class":77}," 56\n",[67,79815,79816],{"class":69,"line":717},[67,79817,79779],{"class":73},[67,79819,79820],{"class":69,"line":723},[67,79821,4342],{"class":73},[67,79823,79824,79826,79828,79831],{"class":69,"line":729},[67,79825,79746],{"class":114},[67,79827,2848],{"class":84},[67,79829,79830],{"class":77}," 3",[67,79832,33238],{"class":73},[67,79834,79835,79837,79839,79842],{"class":69,"line":735},[67,79836,79757],{"class":114},[67,79838,2848],{"class":84},[67,79840,79841],{"class":114}," \"乌克兰和俄罗斯持续冲突\"",[67,79843,33238],{"class":73},[67,79845,79846,79848,79850],{"class":69,"line":741},[67,79847,79769],{"class":114},[67,79849,2848],{"class":84},[67,79851,79852],{"class":77}," 1669\n",[67,79854,79855],{"class":69,"line":747},[67,79856,79779],{"class":73},[67,79858,79859],{"class":69,"line":753},[67,79860,79861],{"class":73},"      ]\n",[67,79863,79864],{"class":69,"line":758},[67,79865,4020],{"class":73},[19,79867,79868],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79870,79871],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79873,79874],{},"\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,79876,79877],{},"function({data}) {",[19,79879,79880],{},"console.log(data)",[19,79882,2934],{},[19,79884,79885],{},"render(msg)",[19,79887,79888],{},"实参传递给形参的时候解构了",[19,79890,79891],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79893,79894],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79896,79897],{},"function render({data:mydata}) {",[19,79899,79900],{},"  console.log(data)",[19,79902,2934],{},[391,79904,79906],{"id":79905},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79908,79909],{},"有两种情况：一个是数组结构，一个是立即执行函数",[26,79911,79912],{},[29,79913,79914],{},"如果对一个数组进行遍历，有两种方式：",[19,79916,79917],{},"①法1",[19,79919,79920],{},"const arr=[1,2,3]",[19,79922,79923],{},"arr.map(function(item,index) {",[19,79925,79926],{},"  console.log(item)",[19,79928,54228],{},[19,79930,79931],{},[3317,79932],{"alt":63,"src":79933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79935,79936],{},"②法2",[19,79938,79939],{},"const str='pink'",[19,79941,79942],{},"[1,2,3].map(function(item,index) {",[19,79944,79945],{},"console.log(item)",[19,79947,54228],{},[19,79949,79950],{},[3317,79951],{"alt":63,"src":79952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79954,79955],{},"此时会报错",[19,79957,79958],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79960,79945],{},[19,79962,54228],{},[19,79964,79965],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79967,79969],{"id":79968},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79971,79972],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79974,79975],{},"可以理解为加强版的for循环",[19,79977,79978],{},[3317,79979],{"alt":63,"src":79980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79982,79983],{},"里边不写return，不返回数组，只遍历不返回",[19,79985,79986],{},"map是返回数组",[19,79988,79989],{},"forEach主要用于遍历数组对象",[58,79991,79993],{"className":250,"code":79992,"language":252,"meta":63,"style":63},"  \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",[32,79994,79995,80003,80008,80013,80018,80023,80027,80032],{"__ignoreMap":63},[67,79996,79997,79999,80001],{"class":69,"line":70},[67,79998,328],{"class":73},[67,80000,53578],{"class":262},[67,80002,323],{"class":73},[67,80004,80005],{"class":69,"line":191},[67,80006,80007],{"class":73},"    const arr = ['red', 'green', 'pink']\n",[67,80009,80010],{"class":69,"line":202},[67,80011,80012],{"class":73},"    const result = arr.forEach(function (item, index) {\n",[67,80014,80015],{"class":69,"line":641},[67,80016,80017],{"class":73},"      console.log(item)\n",[67,80019,80020],{"class":69,"line":655},[67,80021,80022],{"class":73},"      console.log(index)\n",[67,80024,80025],{"class":69,"line":660},[67,80026,35230],{"class":73},[67,80028,80029],{"class":69,"line":665},[67,80030,80031],{"class":73},"    console.log(result)\n",[67,80033,80034,80036,80038],{"class":69,"line":677},[67,80035,54181],{"class":73},[67,80037,53578],{"class":262},[67,80039,323],{"class":73},[19,80041,80042],{},[3317,80043],{"alt":63,"src":80044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80046,80048],{"id":80047},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80050,80051],{},[3317,80052],{"alt":63,"src":80053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80055,80056],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[58,80058,80060],{"className":250,"code":80059,"language":252,"meta":63,"style":63},"\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",[32,80061,80062,80070,80078,80083,80088,80092,80096,80101,80105,80110,80118],{"__ignoreMap":63},[67,80063,80064,80066,80068],{"class":69,"line":70},[67,80065,259],{"class":73},[67,80067,53565],{"class":262},[67,80069,323],{"class":73},[67,80071,80072,80074,80076],{"class":69,"line":191},[67,80073,328],{"class":73},[67,80075,53578],{"class":262},[67,80077,323],{"class":73},[67,80079,80080],{"class":69,"line":202},[67,80081,80082],{"class":73},"    const arr = [10, 20, 30]\n",[67,80084,80085],{"class":69,"line":641},[67,80086,80087],{"class":73},"    const newArr = arr.filter(function (item, index) {\n",[67,80089,80090],{"class":69,"line":655},[67,80091,80017],{"class":73},[67,80093,80094],{"class":69,"line":660},[67,80095,80022],{"class":73},[67,80097,80098],{"class":69,"line":665},[67,80099,80100],{"class":73},"      return item >= 20\n",[67,80102,80103],{"class":69,"line":677},[67,80104,35230],{"class":73},[67,80106,80107],{"class":69,"line":683},[67,80108,80109],{"class":73},"    console.log(newArr)\n",[67,80111,80112,80114,80116],{"class":69,"line":689},[67,80113,54181],{"class":73},[67,80115,53578],{"class":262},[67,80117,323],{"class":73},[67,80119,80120,80122,80124],{"class":69,"line":694},[67,80121,376],{"class":73},[67,80123,53565],{"class":262},[67,80125,323],{"class":73},[19,80127,80128],{},"这个也可以写成箭头函数：",[58,80130,80132],{"className":52401,"code":80131,"language":52403,"meta":63,"style":63},"const newArr = arr.filter(item => item >= 20)\n",[32,80133,80134],{"__ignoreMap":63},[67,80135,80136],{"class":69,"line":70},[67,80137,80131],{"class":73},[14,80139,80141],{"id":80140},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80143,80144],{},[3317,80145],{"alt":63,"src":80146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80148,80149],{},"步骤：",[19,80151,80152],{},"①：渲染页面模块",[2994,80154,80155,80158],{},[29,80156,80157],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[29,80159,80160],{},"用forEach+字符串的形式",[19,80162,80163],{},"②：点击不同需求，显示不同页面内容",[2994,80165,80166,80169,80172,80175,80178],{},[29,80167,80168],{},"点击采取事件委托方式 .filter",[29,80170,80171],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[29,80173,80174],{},"筛选条件是根据点击的 data-index 来判断",[29,80176,80177],{},"可以使用对象解构，把事件对象解构",[29,80179,80180],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[58,80182,80184],{"className":52401,"code":80183,"language":52403,"meta":63,"style":63},"\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",[32,80185,80186,80196,80210,80214,80222,80236,80256,80268,80276,80282,80292,80302,80312,80316,80320,80326,80339,80351,80361,80373,80377,80381,80388,80401,80413,80430,80448,80461,80465,80469,80481,80491,80495,80499,80506,80547,80574,80584,80588,80592,80600,80612,80616,80620,80628,80640,80652,80663,80667,80671,80680,80692,80703,80707,80711,80720,80732,80744,80748,80752,80759,80769,80781,80793,80808,80812,80816,80824,80840,80850,80860,80870,80882,80886,80890,80900,80911,80921,80925,80933,80941,80945,80953,80968,80994,81019,81044,81063,81071,81085,81090,81095,81100,81105,81110,81118,81126,81131,81142,81147,81157,81167,81177,81187,81191,81195,81204,81213,81222,81231,81235,81239,81248,81257,81266,81275,81279,81283,81292,81301,81310,81319,81323,81327,81336,81345,81354,81363,81367,81371,81380,81389,81398,81407,81411,81415,81424,81433,81442,81451,81455,81459,81468,81477,81485,81494,81498,81502,81506,81511,81523,81528,81540,81544,81561,81589,81598,81603,81613,81623,81632,81637,81642,81646,81651,81668,81672,81677,81685,81690,81717,81722,81742,81747,81759,81764,81769,81774,81785,81799,81836,81854,81887,81904,81928,81932,81937,81943,81947,81951,81955,81963,81971,81975],{"__ignoreMap":63},[67,80187,80188,80190,80192,80194],{"class":69,"line":70},[67,80189,53065],{"class":73},[67,80191,53068],{"class":262},[67,80193,53071],{"class":110},[67,80195,323],{"class":73},[67,80197,80198,80200,80202,80204,80206,80208],{"class":69,"line":191},[67,80199,259],{"class":73},[67,80201,52403],{"class":262},[67,80203,53082],{"class":110},[67,80205,85],{"class":73},[67,80207,53087],{"class":114},[67,80209,323],{"class":73},[67,80211,80212],{"class":69,"line":202},[67,80213,631],{"emptyLinePlaceholder":630},[67,80215,80216,80218,80220],{"class":69,"line":641},[67,80217,259],{"class":73},[67,80219,53100],{"class":262},[67,80221,323],{"class":73},[67,80223,80224,80226,80228,80230,80232,80234],{"class":69,"line":655},[67,80225,328],{"class":73},[67,80227,53110],{"class":262},[67,80229,53113],{"class":110},[67,80231,85],{"class":73},[67,80233,53118],{"class":114},[67,80235,323],{"class":73},[67,80237,80238,80240,80242,80244,80246,80248,80250,80252,80254],{"class":69,"line":660},[67,80239,328],{"class":73},[67,80241,53110],{"class":262},[67,80243,266],{"class":110},[67,80245,85],{"class":73},[67,80247,53157],{"class":114},[67,80249,53137],{"class":110},[67,80251,85],{"class":73},[67,80253,53164],{"class":114},[67,80255,323],{"class":73},[67,80257,80258,80260,80262,80264,80266],{"class":69,"line":665},[67,80259,328],{"class":73},[67,80261,53173],{"class":262},[67,80263,53176],{"class":73},[67,80265,53173],{"class":262},[67,80267,323],{"class":73},[67,80269,80270,80272,80274],{"class":69,"line":677},[67,80271,328],{"class":73},[67,80273,1903],{"class":262},[67,80275,323],{"class":73},[67,80277,80278,80280],{"class":69,"line":683},[67,80279,8220],{"class":262},[67,80281,17369],{"class":73},[67,80283,80284,80286,80288,80290],{"class":69,"line":689},[67,80285,56456],{"class":77},[67,80287,53203],{"class":73},[67,80289,78],{"class":77},[67,80291,3148],{"class":73},[67,80293,80294,80296,80298,80300],{"class":69,"line":694},[67,80295,56467],{"class":77},[67,80297,53203],{"class":73},[67,80299,78],{"class":77},[67,80301,3148],{"class":73},[67,80303,80304,80306,80308,80310],{"class":69,"line":700},[67,80305,74356],{"class":77},[67,80307,53203],{"class":73},[67,80309,62266],{"class":77},[67,80311,3148],{"class":73},[67,80313,80314],{"class":69,"line":706},[67,80315,4020],{"class":73},[67,80317,80318],{"class":69,"line":712},[67,80319,631],{"emptyLinePlaceholder":630},[67,80321,80322,80324],{"class":69,"line":717},[67,80323,63883],{"class":110},[67,80325,17369],{"class":73},[67,80327,80328,80330,80332,80335,80337],{"class":69,"line":723},[67,80329,56532],{"class":77},[67,80331,53203],{"class":73},[67,80333,80334],{"class":77},"990",[67,80336,53258],{"class":84},[67,80338,3148],{"class":73},[67,80340,80341,80343,80345,80347,80349],{"class":69,"line":729},[67,80342,56467],{"class":77},[67,80344,53203],{"class":73},[67,80346,78],{"class":77},[67,80348,53322],{"class":77},[67,80350,3148],{"class":73},[67,80352,80353,80355,80357,80359],{"class":69,"line":735},[67,80354,56770],{"class":77},[67,80356,53203],{"class":73},[67,80358,53243],{"class":77},[67,80360,3148],{"class":73},[67,80362,80363,80366,80368,80371],{"class":69,"line":741},[67,80364,80365],{"class":77},"      flex-wrap",[67,80367,53203],{"class":73},[67,80369,80370],{"class":77},"wrap",[67,80372,3148],{"class":73},[67,80374,80375],{"class":69,"line":747},[67,80376,4020],{"class":73},[67,80378,80379],{"class":69,"line":753},[67,80380,631],{"emptyLinePlaceholder":630},[67,80382,80383,80386],{"class":69,"line":758},[67,80384,80385],{"class":110},"    .item",[67,80387,17369],{"class":73},[67,80389,80390,80392,80394,80397,80399],{"class":69,"line":764},[67,80391,56532],{"class":77},[67,80393,53203],{"class":73},[67,80395,80396],{"class":77},"240",[67,80398,53258],{"class":84},[67,80400,3148],{"class":73},[67,80402,80403,80405,80407,80409,80411],{"class":69,"line":770},[67,80404,63760],{"class":77},[67,80406,53203],{"class":73},[67,80408,2437],{"class":77},[67,80410,53258],{"class":84},[67,80412,3148],{"class":73},[67,80414,80415,80417,80419,80421,80423,80426,80428],{"class":69,"line":776},[67,80416,56456],{"class":77},[67,80418,53203],{"class":73},[67,80420,2689],{"class":77},[67,80422,53258],{"class":84},[67,80424,80425],{"class":77}," 30",[67,80427,53258],{"class":84},[67,80429,3148],{"class":73},[67,80431,80432,80434,80436,80438,80441,80444,80446],{"class":69,"line":782},[67,80433,63621],{"class":77},[67,80435,53203],{"class":73},[67,80437,29907],{"class":77},[67,80439,80440],{"class":77}," ease",[67,80442,80443],{"class":77}," .5",[67,80445,2684],{"class":84},[67,80447,3148],{"class":73},[67,80449,80450,80453,80455,80457,80459],{"class":69,"line":788},[67,80451,80452],{"class":77},"      margin-bottom",[67,80454,53203],{"class":73},[67,80456,2689],{"class":77},[67,80458,53258],{"class":84},[67,80460,3148],{"class":73},[67,80462,80463],{"class":69,"line":793},[67,80464,4020],{"class":73},[67,80466,80467],{"class":69,"line":798},[67,80468,631],{"emptyLinePlaceholder":630},[67,80470,80471,80474,80476,80479],{"class":69,"line":816},[67,80472,80473],{"class":110},"    .item:nth-child",[67,80475,854],{"class":73},[67,80477,80478],{"class":77},"4n",[67,80480,14241],{"class":73},[67,80482,80483,80485,80487,80489],{"class":69,"line":832},[67,80484,63760],{"class":77},[67,80486,53203],{"class":73},[67,80488,78],{"class":77},[67,80490,3148],{"class":73},[67,80492,80493],{"class":69,"line":843},[67,80494,4020],{"class":73},[67,80496,80497],{"class":69,"line":848},[67,80498,631],{"emptyLinePlaceholder":630},[67,80500,80501,80504],{"class":69,"line":863},[67,80502,80503],{"class":110},"    .item:hover",[67,80505,17369],{"class":73},[67,80507,80508,80511,80513,80515,80517,80519,80521,80523,80525,80528,80530,80532,80534,80536,80538,80540,80542,80545],{"class":69,"line":876},[67,80509,80510],{"class":77},"      box-shadow",[67,80512,53203],{"class":73},[67,80514,78],{"class":77},[67,80516,53258],{"class":84},[67,80518,5913],{"class":77},[67,80520,53258],{"class":84},[67,80522,3981],{"class":77},[67,80524,53258],{"class":84},[67,80526,80527],{"class":77}," rgba",[67,80529,854],{"class":73},[67,80531,78],{"class":77},[67,80533,1868],{"class":73},[67,80535,78],{"class":77},[67,80537,1868],{"class":73},[67,80539,78],{"class":77},[67,80541,1868],{"class":73},[67,80543,80544],{"class":77},".2",[67,80546,4544],{"class":73},[67,80548,80549,80552,80554,80557,80559,80561,80563,80566,80568,80570,80572],{"class":69,"line":889},[67,80550,80551],{"class":77},"      transform",[67,80553,53203],{"class":73},[67,80555,80556],{"class":77},"translate3d",[67,80558,854],{"class":73},[67,80560,78],{"class":77},[67,80562,1868],{"class":73},[67,80564,80565],{"class":77},"-4",[67,80567,53258],{"class":84},[67,80569,1868],{"class":73},[67,80571,78],{"class":77},[67,80573,4544],{"class":73},[67,80575,80576,80578,80580,80582],{"class":69,"line":894},[67,80577,63785],{"class":77},[67,80579,53203],{"class":73},[67,80581,63790],{"class":77},[67,80583,3148],{"class":73},[67,80585,80586],{"class":69,"line":911},[67,80587,4020],{"class":73},[67,80589,80590],{"class":69,"line":927},[67,80591,631],{"emptyLinePlaceholder":630},[67,80593,80594,80596,80598],{"class":69,"line":932},[67,80595,80385],{"class":110},[67,80597,57376],{"class":262},[67,80599,17369],{"class":73},[67,80601,80602,80604,80606,80608,80610],{"class":69,"line":955},[67,80603,56532],{"class":77},[67,80605,53203],{"class":73},[67,80607,2302],{"class":77},[67,80609,2319],{"class":84},[67,80611,3148],{"class":73},[67,80613,80614],{"class":69,"line":971},[67,80615,4020],{"class":73},[67,80617,80618],{"class":69,"line":1010},[67,80619,631],{"emptyLinePlaceholder":630},[67,80621,80622,80624,80626],{"class":69,"line":1016},[67,80623,80385],{"class":110},[67,80625,64064],{"class":110},[67,80627,17369],{"class":73},[67,80629,80630,80632,80634,80636,80638],{"class":69,"line":1021},[67,80631,56683],{"class":77},[67,80633,53203],{"class":73},[67,80635,2639],{"class":77},[67,80637,53258],{"class":84},[67,80639,3148],{"class":73},[67,80641,80642,80644,80646,80648,80650],{"class":69,"line":1034},[67,80643,80452],{"class":77},[67,80645,53203],{"class":73},[67,80647,2437],{"class":77},[67,80649,53258],{"class":84},[67,80651,3148],{"class":73},[67,80653,80654,80656,80658,80661],{"class":69,"line":1053},[67,80655,59177],{"class":77},[67,80657,53203],{"class":73},[67,80659,80660],{"class":77},"#666",[67,80662,3148],{"class":73},[67,80664,80665],{"class":69,"line":1070},[67,80666,4020],{"class":73},[67,80668,80669],{"class":69,"line":1083},[67,80670,631],{"emptyLinePlaceholder":630},[67,80672,80673,80675,80678],{"class":69,"line":1088},[67,80674,80385],{"class":110},[67,80676,80677],{"class":110}," .price",[67,80679,17369],{"class":73},[67,80681,80682,80684,80686,80688,80690],{"class":69,"line":1093},[67,80683,56683],{"class":77},[67,80685,53203],{"class":73},[67,80687,2739],{"class":77},[67,80689,53258],{"class":84},[67,80691,3148],{"class":73},[67,80693,80694,80696,80698,80701],{"class":69,"line":1110},[67,80695,59177],{"class":77},[67,80697,53203],{"class":73},[67,80699,80700],{"class":77},"firebrick",[67,80702,3148],{"class":73},[67,80704,80705],{"class":69,"line":11603},[67,80706,4020],{"class":73},[67,80708,80709],{"class":69,"line":11612},[67,80710,631],{"emptyLinePlaceholder":630},[67,80712,80713,80715,80718],{"class":69,"line":11617},[67,80714,80385],{"class":110},[67,80716,80717],{"class":110}," .price::before",[67,80719,17369],{"class":73},[67,80721,80722,80725,80727,80730],{"class":69,"line":11623},[67,80723,80724],{"class":77},"      content",[67,80726,53203],{"class":73},[67,80728,80729],{"class":114},"'￥'",[67,80731,3148],{"class":73},[67,80733,80734,80736,80738,80740,80742],{"class":69,"line":11644},[67,80735,56683],{"class":77},[67,80737,53203],{"class":73},[67,80739,2538],{"class":77},[67,80741,53258],{"class":84},[67,80743,3148],{"class":73},[67,80745,80746],{"class":69,"line":11650},[67,80747,4020],{"class":73},[67,80749,80750],{"class":69,"line":11664},[67,80751,631],{"emptyLinePlaceholder":630},[67,80753,80754,80757],{"class":69,"line":11670},[67,80755,80756],{"class":110},"    .filter",[67,80758,17369],{"class":73},[67,80760,80761,80763,80765,80767],{"class":69,"line":11697},[67,80762,56770],{"class":77},[67,80764,53203],{"class":73},[67,80766,53243],{"class":77},[67,80768,3148],{"class":73},[67,80770,80771,80773,80775,80777,80779],{"class":69,"line":11706},[67,80772,56532],{"class":77},[67,80774,53203],{"class":73},[67,80776,80334],{"class":77},[67,80778,53258],{"class":84},[67,80780,3148],{"class":73},[67,80782,80783,80785,80787,80789,80791],{"class":69,"line":11712},[67,80784,56467],{"class":77},[67,80786,53203],{"class":73},[67,80788,78],{"class":77},[67,80790,53322],{"class":77},[67,80792,3148],{"class":73},[67,80794,80795,80797,80799,80801,80803,80805],{"class":69,"line":11720},[67,80796,56456],{"class":77},[67,80798,53203],{"class":73},[67,80800,2645],{"class":77},[67,80802,53258],{"class":84},[67,80804,80425],{"class":77},[67,80806,80807],{"class":84},"px\n",[67,80809,80810],{"class":69,"line":11725},[67,80811,4020],{"class":73},[67,80813,80814],{"class":69,"line":18401},[67,80815,631],{"emptyLinePlaceholder":630},[67,80817,80818,80820,80822],{"class":69,"line":18407},[67,80819,80756],{"class":110},[67,80821,3253],{"class":262},[67,80823,17369],{"class":73},[67,80825,80826,80828,80830,80832,80834,80836,80838],{"class":69,"line":18430},[67,80827,56456],{"class":77},[67,80829,53203],{"class":73},[67,80831,2437],{"class":77},[67,80833,53258],{"class":84},[67,80835,10756],{"class":77},[67,80837,53258],{"class":84},[67,80839,3148],{"class":73},[67,80841,80842,80844,80846,80848],{"class":69,"line":18436},[67,80843,63482],{"class":77},[67,80845,53203],{"class":73},[67,80847,63579],{"class":77},[67,80849,3148],{"class":73},[67,80851,80852,80854,80856,80858],{"class":69,"line":18459},[67,80853,59177],{"class":77},[67,80855,53203],{"class":73},[67,80857,80660],{"class":77},[67,80859,3148],{"class":73},[67,80861,80862,80864,80866,80868],{"class":69,"line":18473},[67,80863,65730],{"class":77},[67,80865,53203],{"class":73},[67,80867,56498],{"class":77},[67,80869,3148],{"class":73},[67,80871,80872,80874,80876,80878,80880],{"class":69,"line":18493},[67,80873,63511],{"class":77},[67,80875,53203],{"class":73},[67,80877,2689],{"class":77},[67,80879,53258],{"class":84},[67,80881,3148],{"class":73},[67,80883,80884],{"class":69,"line":18499},[67,80885,4020],{"class":73},[67,80887,80888],{"class":69,"line":18510},[67,80889,631],{"emptyLinePlaceholder":630},[67,80891,80892,80894,80896,80898],{"class":69,"line":18533},[67,80893,80756],{"class":110},[67,80895,3253],{"class":262},[67,80897,63660],{"class":110},[67,80899,17369],{"class":73},[67,80901,80902,80904,80906,80909],{"class":69,"line":18555},[67,80903,56645],{"class":77},[67,80905,53203],{"class":73},[67,80907,80908],{"class":77},"#05943c",[67,80910,3148],{"class":73},[67,80912,80913,80915,80917,80919],{"class":69,"line":18560},[67,80914,59177],{"class":77},[67,80916,53203],{"class":73},[67,80918,62603],{"class":77},[67,80920,3148],{"class":73},[67,80922,80923],{"class":69,"line":18566},[67,80924,4020],{"class":73},[67,80926,80927,80929,80931],{"class":69,"line":18580},[67,80928,54181],{"class":73},[67,80930,1903],{"class":262},[67,80932,323],{"class":73},[67,80934,80935,80937,80939],{"class":69,"line":18593},[67,80936,376],{"class":73},[67,80938,53100],{"class":262},[67,80940,323],{"class":73},[67,80942,80943],{"class":69,"line":18598},[67,80944,631],{"emptyLinePlaceholder":630},[67,80946,80947,80949,80951],{"class":69,"line":18612},[67,80948,259],{"class":73},[67,80950,53565],{"class":262},[67,80952,323],{"class":73},[67,80954,80955,80957,80959,80961,80963,80966],{"class":69,"line":18617},[67,80956,328],{"class":73},[67,80958,53377],{"class":262},[67,80960,55248],{"class":110},[67,80962,85],{"class":73},[67,80964,80965],{"class":114},"\"filter\"",[67,80967,323],{"class":73},[67,80969,80970,80972,80974,80976,80978,80980,80983,80985,80987,80990,80992],{"class":69,"line":18623},[67,80971,53107],{"class":73},[67,80973,2230],{"class":262},[67,80975,62818],{"class":110},[67,80977,85],{"class":73},[67,80979,62823],{"class":114},[67,80981,80982],{"class":110}," data-index",[67,80984,85],{"class":73},[67,80986,353],{"class":114},[67,80988,80989],{"class":73},">0-100元\u003C\u002F",[67,80991,2230],{"class":262},[67,80993,323],{"class":73},[67,80995,80996,80998,81000,81002,81004,81006,81008,81010,81012,81015,81017],{"class":69,"line":18628},[67,80997,53107],{"class":73},[67,80999,2230],{"class":262},[67,81001,62818],{"class":110},[67,81003,85],{"class":73},[67,81005,62823],{"class":114},[67,81007,80982],{"class":110},[67,81009,85],{"class":73},[67,81011,5522],{"class":114},[67,81013,81014],{"class":73},">100-300元\u003C\u002F",[67,81016,2230],{"class":262},[67,81018,323],{"class":73},[67,81020,81021,81023,81025,81027,81029,81031,81033,81035,81037,81040,81042],{"class":69,"line":18642},[67,81022,53107],{"class":73},[67,81024,2230],{"class":262},[67,81026,62818],{"class":110},[67,81028,85],{"class":73},[67,81030,62823],{"class":114},[67,81032,80982],{"class":110},[67,81034,85],{"class":73},[67,81036,5535],{"class":114},[67,81038,81039],{"class":73},">300元以上\u003C\u002F",[67,81041,2230],{"class":262},[67,81043,323],{"class":73},[67,81045,81046,81048,81050,81052,81054,81056,81059,81061],{"class":69,"line":18647},[67,81047,53107],{"class":73},[67,81049,2230],{"class":262},[67,81051,62818],{"class":110},[67,81053,85],{"class":73},[67,81055,62823],{"class":114},[67,81057,81058],{"class":73},">全部区间\u003C\u002F",[67,81060,2230],{"class":262},[67,81062,323],{"class":73},[67,81064,81065,81067,81069],{"class":69,"line":18652},[67,81066,54181],{"class":73},[67,81068,53377],{"class":262},[67,81070,323],{"class":73},[67,81072,81073,81075,81077,81079,81081,81083],{"class":69,"line":18666},[67,81074,328],{"class":73},[67,81076,53377],{"class":262},[67,81078,55248],{"class":110},[67,81080,85],{"class":73},[67,81082,64368],{"class":114},[67,81084,323],{"class":73},[67,81086,81087],{"class":69,"line":18678},[67,81088,81089],{"class":2058},"    \u003C!-- \u003Cdiv class=\"item\">\n",[67,81091,81092],{"class":69,"line":18683},[67,81093,81094],{"class":2058},"      \u003Cimg src=\"\" alt=\"\">\n",[67,81096,81097],{"class":69,"line":18696},[67,81098,81099],{"class":2058},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[67,81101,81102],{"class":69,"line":18701},[67,81103,81104],{"class":2058},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[67,81106,81107],{"class":69,"line":18706},[67,81108,81109],{"class":2058},"    \u003C\u002Fdiv> -->\n",[67,81111,81112,81114,81116],{"class":69,"line":18711},[67,81113,54181],{"class":73},[67,81115,53377],{"class":262},[67,81117,323],{"class":73},[67,81119,81120,81122,81124],{"class":69,"line":18724},[67,81121,328],{"class":73},[67,81123,53578],{"class":262},[67,81125,323],{"class":73},[67,81127,81128],{"class":69,"line":18729},[67,81129,81130],{"class":2058},"    \u002F\u002F 2. 初始化数据\n",[67,81132,81133,81135,81138,81140],{"class":69,"line":34402},[67,81134,13021],{"class":84},[67,81136,81137],{"class":77}," goodsList",[67,81139,671],{"class":84},[67,81141,57208],{"class":73},[67,81143,81144],{"class":69,"line":34408},[67,81145,81146],{"class":73},"      {\n",[67,81148,81149,81152,81155],{"class":69,"line":34414},[67,81150,81151],{"class":73},"        id: ",[67,81153,81154],{"class":114},"'4001172'",[67,81156,33238],{"class":73},[67,81158,81159,81162,81165],{"class":69,"line":34420},[67,81160,81161],{"class":73},"        name: ",[67,81163,81164],{"class":114},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[67,81166,33238],{"class":73},[67,81168,81169,81172,81175],{"class":69,"line":34426},[67,81170,81171],{"class":73},"        price: ",[67,81173,81174],{"class":114},"'289.00'",[67,81176,33238],{"class":73},[67,81178,81179,81182,81185],{"class":69,"line":34437},[67,81180,81181],{"class":73},"        picture: ",[67,81183,81184],{"class":114},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[67,81186,33238],{"class":73},[67,81188,81189],{"class":69,"line":34443},[67,81190,79652],{"class":73},[67,81192,81193],{"class":69,"line":34463},[67,81194,81146],{"class":73},[67,81196,81197,81199,81202],{"class":69,"line":34469},[67,81198,81151],{"class":73},[67,81200,81201],{"class":114},"'4001594'",[67,81203,33238],{"class":73},[67,81205,81206,81208,81211],{"class":69,"line":34480},[67,81207,81161],{"class":73},[67,81209,81210],{"class":114},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[67,81212,33238],{"class":73},[67,81214,81215,81217,81220],{"class":69,"line":34486},[67,81216,81171],{"class":73},[67,81218,81219],{"class":114},"'288.00'",[67,81221,33238],{"class":73},[67,81223,81224,81226,81229],{"class":69,"line":34492},[67,81225,81181],{"class":73},[67,81227,81228],{"class":114},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[67,81230,33238],{"class":73},[67,81232,81233],{"class":69,"line":34498},[67,81234,79652],{"class":73},[67,81236,81237],{"class":69,"line":34504},[67,81238,81146],{"class":73},[67,81240,81241,81243,81246],{"class":69,"line":34510},[67,81242,81151],{"class":73},[67,81244,81245],{"class":114},"'4001009'",[67,81247,33238],{"class":73},[67,81249,81250,81252,81255],{"class":69,"line":34516},[67,81251,81161],{"class":73},[67,81253,81254],{"class":114},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[67,81256,33238],{"class":73},[67,81258,81259,81261,81264],{"class":69,"line":34522},[67,81260,81171],{"class":73},[67,81262,81263],{"class":114},"'109.00'",[67,81265,33238],{"class":73},[67,81267,81268,81270,81273],{"class":69,"line":34542},[67,81269,81181],{"class":73},[67,81271,81272],{"class":114},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[67,81274,33238],{"class":73},[67,81276,81277],{"class":69,"line":34548},[67,81278,79652],{"class":73},[67,81280,81281],{"class":69,"line":34564},[67,81282,81146],{"class":73},[67,81284,81285,81287,81290],{"class":69,"line":34570},[67,81286,81151],{"class":73},[67,81288,81289],{"class":114},"'4001874'",[67,81291,33238],{"class":73},[67,81293,81294,81296,81299],{"class":69,"line":34584},[67,81295,81161],{"class":73},[67,81297,81298],{"class":114},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[67,81300,33238],{"class":73},[67,81302,81303,81305,81308],{"class":69,"line":34590},[67,81304,81171],{"class":73},[67,81306,81307],{"class":114},"'488.00'",[67,81309,33238],{"class":73},[67,81311,81312,81314,81317],{"class":69,"line":34605},[67,81313,81181],{"class":73},[67,81315,81316],{"class":114},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[67,81318,33238],{"class":73},[67,81320,81321],{"class":69,"line":34611},[67,81322,79652],{"class":73},[67,81324,81325],{"class":69,"line":34620},[67,81326,81146],{"class":73},[67,81328,81329,81331,81334],{"class":69,"line":34626},[67,81330,81151],{"class":73},[67,81332,81333],{"class":114},"'4001649'",[67,81335,33238],{"class":73},[67,81337,81338,81340,81343],{"class":69,"line":34635},[67,81339,81161],{"class":73},[67,81341,81342],{"class":114},"'大师监制龙泉青瓷茶叶罐'",[67,81344,33238],{"class":73},[67,81346,81347,81349,81352],{"class":69,"line":34641},[67,81348,81171],{"class":73},[67,81350,81351],{"class":114},"'139.00'",[67,81353,33238],{"class":73},[67,81355,81356,81358,81361],{"class":69,"line":34647},[67,81357,81181],{"class":73},[67,81359,81360],{"class":114},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[67,81362,33238],{"class":73},[67,81364,81365],{"class":69,"line":34656},[67,81366,79652],{"class":73},[67,81368,81369],{"class":69,"line":34662},[67,81370,81146],{"class":73},[67,81372,81373,81375,81378],{"class":69,"line":34673},[67,81374,81151],{"class":73},[67,81376,81377],{"class":114},"'3997185'",[67,81379,33238],{"class":73},[67,81381,81382,81384,81387],{"class":69,"line":34679},[67,81383,81161],{"class":73},[67,81385,81386],{"class":114},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[67,81388,33238],{"class":73},[67,81390,81391,81393,81396],{"class":69,"line":34698},[67,81392,81171],{"class":73},[67,81394,81395],{"class":114},"'108.00'",[67,81397,33238],{"class":73},[67,81399,81400,81402,81405],{"class":69,"line":34704},[67,81401,81181],{"class":73},[67,81403,81404],{"class":114},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[67,81406,33238],{"class":73},[67,81408,81409],{"class":69,"line":34715},[67,81410,79652],{"class":73},[67,81412,81413],{"class":69,"line":34721},[67,81414,81146],{"class":73},[67,81416,81417,81419,81422],{"class":69,"line":34741},[67,81418,81151],{"class":73},[67,81420,81421],{"class":114},"'3997403'",[67,81423,33238],{"class":73},[67,81425,81426,81428,81431],{"class":69,"line":34757},[67,81427,81161],{"class":73},[67,81429,81430],{"class":114},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[67,81432,33238],{"class":73},[67,81434,81435,81437,81440],{"class":69,"line":34763},[67,81436,81171],{"class":73},[67,81438,81439],{"class":114},"'100.00'",[67,81441,33238],{"class":73},[67,81443,81444,81446,81449],{"class":69,"line":34777},[67,81445,81181],{"class":73},[67,81447,81448],{"class":114},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[67,81450,33238],{"class":73},[67,81452,81453],{"class":69,"line":34783},[67,81454,79652],{"class":73},[67,81456,81457],{"class":69,"line":34789},[67,81458,81146],{"class":73},[67,81460,81461,81463,81466],{"class":69,"line":34800},[67,81462,81151],{"class":73},[67,81464,81465],{"class":114},"'3998274'",[67,81467,33238],{"class":73},[67,81469,81470,81472,81475],{"class":69,"line":34806},[67,81471,81161],{"class":73},[67,81473,81474],{"class":114},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[67,81476,33238],{"class":73},[67,81478,81479,81481,81483],{"class":69,"line":34812},[67,81480,81171],{"class":73},[67,81482,81351],{"class":114},[67,81484,33238],{"class":73},[67,81486,81487,81489,81492],{"class":69,"line":34822},[67,81488,81181],{"class":73},[67,81490,81491],{"class":114},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[67,81493,33238],{"class":73},[67,81495,81496],{"class":69,"line":34828},[67,81497,79652],{"class":73},[67,81499,81500],{"class":69,"line":34839},[67,81501,54871],{"class":73},[67,81503,81504],{"class":69,"line":34845},[67,81505,631],{"emptyLinePlaceholder":630},[67,81507,81508],{"class":69,"line":34855},[67,81509,81510],{"class":2058},"    \u002F\u002F 1.渲染函数\n",[67,81512,81513,81515,81517,81519,81521],{"class":69,"line":34860},[67,81514,71844],{"class":84},[67,81516,71847],{"class":110},[67,81518,854],{"class":73},[67,81520,5700],{"class":7033},[67,81522,14241],{"class":73},[67,81524,81525],{"class":69,"line":34866},[67,81526,81527],{"class":2058},"      \u002F\u002F 声明空字符串\n",[67,81529,81530,81533,81536,81538],{"class":69,"line":34915},[67,81531,81532],{"class":84},"      let",[67,81534,81535],{"class":73}," str ",[67,81537,85],{"class":84},[67,81539,71864],{"class":114},[67,81541,81542],{"class":69,"line":34962},[67,81543,71869],{"class":2058},[67,81545,81546,81548,81551,81553,81556,81559],{"class":69,"line":34967},[67,81547,59768],{"class":73},[67,81549,81550],{"class":110},"forEach",[67,81552,854],{"class":73},[67,81554,81555],{"class":7033},"item",[67,81557,81558],{"class":84}," =>",[67,81560,17369],{"class":73},[67,81562,81563,81565,81568,81571,81573,81576,81578,81581,81584,81586],{"class":69,"line":34973},[67,81564,63031],{"class":84},[67,81566,81567],{"class":73}," { ",[67,81569,81570],{"class":77},"name",[67,81572,1868],{"class":73},[67,81574,81575],{"class":77},"price",[67,81577,1868],{"class":73},[67,81579,81580],{"class":77},"picture",[67,81582,81583],{"class":73}," } ",[67,81585,85],{"class":84},[67,81587,81588],{"class":73}," item\n",[67,81590,81591,81594,81596],{"class":69,"line":34992},[67,81592,81593],{"class":73},"        str ",[67,81595,11283],{"class":84},[67,81597,71928],{"class":114},[67,81599,81600],{"class":69,"line":34998},[67,81601,81602],{"class":114},"          \u003Cdiv class=\"item\">\n",[67,81604,81605,81608,81610],{"class":69,"line":35018},[67,81606,81607],{"class":114},"            \u003Cimg src=\"${",[67,81609,81580],{"class":73},[67,81611,81612],{"class":114},"}\" alt=\"\">\n",[67,81614,81615,81618,81620],{"class":69,"line":35024},[67,81616,81617],{"class":114},"            \u003Cp class=\"name\">${",[67,81619,81570],{"class":73},[67,81621,81622],{"class":114},"}\u003C\u002Fp>\n",[67,81624,81625,81628,81630],{"class":69,"line":35030},[67,81626,81627],{"class":114},"            \u003Cp class=\"price\">${",[67,81629,81575],{"class":73},[67,81631,81622],{"class":114},[67,81633,81634],{"class":69,"line":35040},[67,81635,81636],{"class":114},"          \u003C\u002Fdiv>\n",[67,81638,81639],{"class":69,"line":35045},[67,81640,81641],{"class":114},"        `\n",[67,81643,81644],{"class":69,"line":35051},[67,81645,66575],{"class":73},[67,81647,81648],{"class":69,"line":35067},[67,81649,81650],{"class":2058},"      \u002F\u002F 追加给List\n",[67,81652,81653,81655,81657,81659,81662,81664,81666],{"class":69,"line":35112},[67,81654,57532],{"class":73},[67,81656,56160],{"class":110},[67,81658,854],{"class":73},[67,81660,81661],{"class":114},"'.list'",[67,81663,76009],{"class":73},[67,81665,85],{"class":84},[67,81667,75745],{"class":73},[67,81669,81670],{"class":69,"line":35118},[67,81671,4020],{"class":73},[67,81673,81674],{"class":69,"line":35124},[67,81675,81676],{"class":2058},"    \u002F\u002F 页面一打开就需要渲染\n",[67,81678,81679,81682],{"class":69,"line":35130},[67,81680,81681],{"class":110},"    render",[67,81683,81684],{"class":73},"(goodsList)\n",[67,81686,81687],{"class":69,"line":35141},[67,81688,81689],{"class":2058},"    \u002F\u002F 2.过滤筛选\n",[67,81691,81692,81694,81696,81698,81701,81703,81705,81707,81709,81711,81713,81715],{"class":69,"line":35147},[67,81693,54171],{"class":73},[67,81695,56160],{"class":110},[67,81697,854],{"class":73},[67,81699,81700],{"class":114},"'.filter'",[67,81702,32603],{"class":73},[67,81704,59574],{"class":110},[67,81706,854],{"class":73},[67,81708,59579],{"class":114},[67,81710,1868],{"class":73},[67,81712,2074],{"class":7033},[67,81714,81558],{"class":84},[67,81716,17369],{"class":73},[67,81718,81719],{"class":69,"line":35153},[67,81720,81721],{"class":2058},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[67,81723,81724,81726,81728,81731,81733,81735,81737,81739],{"class":69,"line":35159},[67,81725,59989],{"class":84},[67,81727,81567],{"class":73},[67,81729,81730],{"class":77},"tagName",[67,81732,1868],{"class":73},[67,81734,33309],{"class":77},[67,81736,81583],{"class":73},[67,81738,85],{"class":84},[67,81740,81741],{"class":73}," e.target\n",[67,81743,81744],{"class":69,"line":35177},[67,81745,81746],{"class":2058},"      \u002F\u002F 判断\n",[67,81748,81749,81751,81753,81755,81757],{"class":69,"line":35191},[67,81750,56241],{"class":84},[67,81752,68794],{"class":73},[67,81754,56247],{"class":84},[67,81756,70016],{"class":114},[67,81758,14241],{"class":73},[67,81760,81761],{"class":69,"line":35200},[67,81762,81763],{"class":2058},"        \u002F\u002F console.log(11)\n",[67,81765,81766],{"class":69,"line":35209},[67,81767,81768],{"class":2058},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[67,81770,81771],{"class":69,"line":35218},[67,81772,81773],{"class":2058},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[67,81775,81776,81778,81780,81782],{"class":69,"line":35227},[67,81777,53595],{"class":84},[67,81779,53598],{"class":73},[67,81781,85],{"class":84},[67,81783,81784],{"class":73}," goodsList\n",[67,81786,81787,81789,81792,81794,81797],{"class":69,"line":35233},[67,81788,4329],{"class":84},[67,81790,81791],{"class":73}," (dataset.index ",[67,81793,56247],{"class":84},[67,81795,81796],{"class":114}," '1'",[67,81798,14241],{"class":73},[67,81800,81801,81804,81806,81809,81812,81814,81816,81818,81821,81823,81825,81828,81830,81832,81834],{"class":69,"line":35239},[67,81802,81803],{"class":73},"          arr ",[67,81805,85],{"class":84},[67,81807,81808],{"class":73}," goodsList.",[67,81810,81811],{"class":110},"filter",[67,81813,854],{"class":73},[67,81815,81555],{"class":7033},[67,81817,81558],{"class":84},[67,81819,81820],{"class":73}," item.price ",[67,81822,3553],{"class":84},[67,81824,5913],{"class":77},[67,81826,81827],{"class":84}," &&",[67,81829,81820],{"class":73},[67,81831,3442],{"class":84},[67,81833,7571],{"class":77},[67,81835,829],{"class":73},[67,81837,81838,81841,81843,81845,81847,81849,81852],{"class":69,"line":35247},[67,81839,81840],{"class":73},"        } ",[67,81842,3544],{"class":84},[67,81844,3547],{"class":84},[67,81846,81791],{"class":73},[67,81848,56247],{"class":84},[67,81850,81851],{"class":114}," '2'",[67,81853,14241],{"class":73},[67,81855,81856,81858,81860,81862,81864,81866,81868,81870,81872,81874,81876,81878,81880,81882,81885],{"class":69,"line":35252},[67,81857,81803],{"class":73},[67,81859,85],{"class":84},[67,81861,81808],{"class":73},[67,81863,81811],{"class":110},[67,81865,854],{"class":73},[67,81867,81555],{"class":7033},[67,81869,81558],{"class":84},[67,81871,81820],{"class":73},[67,81873,3553],{"class":84},[67,81875,7571],{"class":77},[67,81877,81827],{"class":84},[67,81879,81820],{"class":73},[67,81881,3442],{"class":84},[67,81883,81884],{"class":77}," 300",[67,81886,829],{"class":73},[67,81888,81889,81891,81893,81895,81897,81899,81902],{"class":69,"line":35258},[67,81890,81840],{"class":73},[67,81892,3544],{"class":84},[67,81894,3547],{"class":84},[67,81896,81791],{"class":73},[67,81898,56247],{"class":84},[67,81900,81901],{"class":114}," '3'",[67,81903,14241],{"class":73},[67,81905,81906,81908,81910,81912,81914,81916,81918,81920,81922,81924,81926],{"class":69,"line":35269},[67,81907,81803],{"class":73},[67,81909,85],{"class":84},[67,81911,81808],{"class":73},[67,81913,81811],{"class":110},[67,81915,854],{"class":73},[67,81917,81555],{"class":7033},[67,81919,81558],{"class":84},[67,81921,81820],{"class":73},[67,81923,3553],{"class":84},[67,81925,81884],{"class":77},[67,81927,829],{"class":73},[67,81929,81930],{"class":69,"line":35275},[67,81931,4361],{"class":73},[67,81933,81934],{"class":69,"line":35295},[67,81935,81936],{"class":2058},"        \u002F\u002F 渲染函数\n",[67,81938,81939,81941],{"class":69,"line":35301},[67,81940,72168],{"class":110},[67,81942,54176],{"class":73},[67,81944,81945],{"class":69,"line":35307},[67,81946,54162],{"class":73},[67,81948,81949],{"class":69,"line":35313},[67,81950,631],{"emptyLinePlaceholder":630},[67,81952,81953],{"class":69,"line":35330},[67,81954,35230],{"class":73},[67,81956,81957,81959,81961],{"class":69,"line":35336},[67,81958,54181],{"class":73},[67,81960,53578],{"class":262},[67,81962,323],{"class":73},[67,81964,81965,81967,81969],{"class":69,"line":35342},[67,81966,376],{"class":73},[67,81968,53565],{"class":262},[67,81970,323],{"class":73},[67,81972,81973],{"class":69,"line":35348},[67,81974,631],{"emptyLinePlaceholder":630},[67,81976,81977,81979,81981],{"class":69,"line":35354},[67,81978,376],{"class":73},[67,81980,52403],{"class":262},[67,81982,323],{"class":73},[14,81984,81986],{"id":81985},"_410-深入了解对象","4.10 深入了解对象",[391,81988,81990],{"id":81989},"_4101-创建对象","4.10.1 创建对象",[19,81992,81993],{},[3317,81994],{"alt":63,"src":81995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81997,81998],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[391,82000,82002],{"id":82001},"_4102-构造函数","4.10.2 构造函数",[19,82004,82005,82008],{},[2144,82006,82007],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82010,82011,82014],{},[2144,82012,82013],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[58,82016,82018],{"className":52401,"code":82017,"language":52403,"meta":63,"style":63},"\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",[32,82019,82020,82028,82033,82054,82067,82079,82091,82095,82100,82127,82132,82159],{"__ignoreMap":63},[67,82021,82022,82024,82026],{"class":69,"line":70},[67,82023,259],{"class":73},[67,82025,53578],{"class":262},[67,82027,323],{"class":73},[67,82029,82030],{"class":69,"line":191},[67,82031,82032],{"class":2058},"\u002F\u002F例：\n",[67,82034,82035,82037,82040,82042,82044,82046,82048,82050,82052],{"class":69,"line":202},[67,82036,56210],{"class":84},[67,82038,82039],{"class":110}," Pig",[67,82041,854],{"class":73},[67,82043,81570],{"class":7033},[67,82045,2369],{"class":73},[67,82047,71981],{"class":7033},[67,82049,2369],{"class":73},[67,82051,71998],{"class":7033},[67,82053,14241],{"class":73},[67,82055,82056,82059,82062,82064],{"class":69,"line":641},[67,82057,82058],{"class":77},"    this",[67,82060,82061],{"class":73},".name",[67,82063,85],{"class":84},[67,82065,82066],{"class":73},"name\n",[67,82068,82069,82071,82074,82076],{"class":69,"line":655},[67,82070,82058],{"class":77},[67,82072,82073],{"class":73},".age",[67,82075,85],{"class":84},[67,82077,82078],{"class":73},"age\n",[67,82080,82081,82083,82086,82088],{"class":69,"line":660},[67,82082,82058],{"class":77},[67,82084,82085],{"class":73},".gender",[67,82087,85],{"class":84},[67,82089,82090],{"class":73},"gender    \n",[67,82092,82093],{"class":69,"line":665},[67,82094,3419],{"class":73},[67,82096,82097],{"class":69,"line":677},[67,82098,82099],{"class":2058},"\u002F\u002F创建佩奇对象\n",[67,82101,82102,82104,82107,82109,82111,82113,82116,82118,82120,82122,82125],{"class":69,"line":683},[67,82103,8608],{"class":84},[67,82105,82106],{"class":77}," Peppa",[67,82108,13517],{"class":84},[67,82110,82039],{"class":110},[67,82112,854],{"class":73},[67,82114,82115],{"class":114},"'佩奇'",[67,82117,2369],{"class":73},[67,82119,2335],{"class":77},[67,82121,2369],{"class":73},[67,82123,82124],{"class":114},"'女'",[67,82126,829],{"class":73},[67,82128,82129],{"class":69,"line":689},[67,82130,82131],{"class":2058},"\u002F\u002F创建乔治对象\n",[67,82133,82134,82136,82139,82141,82143,82145,82148,82150,82152,82154,82157],{"class":69,"line":694},[67,82135,8608],{"class":84},[67,82137,82138],{"class":77}," George",[67,82140,13517],{"class":84},[67,82142,82039],{"class":110},[67,82144,854],{"class":73},[67,82146,82147],{"class":114},"'乔治'",[67,82149,2369],{"class":73},[67,82151,2071],{"class":77},[67,82153,2369],{"class":73},[67,82155,82156],{"class":114},"'男'",[67,82158,829],{"class":73},[67,82160,82161,82163,82165],{"class":69,"line":700},[67,82162,376],{"class":73},[67,82164,53578],{"class":262},[67,82166,323],{"class":73},[19,82168,82169],{},[3317,82170],{"alt":63,"src":82171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82173,82174],{},[3317,82175],{"alt":63,"src":82176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82178,82179],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82181,82182],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82184,82185],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82187,82188],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82190,82191],{},"这里用等号是因为：对象.属性=值",[19,82193,82194],{},"①利用对象字面量创建对象",[19,82196,82197],{},"const o={",[19,82199,82200],{},"name:'pink'",[19,82202,82203],{},"} ②利用new Object创建对象",[19,82205,82206],{},"const o=new Object({name:'pink'})",[19,82208,82209],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82211,82212],{},"构造函数创建对象的执行过程：",[19,82214,82215],{},[3317,82216],{"alt":63,"src":82217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[391,82219,82221],{"id":82220},"_4103-实例成员","4.10.3 实例成员",[19,82223,82224],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[26,82226,82227,82230,82233],{},[29,82228,82229],{},"实例对象的属性和方法即为实例成员",[29,82231,82232],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[29,82234,82235],{},"构造函数创建的实例对象彼此独立互不影响",[391,82237,82239],{"id":82238},"_4104-静态成员","4.10.4 静态成员",[19,82241,82242],{},[3317,82243],{"alt":63,"src":82244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82246,82247],{},"静态成员有Date.now() Math.PI Math.random()",[19,82249,82250],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82252,82253],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82255,82256],{},"function Pig(name) n {",[19,82258,82259],{},"this.name=name",[19,82261,2934],{},[19,82263,82264],{},"Pig.eyes=2",[19,82266,82267],{},"Pig.sayHai=function () { console.log(this) }",[19,82269,82270],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82272,82273],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82275,13132],{},[26,82277,82278,82281,82284,82287,82290],{},[29,82279,82280],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[29,82282,82283],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[29,82285,82286],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[29,82288,82289],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[29,82291,82292],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82294,82295],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[391,82297,82299],{"id":82298},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82301,82302],{},"内置构造函数包含：",[19,82304,82305],{},[3317,82306],{"alt":63,"src":82307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82309,82310],{},[3317,82311],{"alt":63,"src":82312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82314,82315],{},"这些基本数据类型，js对他们进行了包装",[53578,82317,82318],{},"\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",[23794,82320,82322],{"id":82321},"_41051-object","4.10.5.1 Object",[19,82324,82325],{},"Object 是内置的构造函数，用于创建普通对象",[19,82327,82328],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[58,82330,82332],{"className":52401,"code":82331,"language":52403,"meta":63,"style":63},"const user=new Object({name:'小明',age:15})\n",[32,82333,82334],{"__ignoreMap":63},[67,82335,82336],{"class":69,"line":70},[67,82337,82331],{"class":73},[19,82339,82340],{},"三个常用的静态方法：",[24706,82342,82344],{"id":82343},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82346,82347],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82349,82350],{},[3317,82351],{"alt":63,"src":82352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82354,82355],{},[3317,82356],{"alt":63,"src":82357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[58,82359,82361],{"className":250,"code":82360,"language":252,"meta":63,"style":63},"\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",[32,82362,82363,82371,82379,82384,82389,82394,82399,82404,82409,82417],{"__ignoreMap":63},[67,82364,82365,82367,82369],{"class":69,"line":70},[67,82366,259],{"class":73},[67,82368,53565],{"class":262},[67,82370,323],{"class":73},[67,82372,82373,82375,82377],{"class":69,"line":191},[67,82374,328],{"class":73},[67,82376,53578],{"class":262},[67,82378,323],{"class":73},[67,82380,82381],{"class":69,"line":202},[67,82382,82383],{"class":73},"    const o = { name: 'pink', age: 6 }\n",[67,82385,82386],{"class":69,"line":641},[67,82387,82388],{"class":73},"    \u002F\u002F 获得所有属性名\n",[67,82390,82391],{"class":69,"line":655},[67,82392,82393],{"class":73},"    const arr = Object.keys(o)\n",[67,82395,82396],{"class":69,"line":660},[67,82397,82398],{"class":73},"    console.log(arr)\n",[67,82400,82401],{"class":69,"line":665},[67,82402,82403],{"class":73},"    \u002F\u002F 获得所有属性值\n",[67,82405,82406],{"class":69,"line":677},[67,82407,82408],{"class":73},"    console.log(Object.values(o))\n",[67,82410,82411,82413,82415],{"class":69,"line":683},[67,82412,54181],{"class":73},[67,82414,53578],{"class":262},[67,82416,323],{"class":73},[67,82418,82419,82421,82423],{"class":69,"line":689},[67,82420,376],{"class":73},[67,82422,53565],{"class":262},[67,82424,323],{"class":73},[24706,82426,82428],{"id":82427},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82430,82431],{},"Object.assign(oo,o)",[19,82433,82434],{},"后的东西添加给前 是追加",[19,82436,82437],{},[3317,82438],{"alt":63,"src":82439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82441,82442],{},[3317,82443],{"alt":63,"src":82444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[58,82446,82448],{"className":250,"code":82447,"language":252,"meta":63,"style":63},"\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",[32,82449,82450,82458,82466,82470,82474,82478,82482,82486,82490,82495,82500,82505,82510,82515,82523],{"__ignoreMap":63},[67,82451,82452,82454,82456],{"class":69,"line":70},[67,82453,259],{"class":73},[67,82455,53565],{"class":262},[67,82457,323],{"class":73},[67,82459,82460,82462,82464],{"class":69,"line":191},[67,82461,328],{"class":73},[67,82463,53578],{"class":262},[67,82465,323],{"class":73},[67,82467,82468],{"class":69,"line":202},[67,82469,82383],{"class":73},[67,82471,82472],{"class":69,"line":641},[67,82473,82388],{"class":73},[67,82475,82476],{"class":69,"line":655},[67,82477,82393],{"class":73},[67,82479,82480],{"class":69,"line":660},[67,82481,82398],{"class":73},[67,82483,82484],{"class":69,"line":665},[67,82485,82403],{"class":73},[67,82487,82488],{"class":69,"line":677},[67,82489,82408],{"class":73},[67,82491,82492],{"class":69,"line":683},[67,82493,82494],{"class":73},"    const oo = {}\n",[67,82496,82497],{"class":69,"line":689},[67,82498,82499],{"class":73},"    Object.assign(oo, o)\n",[67,82501,82502],{"class":69,"line":694},[67,82503,82504],{"class":73},"    console.log(oo)\n",[67,82506,82507],{"class":69,"line":700},[67,82508,82509],{"class":73},"    Object.assign(o, { gender: '女' })\n",[67,82511,82512],{"class":69,"line":706},[67,82513,82514],{"class":73},"    console.log(o)\n",[67,82516,82517,82519,82521],{"class":69,"line":712},[67,82518,54181],{"class":73},[67,82520,53578],{"class":262},[67,82522,323],{"class":73},[67,82524,82525,82527,82529],{"class":69,"line":717},[67,82526,376],{"class":73},[67,82528,53565],{"class":262},[67,82530,323],{"class":73},[19,82532,82533],{},[3317,82534],{"alt":63,"src":82535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23794,82537,82539],{"id":82538},"_41052-array","4.10.5.2 Array",[19,82541,82542],{},"Array 是内置的构造函数，用于创建数组",[19,82544,82545],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[58,82547,82549],{"className":52401,"code":82548,"language":52403,"meta":63,"style":63},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[32,82550,82551,82556],{"__ignoreMap":63},[67,82552,82553],{"class":69,"line":70},[67,82554,82555],{"class":73},"const arr=new Array(3,5)\n",[67,82557,82558],{"class":69,"line":191},[67,82559,82560],{"class":73},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82562,82563],{},"Array的实例方法，这个方法是实例成员",[19,82565,82566],{},[3317,82567],{"alt":63,"src":82568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24706,82570,82572],{"id":82571},"_410521-reduce","4.10.5.2.1 reduce",[19,82574,82575],{},[3317,82576],{"alt":63,"src":82577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[58,82579,82581],{"className":250,"code":82580,"language":252,"meta":63,"style":63},"\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",[32,82582,82583,82591,82599,82604,82609,82614,82619,82623,82628,82633,82638,82642,82647,82652,82656,82661,82666,82671,82679],{"__ignoreMap":63},[67,82584,82585,82587,82589],{"class":69,"line":70},[67,82586,259],{"class":73},[67,82588,53565],{"class":262},[67,82590,323],{"class":73},[67,82592,82593,82595,82597],{"class":69,"line":191},[67,82594,328],{"class":73},[67,82596,53578],{"class":262},[67,82598,323],{"class":73},[67,82600,82601],{"class":69,"line":202},[67,82602,82603],{"class":73},"    const arr = [1, 5, 8]\n",[67,82605,82606],{"class":69,"line":641},[67,82607,82608],{"class":73},"    \u002F\u002F 1.没有初始值\n",[67,82610,82611],{"class":69,"line":655},[67,82612,82613],{"class":73},"    const total = arr.reduce(function (prev, current) {\n",[67,82615,82616],{"class":69,"line":660},[67,82617,82618],{"class":73},"      return prev + current\n",[67,82620,82621],{"class":69,"line":665},[67,82622,35230],{"class":73},[67,82624,82625],{"class":69,"line":677},[67,82626,82627],{"class":73},"    console.log(total)   \u002F\u002F14\n",[67,82629,82630],{"class":69,"line":683},[67,82631,82632],{"class":73},"    \u002F\u002F 2.有初始值\n",[67,82634,82635],{"class":69,"line":689},[67,82636,82637],{"class":73},"    const total1 = arr.reduce(function (prev, current) {\n",[67,82639,82640],{"class":69,"line":694},[67,82641,82618],{"class":73},[67,82643,82644],{"class":69,"line":700},[67,82645,82646],{"class":73},"    }, 10)\n",[67,82648,82649],{"class":69,"line":706},[67,82650,82651],{"class":73},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[67,82653,82654],{"class":69,"line":712},[67,82655,631],{"emptyLinePlaceholder":630},[67,82657,82658],{"class":69,"line":717},[67,82659,82660],{"class":73},"    \u002F\u002F 3.箭头函数写法\n",[67,82662,82663],{"class":69,"line":723},[67,82664,82665],{"class":73},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[67,82667,82668],{"class":69,"line":729},[67,82669,82670],{"class":73},"    console.log(total2)   \u002F\u002F24\n",[67,82672,82673,82675,82677],{"class":69,"line":735},[67,82674,54181],{"class":73},[67,82676,53578],{"class":262},[67,82678,323],{"class":73},[67,82680,82681,82683,82685],{"class":69,"line":741},[67,82682,376],{"class":73},[67,82684,53565],{"class":262},[67,82686,323],{"class":73},[19,82688,82689],{},"执行过程：",[26,82691,82692,82695,82698],{},[29,82693,82694],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[29,82696,82697],{},"每一次循环，把返回值给作为下一次循环的上一次值",[29,82699,82700],{},"如果有起始值，则起始值作为上一次值",[58,82702,82704],{"className":250,"code":82703,"language":252,"meta":63,"style":63},"\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",[32,82705,82706,82714,82722,82726,82730,82734,82738,82742,82746,82751,82756,82761,82766,82771,82775,82779,82783,82787,82791,82795,82800,82804,82809,82813,82818,82823,82827,82831,82835,82843],{"__ignoreMap":63},[67,82707,82708,82710,82712],{"class":69,"line":70},[67,82709,259],{"class":73},[67,82711,53565],{"class":262},[67,82713,323],{"class":73},[67,82715,82716,82718,82720],{"class":69,"line":191},[67,82717,328],{"class":73},[67,82719,53578],{"class":262},[67,82721,323],{"class":73},[67,82723,82724],{"class":69,"line":202},[67,82725,82603],{"class":73},[67,82727,82728],{"class":69,"line":641},[67,82729,82608],{"class":73},[67,82731,82732],{"class":69,"line":655},[67,82733,82613],{"class":73},[67,82735,82736],{"class":69,"line":660},[67,82737,82618],{"class":73},[67,82739,82740],{"class":69,"line":665},[67,82741,35230],{"class":73},[67,82743,82744],{"class":69,"line":677},[67,82745,82627],{"class":73},[67,82747,82748],{"class":69,"line":683},[67,82749,82750],{"class":73},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[67,82752,82753],{"class":69,"line":689},[67,82754,82755],{"class":73},"    \u002F\u002F     1              5                    6\n",[67,82757,82758],{"class":69,"line":694},[67,82759,82760],{"class":73},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[67,82762,82763],{"class":69,"line":700},[67,82764,82765],{"class":73},"    \u002F\u002F     6              8                    14\n",[67,82767,82768],{"class":69,"line":706},[67,82769,82770],{"class":73},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[67,82772,82773],{"class":69,"line":712},[67,82774,82632],{"class":73},[67,82776,82777],{"class":69,"line":717},[67,82778,82637],{"class":73},[67,82780,82781],{"class":69,"line":723},[67,82782,82618],{"class":73},[67,82784,82785],{"class":69,"line":729},[67,82786,82646],{"class":73},[67,82788,82789],{"class":69,"line":735},[67,82790,82651],{"class":73},[67,82792,82793],{"class":69,"line":741},[67,82794,82750],{"class":73},[67,82796,82797],{"class":69,"line":747},[67,82798,82799],{"class":73},"    \u002F\u002F     10             1                     11\n",[67,82801,82802],{"class":69,"line":753},[67,82803,82760],{"class":73},[67,82805,82806],{"class":69,"line":758},[67,82807,82808],{"class":73},"    \u002F\u002F     11             5                    16\n",[67,82810,82811],{"class":69,"line":764},[67,82812,82760],{"class":73},[67,82814,82815],{"class":69,"line":770},[67,82816,82817],{"class":73},"    \u002F\u002F     16             8                    24\n",[67,82819,82820],{"class":69,"line":776},[67,82821,82822],{"class":73},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[67,82824,82825],{"class":69,"line":782},[67,82826,82660],{"class":73},[67,82828,82829],{"class":69,"line":788},[67,82830,82665],{"class":73},[67,82832,82833],{"class":69,"line":793},[67,82834,82670],{"class":73},[67,82836,82837,82839,82841],{"class":69,"line":798},[67,82838,54181],{"class":73},[67,82840,53578],{"class":262},[67,82842,323],{"class":73},[67,82844,82845,82847,82849],{"class":69,"line":816},[67,82846,376],{"class":73},[67,82848,53565],{"class":262},[67,82850,323],{"class":73},[24706,82852,82854],{"id":82853},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82856,82857],{},[3317,82858],{"alt":63,"src":82859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[58,82861,82863],{"className":250,"code":82862,"language":252,"meta":63,"style":63},"\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",[32,82864,82865,82873,82881,82886,82891,82896,82901,82905,82910,82915,82920,82925,82930,82935,82939,82944,82948,82953,82961],{"__ignoreMap":63},[67,82866,82867,82869,82871],{"class":69,"line":70},[67,82868,259],{"class":73},[67,82870,53565],{"class":262},[67,82872,323],{"class":73},[67,82874,82875,82877,82879],{"class":69,"line":191},[67,82876,328],{"class":73},[67,82878,53578],{"class":262},[67,82880,323],{"class":73},[67,82882,82883],{"class":69,"line":202},[67,82884,82885],{"class":73},"    const arr = [\n",[67,82887,82888],{"class":69,"line":641},[67,82889,82890],{"class":73},"      { name: '张三', salary: 10000 },\n",[67,82892,82893],{"class":69,"line":655},[67,82894,82895],{"class":73},"      { name: '李四', salary: 10000 },\n",[67,82897,82898],{"class":69,"line":660},[67,82899,82900],{"class":73},"      { name: '王五', salary: 10000 }\n",[67,82902,82903],{"class":69,"line":665},[67,82904,54871],{"class":73},[67,82906,82907],{"class":69,"line":677},[67,82908,82909],{"class":73},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[67,82911,82912],{"class":69,"line":683},[67,82913,82914],{"class":73},"    \u002F\u002F prev是累计值\n",[67,82916,82917],{"class":69,"line":689},[67,82918,82919],{"class":73},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[67,82921,82922],{"class":69,"line":694},[67,82923,82924],{"class":73},"    console.log(total)\n",[67,82926,82927],{"class":69,"line":700},[67,82928,82929],{"class":73},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[67,82931,82932],{"class":69,"line":706},[67,82933,82934],{"class":73},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[67,82936,82937],{"class":69,"line":712},[67,82938,82929],{"class":73},[67,82940,82941],{"class":69,"line":717},[67,82942,82943],{"class":73},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[67,82945,82946],{"class":69,"line":723},[67,82947,82929],{"class":73},[67,82949,82950],{"class":69,"line":729},[67,82951,82952],{"class":73},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[67,82954,82955,82957,82959],{"class":69,"line":735},[67,82956,54181],{"class":73},[67,82958,53578],{"class":262},[67,82960,323],{"class":73},[67,82962,82963,82965,82967],{"class":69,"line":741},[67,82964,376],{"class":73},[67,82966,53565],{"class":262},[67,82968,323],{"class":73},[24706,82970,82972],{"id":82971},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82974,82975],{},[3317,82976],{"alt":63,"src":82977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82979,82980],{},[3317,82981],{"alt":63,"src":82982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[26,82984,82985],{},[29,82986,82987],{},"find()",[19,82989,82990],{},"循环查找，找到第一个就ok",[19,82992,82993],{},[2230,82994,82997],{"href":82995,"rel":82996},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25657],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[58,82999,83001],{"className":52401,"code":83000,"language":52403,"meta":63,"style":63},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[32,83002,83003,83008,83013],{"__ignoreMap":63},[67,83004,83005],{"class":69,"line":70},[67,83006,83007],{"class":73},"const array1 = [5, 12, 8, 130, 44]\n",[67,83009,83010],{"class":69,"line":191},[67,83011,83012],{"class":73},"const found = array1.find((element) => element > 10)\n",[67,83014,83015],{"class":69,"line":202},[67,83016,83017],{"class":73},"console.log(found)  \u002F\u002F12\n",[19,83019,83020,83022,83023,83028,83029,83032,83033,83035,83036,83041,83042,83044,83045,83047,83048,83050,83051],{},[32,83021,82987],{}," 方法是一个",[2230,83024,83027],{"href":83025,"rel":83026},"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",[25657],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[32,83030,83031],{},"callbackFn"," 函数，直到 ",[32,83034,83031],{}," 返回一个",[2230,83037,83040],{"href":83038,"rel":83039},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25657],"真值","。然后 ",[32,83043,82987],{}," 返回该元素并停止迭代数组。如果 ",[32,83046,83031],{}," 从未返回真值，则 ",[32,83049,82987],{}," 返回 ",[32,83052,83053],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[58,83055,83057],{"className":250,"code":83056,"language":252,"meta":63,"style":63},"\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",[32,83058,83059,83067,83075,83080,83085,83090,83094,83099,83104,83108,83113,83118,83122,83126,83131,83136,83140,83144,83149,83154,83159,83164,83169,83173,83178,83183,83188,83193,83197,83202,83210],{"__ignoreMap":63},[67,83060,83061,83063,83065],{"class":69,"line":70},[67,83062,259],{"class":73},[67,83064,53565],{"class":262},[67,83066,323],{"class":73},[67,83068,83069,83071,83073],{"class":69,"line":191},[67,83070,328],{"class":73},[67,83072,53578],{"class":262},[67,83074,323],{"class":73},[67,83076,83077],{"class":69,"line":202},[67,83078,83079],{"class":73},"    const arr = ['red', 'blue', 'green']\n",[67,83081,83082],{"class":69,"line":641},[67,83083,83084],{"class":73},"    const found = arr.find(item => item === 'pink')\n",[67,83086,83087],{"class":69,"line":655},[67,83088,83089],{"class":73},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[67,83091,83092],{"class":69,"line":660},[67,83093,631],{"emptyLinePlaceholder":630},[67,83095,83096],{"class":69,"line":665},[67,83097,83098],{"class":73},"    \u002F\u002F 使用场景，用于查找数据\n",[67,83100,83101],{"class":69,"line":677},[67,83102,83103],{"class":73},"    const arr1 = [\n",[67,83105,83106],{"class":69,"line":683},[67,83107,81146],{"class":73},[67,83109,83110],{"class":69,"line":689},[67,83111,83112],{"class":73},"        name: '小米',\n",[67,83114,83115],{"class":69,"line":694},[67,83116,83117],{"class":73},"        price: 1999\n",[67,83119,83120],{"class":69,"line":700},[67,83121,79652],{"class":73},[67,83123,83124],{"class":69,"line":706},[67,83125,81146],{"class":73},[67,83127,83128],{"class":69,"line":712},[67,83129,83130],{"class":73},"        name: '华为',\n",[67,83132,83133],{"class":69,"line":717},[67,83134,83135],{"class":73},"        price: 3999\n",[67,83137,83138],{"class":69,"line":723},[67,83139,54162],{"class":73},[67,83141,83142],{"class":69,"line":729},[67,83143,54871],{"class":73},[67,83145,83146],{"class":69,"line":735},[67,83147,83148],{"class":73},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[67,83150,83151],{"class":69,"line":741},[67,83152,83153],{"class":73},"    \u002F\u002F const found1 = arr1.find(item => {\n",[67,83155,83156],{"class":69,"line":747},[67,83157,83158],{"class":73},"    \u002F\u002F   if (item.name === '小米') {\n",[67,83160,83161],{"class":69,"line":753},[67,83162,83163],{"class":73},"    \u002F\u002F     return item\n",[67,83165,83166],{"class":69,"line":758},[67,83167,83168],{"class":73},"    \u002F\u002F   }\n",[67,83170,83171],{"class":69,"line":764},[67,83172,65050],{"class":73},[67,83174,83175],{"class":69,"line":770},[67,83176,83177],{"class":73},"    \u002F\u002F 另一种写法\n",[67,83179,83180],{"class":69,"line":776},[67,83181,83182],{"class":73},"    const found1 = arr1.find(item => {\n",[67,83184,83185],{"class":69,"line":782},[67,83186,83187],{"class":73},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[67,83189,83190],{"class":69,"line":788},[67,83191,83192],{"class":73},"      return item.name = '小米'\n",[67,83194,83195],{"class":69,"line":793},[67,83196,35230],{"class":73},[67,83198,83199],{"class":69,"line":798},[67,83200,83201],{"class":73},"    console.log(found1)\n",[67,83203,83204,83206,83208],{"class":69,"line":816},[67,83205,54181],{"class":73},[67,83207,53578],{"class":262},[67,83209,323],{"class":73},[67,83211,83212,83214,83216],{"class":69,"line":832},[67,83213,376],{"class":73},[67,83215,53565],{"class":262},[67,83217,323],{"class":73},[19,83219,83220],{},[3317,83221],{"alt":63,"src":83222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83224,83225],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[26,83227,83228],{"start":191},[29,83229,83230],{},"every()返回的是布尔值",[19,83232,83233],{},[2230,83234,83237],{"href":83235,"rel":83236},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25657],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83239,83240],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83242,83243],{},"some是只有有一个就没问题",[19,83245,83246],{},"every是必须全是才行",[58,83248,83252],{"className":83249,"code":83250,"language":83251,"meta":63,"style":63},"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",[32,83253,83254,83270,83284,83288,83297],{"__ignoreMap":63},[67,83255,83256,83258,83261,83263,83265,83268],{"class":69,"line":70},[67,83257,56210],{"class":84},[67,83259,83260],{"class":73}," isBigEnough(element, ",[67,83262,75818],{"class":84},[67,83264,1868],{"class":73},[67,83266,83267],{"class":84},"array",[67,83269,14241],{"class":73},[67,83271,83272,83275,83278,83280,83282],{"class":69,"line":191},[67,83273,83274],{"class":84},"  return",[67,83276,83277],{"class":73}," element ",[67,83279,3553],{"class":84},[67,83281,3871],{"class":77},[67,83283,3148],{"class":73},[67,83285,83286],{"class":69,"line":202},[67,83287,3419],{"class":73},[67,83289,83290,83293,83295],{"class":69,"line":641},[67,83291,83292],{"class":73},"[12, 5, 8, 130, 44].every(isBigEnough); ",[67,83294,35098],{"class":84},[67,83296,56277],{"class":73},[67,83298,83299,83302,83304],{"class":69,"line":655},[67,83300,83301],{"class":73},"[12, 54, 18, 130, 44].every(isBigEnough); ",[67,83303,35098],{"class":84},[67,83305,59701],{"class":73},[58,83307,83309],{"className":250,"code":83308,"language":252,"meta":63,"style":63},"\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",[32,83310,83311,83319,83327,83332,83336,83341,83346,83354],{"__ignoreMap":63},[67,83312,83313,83315,83317],{"class":69,"line":70},[67,83314,259],{"class":73},[67,83316,53565],{"class":262},[67,83318,323],{"class":73},[67,83320,83321,83323,83325],{"class":69,"line":191},[67,83322,328],{"class":73},[67,83324,53578],{"class":262},[67,83326,323],{"class":73},[67,83328,83329],{"class":69,"line":202},[67,83330,83331],{"class":73},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[67,83333,83334],{"class":69,"line":641},[67,83335,80082],{"class":73},[67,83337,83338],{"class":69,"line":655},[67,83339,83340],{"class":73},"    const flag = arr.every(item => item >= 10)\n",[67,83342,83343],{"class":69,"line":660},[67,83344,83345],{"class":73},"    console.log(flag)    \u002F\u002Ftrue\n",[67,83347,83348,83350,83352],{"class":69,"line":665},[67,83349,54181],{"class":73},[67,83351,53578],{"class":262},[67,83353,323],{"class":73},[67,83355,83356,83358,83360],{"class":69,"line":677},[67,83357,376],{"class":73},[67,83359,53565],{"class":262},[67,83361,323],{"class":73},[58,83363,83365],{"className":250,"code":83364,"language":252,"meta":63,"style":63},"\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",[32,83366,83367,83375,83383,83387,83392,83397,83402,83410],{"__ignoreMap":63},[67,83368,83369,83371,83373],{"class":69,"line":70},[67,83370,259],{"class":73},[67,83372,53565],{"class":262},[67,83374,323],{"class":73},[67,83376,83377,83379,83381],{"class":69,"line":191},[67,83378,328],{"class":73},[67,83380,53578],{"class":262},[67,83382,323],{"class":73},[67,83384,83385],{"class":69,"line":202},[67,83386,83331],{"class":73},[67,83388,83389],{"class":69,"line":641},[67,83390,83391],{"class":73},"    const arr = [10, 0, 5]\n",[67,83393,83394],{"class":69,"line":655},[67,83395,83396],{"class":73},"    const flag = arr.some(item => item >= 10)\n",[67,83398,83399],{"class":69,"line":660},[67,83400,83401],{"class":73},"    console.log(flag)   \u002F\u002Ftrue\n",[67,83403,83404,83406,83408],{"class":69,"line":665},[67,83405,54181],{"class":73},[67,83407,53578],{"class":262},[67,83409,323],{"class":73},[67,83411,83412,83414,83416],{"class":69,"line":677},[67,83413,376],{"class":73},[67,83415,53565],{"class":262},[67,83417,323],{"class":73},[24706,83419,83421],{"id":83420},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83423,83424],{},[3317,83425],{"alt":63,"src":83426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[58,83428,83430],{"className":52401,"code":83429,"language":52403,"meta":63,"style":63},"\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",[32,83431,83432,83442,83456,83460,83468,83482,83502,83514,83522,83529,83541,83553,83565,83577,83587,83597,83601,83609,83617,83621,83629,83641,83649,83671,83676,83681,83714,83722,83730,83734],{"__ignoreMap":63},[67,83433,83434,83436,83438,83440],{"class":69,"line":70},[67,83435,53065],{"class":73},[67,83437,53068],{"class":262},[67,83439,53071],{"class":110},[67,83441,323],{"class":73},[67,83443,83444,83446,83448,83450,83452,83454],{"class":69,"line":191},[67,83445,259],{"class":73},[67,83447,52403],{"class":262},[67,83449,53082],{"class":110},[67,83451,85],{"class":73},[67,83453,53087],{"class":114},[67,83455,323],{"class":73},[67,83457,83458],{"class":69,"line":202},[67,83459,631],{"emptyLinePlaceholder":630},[67,83461,83462,83464,83466],{"class":69,"line":641},[67,83463,259],{"class":73},[67,83465,53100],{"class":262},[67,83467,323],{"class":73},[67,83469,83470,83472,83474,83476,83478,83480],{"class":69,"line":655},[67,83471,328],{"class":73},[67,83473,53110],{"class":262},[67,83475,53113],{"class":110},[67,83477,85],{"class":73},[67,83479,53118],{"class":114},[67,83481,323],{"class":73},[67,83483,83484,83486,83488,83490,83492,83494,83496,83498,83500],{"class":69,"line":660},[67,83485,328],{"class":73},[67,83487,53110],{"class":262},[67,83489,266],{"class":110},[67,83491,85],{"class":73},[67,83493,53157],{"class":114},[67,83495,53137],{"class":110},[67,83497,85],{"class":73},[67,83499,53164],{"class":114},[67,83501,323],{"class":73},[67,83503,83504,83506,83508,83510,83512],{"class":69,"line":665},[67,83505,328],{"class":73},[67,83507,53173],{"class":262},[67,83509,53176],{"class":73},[67,83511,53173],{"class":262},[67,83513,323],{"class":73},[67,83515,83516,83518,83520],{"class":69,"line":677},[67,83517,328],{"class":73},[67,83519,1903],{"class":262},[67,83521,323],{"class":73},[67,83523,83524,83527],{"class":69,"line":683},[67,83525,83526],{"class":262},"    div",[67,83528,17369],{"class":73},[67,83530,83531,83533,83535,83537,83539],{"class":69,"line":689},[67,83532,56532],{"class":77},[67,83534,53203],{"class":73},[67,83536,3565],{"class":77},[67,83538,53258],{"class":84},[67,83540,3148],{"class":73},[67,83542,83543,83545,83547,83549,83551],{"class":69,"line":694},[67,83544,56546],{"class":77},[67,83546,53203],{"class":73},[67,83548,2392],{"class":77},[67,83550,53258],{"class":84},[67,83552,3148],{"class":73},[67,83554,83555,83557,83559,83561,83563],{"class":69,"line":700},[67,83556,59120],{"class":77},[67,83558,53203],{"class":73},[67,83560,2392],{"class":77},[67,83562,53258],{"class":84},[67,83564,3148],{"class":73},[67,83566,83567,83569,83571,83573,83575],{"class":69,"line":706},[67,83568,66893],{"class":77},[67,83570,53203],{"class":73},[67,83572,2488],{"class":77},[67,83574,53258],{"class":84},[67,83576,3148],{"class":73},[67,83578,83579,83581,83583,83585],{"class":69,"line":712},[67,83580,59047],{"class":77},[67,83582,53203],{"class":73},[67,83584,53358],{"class":77},[67,83586,3148],{"class":73},[67,83588,83589,83591,83593,83595],{"class":69,"line":717},[67,83590,56645],{"class":77},[67,83592,53203],{"class":73},[67,83594,53411],{"class":77},[67,83596,3148],{"class":73},[67,83598,83599],{"class":69,"line":723},[67,83600,4020],{"class":73},[67,83602,83603,83605,83607],{"class":69,"line":729},[67,83604,54181],{"class":73},[67,83606,1903],{"class":262},[67,83608,323],{"class":73},[67,83610,83611,83613,83615],{"class":69,"line":735},[67,83612,376],{"class":73},[67,83614,53100],{"class":262},[67,83616,323],{"class":73},[67,83618,83619],{"class":69,"line":741},[67,83620,631],{"emptyLinePlaceholder":630},[67,83622,83623,83625,83627],{"class":69,"line":747},[67,83624,259],{"class":73},[67,83626,53565],{"class":262},[67,83628,323],{"class":73},[67,83630,83631,83633,83635,83637,83639],{"class":69,"line":753},[67,83632,328],{"class":73},[67,83634,53377],{"class":262},[67,83636,57075],{"class":73},[67,83638,53377],{"class":262},[67,83640,323],{"class":73},[67,83642,83643,83645,83647],{"class":69,"line":758},[67,83644,328],{"class":73},[67,83646,53578],{"class":262},[67,83648,323],{"class":73},[67,83650,83651,83653,83656,83658,83661,83664,83666,83669],{"class":69,"line":764},[67,83652,13021],{"class":84},[67,83654,83655],{"class":77}," spec",[67,83657,671],{"class":84},[67,83659,83660],{"class":73}," { size: ",[67,83662,83663],{"class":114},"'40cm*40cm'",[67,83665,57225],{"class":73},[67,83667,83668],{"class":114},"'黑色'",[67,83670,57365],{"class":73},[67,83672,83673],{"class":69,"line":770},[67,83674,83675],{"class":2058},"    \u002F\u002F const arr = Object.values(spec)\n",[67,83677,83678],{"class":69,"line":776},[67,83679,83680],{"class":2058},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[67,83682,83683,83685,83687,83689,83692,83694,83696,83699,83702,83705,83707,83709,83712],{"class":69,"line":782},[67,83684,54171],{"class":73},[67,83686,56160],{"class":110},[67,83688,854],{"class":73},[67,83690,83691],{"class":114},"'div'",[67,83693,76009],{"class":73},[67,83695,85],{"class":84},[67,83697,83698],{"class":73}," Object.",[67,83700,83701],{"class":110},"values",[67,83703,83704],{"class":73},"(spec).",[67,83706,75983],{"class":110},[67,83708,854],{"class":73},[67,83710,83711],{"class":114},"'\u002F'",[67,83713,829],{"class":73},[67,83715,83716,83718,83720],{"class":69,"line":788},[67,83717,54181],{"class":73},[67,83719,53578],{"class":262},[67,83721,323],{"class":73},[67,83723,83724,83726,83728],{"class":69,"line":793},[67,83725,376],{"class":73},[67,83727,53565],{"class":262},[67,83729,323],{"class":73},[67,83731,83732],{"class":69,"line":798},[67,83733,631],{"emptyLinePlaceholder":630},[67,83735,83736,83738,83740],{"class":69,"line":816},[67,83737,376],{"class":73},[67,83739,52403],{"class":262},[67,83741,323],{"class":73},[19,83743,83744],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24706,83746,83748],{"id":83747},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83750,83751],{},"静态方法，将伪数组转换为真数组",[19,83753,83754],{},[3317,83755],{"alt":63,"src":83756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[58,83758,83760],{"className":250,"code":83759,"language":252,"meta":63,"style":63},"\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",[32,83761,83762,83770,83778,83790,83802,83814,83822,83830,83835,83840,83845,83850,83858],{"__ignoreMap":63},[67,83763,83764,83766,83768],{"class":69,"line":70},[67,83765,259],{"class":73},[67,83767,53565],{"class":262},[67,83769,323],{"class":73},[67,83771,83772,83774,83776],{"class":69,"line":191},[67,83773,328],{"class":73},[67,83775,2994],{"class":262},[67,83777,323],{"class":73},[67,83779,83780,83782,83784,83786,83788],{"class":69,"line":202},[67,83781,53107],{"class":73},[67,83783,29],{"class":262},[67,83785,57075],{"class":73},[67,83787,29],{"class":262},[67,83789,323],{"class":73},[67,83791,83792,83794,83796,83798,83800],{"class":69,"line":641},[67,83793,53107],{"class":73},[67,83795,29],{"class":262},[67,83797,57075],{"class":73},[67,83799,29],{"class":262},[67,83801,323],{"class":73},[67,83803,83804,83806,83808,83810,83812],{"class":69,"line":655},[67,83805,53107],{"class":73},[67,83807,29],{"class":262},[67,83809,57075],{"class":73},[67,83811,29],{"class":262},[67,83813,323],{"class":73},[67,83815,83816,83818,83820],{"class":69,"line":660},[67,83817,54181],{"class":73},[67,83819,2994],{"class":262},[67,83821,323],{"class":73},[67,83823,83824,83826,83828],{"class":69,"line":665},[67,83825,328],{"class":73},[67,83827,53578],{"class":262},[67,83829,323],{"class":73},[67,83831,83832],{"class":69,"line":677},[67,83833,83834],{"class":73},"    const lis = document.querySelectorAll('li')\n",[67,83836,83837],{"class":69,"line":683},[67,83838,83839],{"class":73},"    const liss = Array.from(lis)\n",[67,83841,83842],{"class":69,"line":689},[67,83843,83844],{"class":73},"    liss.pop()\n",[67,83846,83847],{"class":69,"line":694},[67,83848,83849],{"class":73},"    console.log(liss)\n",[67,83851,83852,83854,83856],{"class":69,"line":700},[67,83853,54181],{"class":73},[67,83855,53578],{"class":262},[67,83857,323],{"class":73},[67,83859,83860,83862,83864],{"class":69,"line":706},[67,83861,376],{"class":73},[67,83863,53565],{"class":262},[67,83865,323],{"class":73},[19,83867,83868],{},[3317,83869],{"alt":63,"src":83870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23794,83872,83874],{"id":83873},"_41053-string","4.10.5.3 String",[19,83876,83877],{},[3317,83878],{"alt":63,"src":83879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24706,83881,83883],{"id":83882},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[58,83885,83887],{"className":250,"code":83886,"language":252,"meta":63,"style":63},"\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",[32,83888,83889,83897,83905,83910,83915,83920,83924,83929,83934,83939,83947],{"__ignoreMap":63},[67,83890,83891,83893,83895],{"class":69,"line":70},[67,83892,259],{"class":73},[67,83894,53565],{"class":262},[67,83896,323],{"class":73},[67,83898,83899,83901,83903],{"class":69,"line":191},[67,83900,328],{"class":73},[67,83902,53578],{"class":262},[67,83904,323],{"class":73},[67,83906,83907],{"class":69,"line":202},[67,83908,83909],{"class":73},"    \u002F\u002F 把字符串转化为数组\n",[67,83911,83912],{"class":69,"line":641},[67,83913,83914],{"class":73},"    const str = 'pink,red'\n",[67,83916,83917],{"class":69,"line":655},[67,83918,83919],{"class":73},"    const arr = str.split(',')\n",[67,83921,83922],{"class":69,"line":660},[67,83923,82398],{"class":73},[67,83925,83926],{"class":69,"line":665},[67,83927,83928],{"class":73},"    const str1 = '2025-8-25'\n",[67,83930,83931],{"class":69,"line":677},[67,83932,83933],{"class":73},"    const arr1 = str1.split('-')\n",[67,83935,83936],{"class":69,"line":683},[67,83937,83938],{"class":73},"    console.log(arr1)\n",[67,83940,83941,83943,83945],{"class":69,"line":689},[67,83942,54181],{"class":73},[67,83944,53578],{"class":262},[67,83946,323],{"class":73},[67,83948,83949,83951,83953],{"class":69,"line":694},[67,83950,376],{"class":73},[67,83952,53565],{"class":262},[67,83954,323],{"class":73},[24706,83956,83958],{"id":83957},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83960,7000],{},[19,83962,83963],{},"substring(indexStart)",[19,83965,83966],{},"substring(indexStart, indexEnd)",[2994,83968,83969,83980,83991,84001],{},[29,83970,83971,83972,83975,83976,83979],{},"如果省略了 ",[32,83973,83974],{},"indexEnd","，则 ",[32,83977,83978],{},"substring()"," 提取字符直到字符串的末尾",[29,83981,233,83982,83985,83986,83975,83988,83990],{},[32,83983,83984],{},"indexStart"," 等于 ",[32,83987,83974],{},[32,83989,83978],{}," 返回一个空字符串",[29,83992,233,83993,83995,83996,83975,83998,84000],{},[32,83994,83984],{}," 大于 ",[32,83997,83974],{},[32,83999,83978],{}," 的效果就像交换了这两个参数一样",[29,84002,84003],{},"结束的索引号不包含想要截取的部分",[58,84005,84007],{"className":83249,"code":84006,"language":83251,"meta":63,"style":63},"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",[32,84008,84009,84021,84025,84059,84089,84093,84124,84128,84155,84185,84215,84219,84250],{"__ignoreMap":63},[67,84010,84011,84014,84016,84019],{"class":69,"line":70},[67,84012,84013],{"class":73},"const anyString ",[67,84015,85],{"class":84},[67,84017,84018],{"class":114}," \"Mozilla\"",[67,84020,3148],{"class":73},[67,84022,84023],{"class":69,"line":191},[67,84024,631],{"emptyLinePlaceholder":630},[67,84026,84027,84030,84032,84034,84036,84039,84041,84044,84046,84048,84050,84052,84054,84056],{"class":69,"line":202},[67,84028,84029],{"class":77},"console",[67,84031,2547],{"class":73},[67,84033,60008],{"class":77},[67,84035,854],{"class":73},[67,84037,84038],{"class":77},"anyString",[67,84040,2547],{"class":73},[67,84042,84043],{"class":77},"substring",[67,84045,854],{"class":73},[67,84047,78],{"class":77},[67,84049,1868],{"class":73},[67,84051,2209],{"class":77},[67,84053,77013],{"class":73},[67,84055,35098],{"class":84},[67,84057,84058],{"class":114}," 'M'\n",[67,84060,84061,84063,84065,84067,84069,84071,84073,84075,84077,84079,84081,84083,84085,84087],{"class":69,"line":641},[67,84062,84029],{"class":77},[67,84064,2547],{"class":73},[67,84066,60008],{"class":77},[67,84068,854],{"class":73},[67,84070,84038],{"class":77},[67,84072,2547],{"class":73},[67,84074,84043],{"class":77},[67,84076,854],{"class":73},[67,84078,2209],{"class":77},[67,84080,1868],{"class":73},[67,84082,78],{"class":77},[67,84084,77013],{"class":73},[67,84086,35098],{"class":84},[67,84088,84058],{"class":114},[67,84090,84091],{"class":69,"line":655},[67,84092,631],{"emptyLinePlaceholder":630},[67,84094,84095,84097,84099,84101,84103,84105,84107,84109,84111,84113,84115,84117,84119,84121],{"class":69,"line":660},[67,84096,84029],{"class":77},[67,84098,2547],{"class":73},[67,84100,60008],{"class":77},[67,84102,854],{"class":73},[67,84104,84038],{"class":77},[67,84106,2547],{"class":73},[67,84108,84043],{"class":77},[67,84110,854],{"class":73},[67,84112,78],{"class":77},[67,84114,1868],{"class":73},[67,84116,2335],{"class":77},[67,84118,77013],{"class":73},[67,84120,35098],{"class":84},[67,84122,84123],{"class":114}," 'Mozill'\n",[67,84125,84126],{"class":69,"line":665},[67,84127,631],{"emptyLinePlaceholder":630},[67,84129,84130,84132,84134,84136,84138,84140,84142,84144,84146,84148,84150,84152],{"class":69,"line":677},[67,84131,84029],{"class":77},[67,84133,2547],{"class":73},[67,84135,60008],{"class":77},[67,84137,854],{"class":73},[67,84139,84038],{"class":77},[67,84141,2547],{"class":73},[67,84143,84043],{"class":77},[67,84145,854],{"class":73},[67,84147,1047],{"class":77},[67,84149,77013],{"class":73},[67,84151,35098],{"class":84},[67,84153,84154],{"class":114}," 'lla'\n",[67,84156,84157,84159,84161,84163,84165,84167,84169,84171,84173,84175,84177,84179,84181,84183],{"class":69,"line":683},[67,84158,84029],{"class":77},[67,84160,2547],{"class":73},[67,84162,60008],{"class":77},[67,84164,854],{"class":73},[67,84166,84038],{"class":77},[67,84168,2547],{"class":73},[67,84170,84043],{"class":77},[67,84172,854],{"class":73},[67,84174,1047],{"class":77},[67,84176,1868],{"class":73},[67,84178,2360],{"class":77},[67,84180,77069],{"class":73},[67,84182,35098],{"class":84},[67,84184,84154],{"class":114},[67,84186,84187,84189,84191,84193,84195,84197,84199,84201,84203,84205,84207,84209,84211,84213],{"class":69,"line":689},[67,84188,84029],{"class":77},[67,84190,2547],{"class":73},[67,84192,60008],{"class":77},[67,84194,854],{"class":73},[67,84196,84038],{"class":77},[67,84198,2547],{"class":73},[67,84200,84043],{"class":77},[67,84202,854],{"class":73},[67,84204,2360],{"class":77},[67,84206,1868],{"class":73},[67,84208,1047],{"class":77},[67,84210,77013],{"class":73},[67,84212,35098],{"class":84},[67,84214,84154],{"class":114},[67,84216,84217],{"class":69,"line":694},[67,84218,631],{"emptyLinePlaceholder":630},[67,84220,84221,84223,84225,84227,84229,84231,84233,84235,84237,84239,84241,84243,84245,84247],{"class":69,"line":700},[67,84222,84029],{"class":77},[67,84224,2547],{"class":73},[67,84226,60008],{"class":77},[67,84228,854],{"class":73},[67,84230,84038],{"class":77},[67,84232,2547],{"class":73},[67,84234,84043],{"class":77},[67,84236,854],{"class":73},[67,84238,78],{"class":77},[67,84240,1868],{"class":73},[67,84242,2360],{"class":77},[67,84244,77013],{"class":73},[67,84246,35098],{"class":84},[67,84248,84249],{"class":114}," 'Mozilla'\n",[67,84251,84252,84254,84256,84258,84260,84262,84264,84266,84268,84270,84272,84274,84276,84278],{"class":69,"line":706},[67,84253,84029],{"class":77},[67,84255,2547],{"class":73},[67,84257,60008],{"class":77},[67,84259,854],{"class":73},[67,84261,84038],{"class":77},[67,84263,2547],{"class":73},[67,84265,84043],{"class":77},[67,84267,854],{"class":73},[67,84269,78],{"class":77},[67,84271,1868],{"class":73},[67,84273,2437],{"class":77},[67,84275,77013],{"class":73},[67,84277,35098],{"class":84},[67,84279,84249],{"class":114},[24706,84281,84283],{"id":84282},"_410533-startswith","4.10.5.3.3 startsWith",[19,84285,84286,84289,84290,84295,84296,84298,84299],{},[32,84287,84288],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[2144,84291,84292],{},[32,84293,84294],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[32,84297,3217],{}," 或 ",[32,84300,67780],{},[58,84302,84304],{"className":79255,"code":84303,"language":79257,"meta":63,"style":63},"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",[32,84305,84306,84318,84337,84342,84362],{"__ignoreMap":63},[67,84307,84308,84310,84313,84315],{"class":69,"line":70},[67,84309,8608],{"class":84},[67,84311,84312],{"class":73}," str1 ",[67,84314,85],{"class":84},[67,84316,84317],{"class":114}," \"Saturday night plans\"\n",[67,84319,84320,84322,84324,84327,84330,84332,84335],{"class":69,"line":191},[67,84321,79292],{"class":73},[67,84323,60008],{"class":110},[67,84325,84326],{"class":73},"(str1.",[67,84328,84329],{"class":110},"startsWith",[67,84331,854],{"class":73},[67,84333,84334],{"class":114},"\"Sat\"",[67,84336,1050],{"class":73},[67,84338,84339],{"class":69,"line":202},[67,84340,84341],{"class":2058},"\u002F\u002F Expected output: true\n",[67,84343,84344,84346,84348,84350,84352,84354,84356,84358,84360],{"class":69,"line":641},[67,84345,79292],{"class":73},[67,84347,60008],{"class":110},[67,84349,84326],{"class":73},[67,84351,84329],{"class":110},[67,84353,854],{"class":73},[67,84355,84334],{"class":114},[67,84357,1868],{"class":73},[67,84359,2071],{"class":77},[67,84361,1050],{"class":73},[67,84363,84364],{"class":69,"line":655},[67,84365,84366],{"class":2058},"\u002F\u002F Expected output: false\n",[58,84368,84370],{"className":52401,"code":84369,"language":52403,"meta":63,"style":63},"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",[32,84371,84372,84377,84382,84386,84391,84396],{"__ignoreMap":63},[67,84373,84374],{"class":69,"line":70},[67,84375,84376],{"class":73},"startsWith(searchString)\n",[67,84378,84379],{"class":69,"line":191},[67,84380,84381],{"class":73},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[67,84383,84384],{"class":69,"line":202},[67,84385,631],{"emptyLinePlaceholder":630},[67,84387,84388],{"class":69,"line":641},[67,84389,84390],{"class":73},"const str3 = 'pink老师上课中'\n",[67,84392,84393],{"class":69,"line":655},[67,84394,84395],{"class":73},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[67,84397,84398],{"class":69,"line":660},[67,84399,84400],{"class":73},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24706,84402,84404],{"id":84403},"_410534-includes","4.10.5.3.4 includes",[19,84406,84407],{},"includes(searchString) includes(searchString, position)",[26,84409,84410],{},[29,84411,84412],{},"searchString:",[19,84414,84415,84416,84418,84419,84424,84425,84430,84431,23296,84434,84437,84438,84441],{},"一个要在 ",[32,84417,3157],{}," 中查找的字符串。",[2230,84420,84423],{"href":84421,"rel":84422},"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",[25657],"不能是正则表达式","。所有非正则表达式的值都会被",[2230,84426,84429],{"href":84427,"rel":84428},"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",[25657],"强制转换为字符串","，因此如果该参数被省略或传入 ",[32,84432,84433],{},"undefined",[32,84435,84436],{},"includes()"," 方法会在字符串中搜索 ",[32,84439,84440],{},"\"undefined\"","，这通常不是你想要的",[26,84443,84444],{"start":191},[29,84445,84446,2848],{},[32,84447,84448],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84450,84451,84452,84455,84456],{},"在字符串中开始搜索 ",[32,84453,84454],{},"searchString"," 的位置。默认值为 ",[32,84457,78],{},[26,84459,84460],{"start":202},[29,84461,84462],{},"返回值：",[19,84464,84465,84466,84468,84469,84473,84474],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[32,84467,84454],{}," 为空字符串的情况），则返回 ",[2144,84470,84471],{},[32,84472,3217],{}," ，否则返回 ",[2144,84475,84476],{},[32,84477,67780],{},[26,84479,84480],{"start":641},[29,84481,84482],{},"异常：",[19,84484,233,84485,15593,84487,84491],{},[32,84486,84454],{},[2230,84488,84490],{"href":84421,"rel":84489},[25657],"是一个正则表达式","，则会抛出",[19,84493,84494],{},"只要是有就是true，不需要非得以谁开头结尾",[58,84496,84498],{"className":79255,"code":84497,"language":79257,"meta":63,"style":63},"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",[32,84499,84500,84511,84534,84553,84573,84595,84614],{"__ignoreMap":63},[67,84501,84502,84504,84506,84508],{"class":69,"line":70},[67,84503,8608],{"class":84},[67,84505,81535],{"class":73},[67,84507,85],{"class":84},[67,84509,84510],{"class":114}," \"To be, or not to be, that is the question.\"\n",[67,84512,84513,84515,84517,84520,84523,84525,84528,84531],{"class":69,"line":191},[67,84514,79292],{"class":73},[67,84516,60008],{"class":110},[67,84518,84519],{"class":73},"(str.",[67,84521,84522],{"class":110},"includes",[67,84524,854],{"class":73},[67,84526,84527],{"class":114},"\"To be\"",[67,84529,84530],{"class":73},"))",[67,84532,84533],{"class":2058},"  \u002F\u002F true\n",[67,84535,84536,84538,84540,84542,84544,84546,84549,84551],{"class":69,"line":202},[67,84537,79292],{"class":73},[67,84539,60008],{"class":110},[67,84541,84519],{"class":73},[67,84543,84522],{"class":110},[67,84545,854],{"class":73},[67,84547,84548],{"class":114},"\"question\"",[67,84550,84530],{"class":73},[67,84552,84533],{"class":2058},[67,84554,84555,84557,84559,84561,84563,84565,84568,84570],{"class":69,"line":641},[67,84556,79292],{"class":73},[67,84558,60008],{"class":110},[67,84560,84519],{"class":73},[67,84562,84522],{"class":110},[67,84564,854],{"class":73},[67,84566,84567],{"class":114},"\"nonexistent\"",[67,84569,84530],{"class":73},[67,84571,84572],{"class":2058},"  \u002F\u002F false\n",[67,84574,84575,84577,84579,84581,84583,84585,84587,84589,84591,84593],{"class":69,"line":655},[67,84576,79292],{"class":73},[67,84578,60008],{"class":110},[67,84580,84519],{"class":73},[67,84582,84522],{"class":110},[67,84584,854],{"class":73},[67,84586,84527],{"class":114},[67,84588,1868],{"class":73},[67,84590,2209],{"class":77},[67,84592,84530],{"class":73},[67,84594,84572],{"class":2058},[67,84596,84597,84599,84601,84603,84605,84607,84610,84612],{"class":69,"line":660},[67,84598,79292],{"class":73},[67,84600,60008],{"class":110},[67,84602,84519],{"class":73},[67,84604,84522],{"class":110},[67,84606,854],{"class":73},[67,84608,84609],{"class":114},"\"TO BE\"",[67,84611,84530],{"class":73},[67,84613,84572],{"class":2058},[67,84615,84616,84618,84620,84622,84624,84626,84628,84630],{"class":69,"line":665},[67,84617,79292],{"class":73},[67,84619,60008],{"class":110},[67,84621,84519],{"class":73},[67,84623,84522],{"class":110},[67,84625,854],{"class":73},[67,84627,9468],{"class":114},[67,84629,84530],{"class":73},[67,84631,84533],{"class":2058},[24706,84633,84635],{"id":84634},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[58,84637,84639],{"className":250,"code":84638,"language":252,"meta":63,"style":63},"\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",[32,84640,84641,84649,84657,84662,84667,84672,84677,84682,84690],{"__ignoreMap":63},[67,84642,84643,84645,84647],{"class":69,"line":70},[67,84644,259],{"class":73},[67,84646,53565],{"class":262},[67,84648,323],{"class":73},[67,84650,84651,84653,84655],{"class":69,"line":191},[67,84652,328],{"class":73},[67,84654,53578],{"class":262},[67,84656,323],{"class":73},[67,84658,84659],{"class":69,"line":202},[67,84660,84661],{"class":73},"    const num = 10\n",[67,84663,84664],{"class":69,"line":641},[67,84665,84666],{"class":73},"    \u002F\u002F 强制转换\n",[67,84668,84669],{"class":69,"line":655},[67,84670,84671],{"class":73},"    console.log(String(num))\n",[67,84673,84674],{"class":69,"line":660},[67,84675,84676],{"class":73},"    \u002F\u002F toString()方法转换\n",[67,84678,84679],{"class":69,"line":665},[67,84680,84681],{"class":73},"    console.log(num.toString())\n",[67,84683,84684,84686,84688],{"class":69,"line":677},[67,84685,54181],{"class":73},[67,84687,53578],{"class":262},[67,84689,323],{"class":73},[67,84691,84692,84694,84696],{"class":69,"line":683},[67,84693,376],{"class":73},[67,84695,53565],{"class":262},[67,84697,323],{"class":73},[24706,84699,84701],{"id":84700},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84703,84704],{},[3317,84705],{"alt":63,"src":84706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[58,84708,84710],{"className":52401,"code":84709,"language":52403,"meta":63,"style":63},"\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",[32,84711,84712,84722,84736,84740,84748,84762,84782,84794,84802,84806,84814,84826,84834,84846,84851,84856,84861,84908,84924,84932,84940,84944],{"__ignoreMap":63},[67,84713,84714,84716,84718,84720],{"class":69,"line":70},[67,84715,53065],{"class":73},[67,84717,53068],{"class":262},[67,84719,53071],{"class":110},[67,84721,323],{"class":73},[67,84723,84724,84726,84728,84730,84732,84734],{"class":69,"line":191},[67,84725,259],{"class":73},[67,84727,52403],{"class":262},[67,84729,53082],{"class":110},[67,84731,85],{"class":73},[67,84733,53087],{"class":114},[67,84735,323],{"class":73},[67,84737,84738],{"class":69,"line":202},[67,84739,631],{"emptyLinePlaceholder":630},[67,84741,84742,84744,84746],{"class":69,"line":641},[67,84743,259],{"class":73},[67,84745,53100],{"class":262},[67,84747,323],{"class":73},[67,84749,84750,84752,84754,84756,84758,84760],{"class":69,"line":655},[67,84751,328],{"class":73},[67,84753,53110],{"class":262},[67,84755,53113],{"class":110},[67,84757,85],{"class":73},[67,84759,53118],{"class":114},[67,84761,323],{"class":73},[67,84763,84764,84766,84768,84770,84772,84774,84776,84778,84780],{"class":69,"line":660},[67,84765,328],{"class":73},[67,84767,53110],{"class":262},[67,84769,266],{"class":110},[67,84771,85],{"class":73},[67,84773,53157],{"class":114},[67,84775,53137],{"class":110},[67,84777,85],{"class":73},[67,84779,53164],{"class":114},[67,84781,323],{"class":73},[67,84783,84784,84786,84788,84790,84792],{"class":69,"line":665},[67,84785,328],{"class":73},[67,84787,53173],{"class":262},[67,84789,53176],{"class":73},[67,84791,53173],{"class":262},[67,84793,323],{"class":73},[67,84795,84796,84798,84800],{"class":69,"line":677},[67,84797,376],{"class":73},[67,84799,53100],{"class":262},[67,84801,323],{"class":73},[67,84803,84804],{"class":69,"line":683},[67,84805,631],{"emptyLinePlaceholder":630},[67,84807,84808,84810,84812],{"class":69,"line":689},[67,84809,259],{"class":73},[67,84811,53565],{"class":262},[67,84813,323],{"class":73},[67,84815,84816,84818,84820,84822,84824],{"class":69,"line":694},[67,84817,328],{"class":73},[67,84819,53377],{"class":262},[67,84821,57075],{"class":73},[67,84823,53377],{"class":262},[67,84825,323],{"class":73},[67,84827,84828,84830,84832],{"class":69,"line":700},[67,84829,328],{"class":73},[67,84831,53578],{"class":262},[67,84833,323],{"class":73},[67,84835,84836,84838,84841,84843],{"class":69,"line":706},[67,84837,13021],{"class":84},[67,84839,84840],{"class":77}," gift",[67,84842,671],{"class":84},[67,84844,84845],{"class":114}," '50g的茶叶，清洗球'\n",[67,84847,84848],{"class":69,"line":712},[67,84849,84850],{"class":2058},"    \u002F\u002F 1.把字符串拆分为数组\n",[67,84852,84853],{"class":69,"line":717},[67,84854,84855],{"class":2058},"    \u002F\u002F console.log(gift.split(','))\n",[67,84857,84858],{"class":69,"line":723},[67,84859,84860],{"class":2058},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[67,84862,84863,84865,84867,84869,84872,84875,84877,84880,84882,84884,84886,84888,84890,84893,84895,84898,84900,84902,84904,84906],{"class":69,"line":729},[67,84864,13021],{"class":84},[67,84866,75679],{"class":77},[67,84868,671],{"class":84},[67,84870,84871],{"class":73}," gift.",[67,84873,84874],{"class":110},"split",[67,84876,854],{"class":73},[67,84878,84879],{"class":114},"'，'",[67,84881,32603],{"class":73},[67,84883,75804],{"class":110},[67,84885,854],{"class":73},[67,84887,81555],{"class":7033},[67,84889,81558],{"class":84},[67,84891,84892],{"class":114}," `\u003Cspan>【赠品】${",[67,84894,81555],{"class":73},[67,84896,84897],{"class":114},"}\u003C\u002Fspan>\u003Cbr>`",[67,84899,32603],{"class":73},[67,84901,75983],{"class":110},[67,84903,854],{"class":73},[67,84905,75988],{"class":114},[67,84907,829],{"class":73},[67,84909,84910,84912,84914,84916,84918,84920,84922],{"class":69,"line":735},[67,84911,54171],{"class":73},[67,84913,56160],{"class":110},[67,84915,854],{"class":73},[67,84917,83691],{"class":114},[67,84919,76009],{"class":73},[67,84921,85],{"class":84},[67,84923,75745],{"class":73},[67,84925,84926,84928,84930],{"class":69,"line":741},[67,84927,54181],{"class":73},[67,84929,53578],{"class":262},[67,84931,323],{"class":73},[67,84933,84934,84936,84938],{"class":69,"line":747},[67,84935,376],{"class":73},[67,84937,53565],{"class":262},[67,84939,323],{"class":73},[67,84941,84942],{"class":69,"line":753},[67,84943,631],{"emptyLinePlaceholder":630},[67,84945,84946,84948,84950],{"class":69,"line":758},[67,84947,376],{"class":73},[67,84949,52403],{"class":262},[67,84951,323],{"class":73},[23794,84953,84955],{"id":84954},"_41054-number","4.10.5.4 Number",[19,84957,84958],{},[3317,84959],{"alt":63,"src":84960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84962,84963],{},"整数也可以进行toFixed来保留小数",[19,84965,84966],{},"比如：",[19,84968,84969],{},"const price=10",[19,84971,84972],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23794,84974,84976],{"id":84975},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84978,84979],{},[3317,84980],{"alt":63,"src":84981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[58,84983,84985],{"className":52401,"code":84984,"language":52403,"meta":63,"style":63},"\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",[32,84986,84987,84997,85011,85015,85023,85037,85057,85069,85077,85083,85093,85103,85113,85117,85121,85127,85139,85153,85157,85161,85167,85179,85195,85205,85221,85225,85229,85235,85245,85255,85259,85263,85271,85283,85295,85307,85311,85315,85323,85335,85339,85343,85354,85364,85376,85388,85398,85402,85406,85414,85423,85435,85445,85455,85459,85463,85471,85480,85487,85497,85509,85513,85517,85526,85536,85547,85559,85571,85575,85579,85588,85598,85609,85613,85617,85623,85635,85647,85657,85667,85685,85697,85701,85705,85714,85726,85736,85746,85758,85762,85770,85778,85782,85790,85804,85812,85826,85854,85862,85870,85880,85884,85892,85900,85909,85917,85926,85936,85940,85944,85952,85960,85969,85977,85985,85998,86002,86006,86014,86022,86031,86039,86047,86062,86066,86070,86078,86086,86095,86103,86111,86125,86133,86137,86141,86146,86172,86177,86214,86219,86242,86247,86301,86306,86342,86346,86352,86357,86366,86380,86389,86408,86417,86427,86432,86437,86450,86455,86509,86535,86543,86551,86555],{"__ignoreMap":63},[67,84988,84989,84991,84993,84995],{"class":69,"line":70},[67,84990,53065],{"class":73},[67,84992,53068],{"class":262},[67,84994,53071],{"class":110},[67,84996,323],{"class":73},[67,84998,84999,85001,85003,85005,85007,85009],{"class":69,"line":191},[67,85000,259],{"class":73},[67,85002,52403],{"class":262},[67,85004,53082],{"class":110},[67,85006,85],{"class":73},[67,85008,53087],{"class":114},[67,85010,323],{"class":73},[67,85012,85013],{"class":69,"line":202},[67,85014,631],{"emptyLinePlaceholder":630},[67,85016,85017,85019,85021],{"class":69,"line":641},[67,85018,259],{"class":73},[67,85020,53100],{"class":262},[67,85022,323],{"class":73},[67,85024,85025,85027,85029,85031,85033,85035],{"class":69,"line":655},[67,85026,328],{"class":73},[67,85028,53110],{"class":262},[67,85030,53113],{"class":110},[67,85032,85],{"class":73},[67,85034,53118],{"class":114},[67,85036,323],{"class":73},[67,85038,85039,85041,85043,85045,85047,85049,85051,85053,85055],{"class":69,"line":660},[67,85040,328],{"class":73},[67,85042,53110],{"class":262},[67,85044,266],{"class":110},[67,85046,85],{"class":73},[67,85048,53157],{"class":114},[67,85050,53137],{"class":110},[67,85052,85],{"class":73},[67,85054,53164],{"class":114},[67,85056,323],{"class":73},[67,85058,85059,85061,85063,85065,85067],{"class":69,"line":665},[67,85060,328],{"class":73},[67,85062,53173],{"class":262},[67,85064,53176],{"class":73},[67,85066,53173],{"class":262},[67,85068,323],{"class":73},[67,85070,85071,85073,85075],{"class":69,"line":677},[67,85072,328],{"class":73},[67,85074,1903],{"class":262},[67,85076,323],{"class":73},[67,85078,85079,85081],{"class":69,"line":683},[67,85080,8220],{"class":262},[67,85082,17369],{"class":73},[67,85084,85085,85087,85089,85091],{"class":69,"line":689},[67,85086,56456],{"class":77},[67,85088,53203],{"class":73},[67,85090,78],{"class":77},[67,85092,3148],{"class":73},[67,85094,85095,85097,85099,85101],{"class":69,"line":694},[67,85096,56467],{"class":77},[67,85098,53203],{"class":73},[67,85100,78],{"class":77},[67,85102,3148],{"class":73},[67,85104,85105,85107,85109,85111],{"class":69,"line":700},[67,85106,74356],{"class":77},[67,85108,53203],{"class":73},[67,85110,62266],{"class":77},[67,85112,3148],{"class":73},[67,85114,85115],{"class":69,"line":706},[67,85116,4020],{"class":73},[67,85118,85119],{"class":69,"line":712},[67,85120,631],{"emptyLinePlaceholder":630},[67,85122,85123,85125],{"class":69,"line":717},[67,85124,63883],{"class":110},[67,85126,17369],{"class":73},[67,85128,85129,85131,85133,85135,85137],{"class":69,"line":723},[67,85130,56532],{"class":77},[67,85132,53203],{"class":73},[67,85134,80334],{"class":77},[67,85136,53258],{"class":84},[67,85138,3148],{"class":73},[67,85140,85141,85143,85145,85147,85149,85151],{"class":69,"line":729},[67,85142,56467],{"class":77},[67,85144,53203],{"class":73},[67,85146,2302],{"class":77},[67,85148,53258],{"class":84},[67,85150,53322],{"class":77},[67,85152,3148],{"class":73},[67,85154,85155],{"class":69,"line":735},[67,85156,4020],{"class":73},[67,85158,85159],{"class":69,"line":741},[67,85160,631],{"emptyLinePlaceholder":630},[67,85162,85163,85165],{"class":69,"line":747},[67,85164,80385],{"class":110},[67,85166,17369],{"class":73},[67,85168,85169,85171,85173,85175,85177],{"class":69,"line":753},[67,85170,56456],{"class":77},[67,85172,53203],{"class":73},[67,85174,2564],{"class":77},[67,85176,53258],{"class":84},[67,85178,3148],{"class":73},[67,85180,85181,85183,85185,85187,85189,85191,85193],{"class":69,"line":758},[67,85182,63621],{"class":77},[67,85184,53203],{"class":73},[67,85186,29907],{"class":77},[67,85188,80440],{"class":77},[67,85190,80443],{"class":77},[67,85192,2684],{"class":84},[67,85194,3148],{"class":73},[67,85196,85197,85199,85201,85203],{"class":69,"line":764},[67,85198,56770],{"class":77},[67,85200,53203],{"class":73},[67,85202,53243],{"class":77},[67,85204,3148],{"class":73},[67,85206,85207,85209,85211,85213,85215,85217,85219],{"class":69,"line":770},[67,85208,63737],{"class":77},[67,85210,53203],{"class":73},[67,85212,2209],{"class":77},[67,85214,53258],{"class":84},[67,85216,53287],{"class":77},[67,85218,64004],{"class":77},[67,85220,3148],{"class":73},[67,85222,85223],{"class":69,"line":776},[67,85224,4020],{"class":73},[67,85226,85227],{"class":69,"line":782},[67,85228,631],{"emptyLinePlaceholder":630},[67,85230,85231,85233],{"class":69,"line":788},[67,85232,80503],{"class":110},[67,85234,17369],{"class":73},[67,85236,85237,85239,85241,85243],{"class":69,"line":793},[67,85238,63785],{"class":77},[67,85240,53203],{"class":73},[67,85242,63790],{"class":77},[67,85244,3148],{"class":73},[67,85246,85247,85249,85251,85253],{"class":69,"line":798},[67,85248,56645],{"class":77},[67,85250,53203],{"class":73},[67,85252,63579],{"class":77},[67,85254,3148],{"class":73},[67,85256,85257],{"class":69,"line":816},[67,85258,4020],{"class":73},[67,85260,85261],{"class":69,"line":832},[67,85262,631],{"emptyLinePlaceholder":630},[67,85264,85265,85267,85269],{"class":69,"line":843},[67,85266,80385],{"class":110},[67,85268,57376],{"class":262},[67,85270,17369],{"class":73},[67,85272,85273,85275,85277,85279,85281],{"class":69,"line":848},[67,85274,56532],{"class":77},[67,85276,53203],{"class":73},[67,85278,2601],{"class":77},[67,85280,53258],{"class":84},[67,85282,3148],{"class":73},[67,85284,85285,85287,85289,85291,85293],{"class":69,"line":863},[67,85286,56546],{"class":77},[67,85288,53203],{"class":73},[67,85290,2601],{"class":77},[67,85292,53258],{"class":84},[67,85294,3148],{"class":73},[67,85296,85297,85299,85301,85303,85305],{"class":69,"line":876},[67,85298,63511],{"class":77},[67,85300,53203],{"class":73},[67,85302,2310],{"class":77},[67,85304,53258],{"class":84},[67,85306,3148],{"class":73},[67,85308,85309],{"class":69,"line":889},[67,85310,4020],{"class":73},[67,85312,85313],{"class":69,"line":894},[67,85314,631],{"emptyLinePlaceholder":630},[67,85316,85317,85319,85321],{"class":69,"line":911},[67,85318,80385],{"class":110},[67,85320,64064],{"class":110},[67,85322,17369],{"class":73},[67,85324,85325,85327,85329,85331,85333],{"class":69,"line":927},[67,85326,56532],{"class":77},[67,85328,53203],{"class":73},[67,85330,3565],{"class":77},[67,85332,53258],{"class":84},[67,85334,3148],{"class":73},[67,85336,85337],{"class":69,"line":932},[67,85338,4020],{"class":73},[67,85340,85341],{"class":69,"line":955},[67,85342,631],{"emptyLinePlaceholder":630},[67,85344,85345,85347,85349,85352],{"class":69,"line":971},[67,85346,80385],{"class":110},[67,85348,64064],{"class":110},[67,85350,85351],{"class":110}," .tag",[67,85353,17369],{"class":73},[67,85355,85356,85358,85360,85362],{"class":69,"line":1010},[67,85357,56770],{"class":77},[67,85359,53203],{"class":73},[67,85361,62630],{"class":77},[67,85363,3148],{"class":73},[67,85365,85366,85368,85370,85372,85374],{"class":69,"line":1016},[67,85367,56456],{"class":77},[67,85369,53203],{"class":73},[67,85371,2077],{"class":77},[67,85373,53258],{"class":84},[67,85375,3148],{"class":73},[67,85377,85378,85380,85382,85384,85386],{"class":69,"line":1021},[67,85379,56683],{"class":77},[67,85381,53203],{"class":73},[67,85383,2488],{"class":77},[67,85385,53258],{"class":84},[67,85387,3148],{"class":73},[67,85389,85390,85392,85394,85396],{"class":69,"line":1034},[67,85391,59177],{"class":77},[67,85393,53203],{"class":73},[67,85395,63830],{"class":77},[67,85397,3148],{"class":73},[67,85399,85400],{"class":69,"line":1053},[67,85401,4020],{"class":73},[67,85403,85404],{"class":69,"line":1070},[67,85405,631],{"emptyLinePlaceholder":630},[67,85407,85408,85410,85412],{"class":69,"line":1083},[67,85409,80385],{"class":110},[67,85411,80677],{"class":110},[67,85413,33238],{"class":73},[67,85415,85416,85418,85421],{"class":69,"line":1088},[67,85417,80385],{"class":110},[67,85419,85420],{"class":110}," .sub-total",[67,85422,17369],{"class":73},[67,85424,85425,85427,85429,85431,85433],{"class":69,"line":1093},[67,85426,56683],{"class":77},[67,85428,53203],{"class":73},[67,85430,2639],{"class":77},[67,85432,53258],{"class":84},[67,85434,3148],{"class":73},[67,85436,85437,85439,85441,85443],{"class":69,"line":1110},[67,85438,59177],{"class":77},[67,85440,53203],{"class":73},[67,85442,80700],{"class":77},[67,85444,3148],{"class":73},[67,85446,85447,85449,85451,85453],{"class":69,"line":11603},[67,85448,63598],{"class":77},[67,85450,53203],{"class":73},[67,85452,2209],{"class":77},[67,85454,3148],{"class":73},[67,85456,85457],{"class":69,"line":11612},[67,85458,4020],{"class":73},[67,85460,85461],{"class":69,"line":11617},[67,85462,631],{"emptyLinePlaceholder":630},[67,85464,85465,85467,85469],{"class":69,"line":11623},[67,85466,80385],{"class":110},[67,85468,80717],{"class":110},[67,85470,33238],{"class":73},[67,85472,85473,85475,85478],{"class":69,"line":11644},[67,85474,80385],{"class":110},[67,85476,85477],{"class":110}," .sub-total::before",[67,85479,33238],{"class":73},[67,85481,85482,85485],{"class":69,"line":11650},[67,85483,85484],{"class":110},"    .amount::before",[67,85486,17369],{"class":73},[67,85488,85489,85491,85493,85495],{"class":69,"line":11664},[67,85490,80724],{"class":77},[67,85492,53203],{"class":73},[67,85494,80729],{"class":114},[67,85496,3148],{"class":73},[67,85498,85499,85501,85503,85505,85507],{"class":69,"line":11670},[67,85500,56683],{"class":77},[67,85502,53203],{"class":73},[67,85504,2488],{"class":77},[67,85506,53258],{"class":84},[67,85508,3148],{"class":73},[67,85510,85511],{"class":69,"line":11697},[67,85512,4020],{"class":73},[67,85514,85515],{"class":69,"line":11706},[67,85516,631],{"emptyLinePlaceholder":630},[67,85518,85519,85521,85524],{"class":69,"line":11712},[67,85520,80385],{"class":110},[67,85522,85523],{"class":110}," .spec",[67,85525,17369],{"class":73},[67,85527,85528,85530,85532,85534],{"class":69,"line":11720},[67,85529,63598],{"class":77},[67,85531,53203],{"class":73},[67,85533,2077],{"class":77},[67,85535,3148],{"class":73},[67,85537,85538,85540,85542,85545],{"class":69,"line":11725},[67,85539,59177],{"class":77},[67,85541,53203],{"class":73},[67,85543,85544],{"class":77},"#888",[67,85546,3148],{"class":73},[67,85548,85549,85551,85553,85555,85557],{"class":69,"line":18401},[67,85550,56683],{"class":77},[67,85552,53203],{"class":73},[67,85554,2538],{"class":77},[67,85556,53258],{"class":84},[67,85558,3148],{"class":73},[67,85560,85561,85563,85565,85567,85569],{"class":69,"line":18407},[67,85562,63760],{"class":77},[67,85564,53203],{"class":73},[67,85566,2689],{"class":77},[67,85568,53258],{"class":84},[67,85570,3148],{"class":73},[67,85572,85573],{"class":69,"line":18430},[67,85574,4020],{"class":73},[67,85576,85577],{"class":69,"line":18436},[67,85578,631],{"emptyLinePlaceholder":630},[67,85580,85581,85583,85586],{"class":69,"line":18459},[67,85582,80385],{"class":110},[67,85584,85585],{"class":110}," .count",[67,85587,17369],{"class":73},[67,85589,85590,85592,85594,85596],{"class":69,"line":18473},[67,85591,63598],{"class":77},[67,85593,53203],{"class":73},[67,85595,2209],{"class":77},[67,85597,3148],{"class":73},[67,85599,85600,85602,85604,85607],{"class":69,"line":18493},[67,85601,59177],{"class":77},[67,85603,53203],{"class":73},[67,85605,85606],{"class":77},"#aaa",[67,85608,3148],{"class":73},[67,85610,85611],{"class":69,"line":18499},[67,85612,4020],{"class":73},[67,85614,85615],{"class":69,"line":18510},[67,85616,631],{"emptyLinePlaceholder":630},[67,85618,85619,85621],{"class":69,"line":18533},[67,85620,74235],{"class":110},[67,85622,17369],{"class":73},[67,85624,85625,85627,85629,85631,85633],{"class":69,"line":18555},[67,85626,56532],{"class":77},[67,85628,53203],{"class":73},[67,85630,80334],{"class":77},[67,85632,53258],{"class":84},[67,85634,3148],{"class":73},[67,85636,85637,85639,85641,85643,85645],{"class":69,"line":18560},[67,85638,56467],{"class":77},[67,85640,53203],{"class":73},[67,85642,78],{"class":77},[67,85644,53322],{"class":77},[67,85646,3148],{"class":73},[67,85648,85649,85651,85653,85655],{"class":69,"line":18566},[67,85650,56770],{"class":77},[67,85652,53203],{"class":73},[67,85654,53243],{"class":77},[67,85656,3148],{"class":73},[67,85658,85659,85661,85663,85665],{"class":69,"line":18580},[67,85660,56781],{"class":77},[67,85662,53203],{"class":73},[67,85664,53346],{"class":77},[67,85666,3148],{"class":73},[67,85668,85669,85672,85674,85676,85678,85680,85683],{"class":69,"line":18593},[67,85670,85671],{"class":77},"      border-top",[67,85673,53203],{"class":73},[67,85675,2209],{"class":77},[67,85677,53258],{"class":84},[67,85679,53287],{"class":77},[67,85681,85682],{"class":77}," #4e4e4e",[67,85684,3148],{"class":73},[67,85686,85687,85689,85691,85693,85695],{"class":69,"line":18598},[67,85688,56456],{"class":77},[67,85690,53203],{"class":73},[67,85692,2689],{"class":77},[67,85694,53258],{"class":84},[67,85696,3148],{"class":73},[67,85698,85699],{"class":69,"line":18612},[67,85700,4020],{"class":73},[67,85702,85703],{"class":69,"line":18617},[67,85704,631],{"emptyLinePlaceholder":630},[67,85706,85707,85709,85712],{"class":69,"line":18623},[67,85708,74235],{"class":110},[67,85710,85711],{"class":110}," .amount",[67,85713,17369],{"class":73},[67,85715,85716,85718,85720,85722,85724],{"class":69,"line":18628},[67,85717,56683],{"class":77},[67,85719,53203],{"class":73},[67,85721,2639],{"class":77},[67,85723,53258],{"class":84},[67,85725,3148],{"class":73},[67,85727,85728,85730,85732,85734],{"class":69,"line":18642},[67,85729,59177],{"class":77},[67,85731,53203],{"class":73},[67,85733,80700],{"class":77},[67,85735,3148],{"class":73},[67,85737,85738,85740,85742,85744],{"class":69,"line":18647},[67,85739,64094],{"class":77},[67,85741,53203],{"class":73},[67,85743,53255],{"class":77},[67,85745,3148],{"class":73},[67,85747,85748,85750,85752,85754,85756],{"class":69,"line":18652},[67,85749,63511],{"class":77},[67,85751,53203],{"class":73},[67,85753,2645],{"class":77},[67,85755,53258],{"class":84},[67,85757,3148],{"class":73},[67,85759,85760],{"class":69,"line":18666},[67,85761,4020],{"class":73},[67,85763,85764,85766,85768],{"class":69,"line":18678},[67,85765,54181],{"class":73},[67,85767,1903],{"class":262},[67,85769,323],{"class":73},[67,85771,85772,85774,85776],{"class":69,"line":18683},[67,85773,376],{"class":73},[67,85775,53100],{"class":262},[67,85777,323],{"class":73},[67,85779,85780],{"class":69,"line":18696},[67,85781,631],{"emptyLinePlaceholder":630},[67,85783,85784,85786,85788],{"class":69,"line":18701},[67,85785,259],{"class":73},[67,85787,53565],{"class":262},[67,85789,323],{"class":73},[67,85791,85792,85794,85796,85798,85800,85802],{"class":69,"line":18706},[67,85793,328],{"class":73},[67,85795,53377],{"class":262},[67,85797,55248],{"class":110},[67,85799,85],{"class":73},[67,85801,64368],{"class":114},[67,85803,323],{"class":73},[67,85805,85806,85808,85810],{"class":69,"line":18711},[67,85807,54181],{"class":73},[67,85809,53377],{"class":262},[67,85811,323],{"class":73},[67,85813,85814,85816,85818,85820,85822,85824],{"class":69,"line":18724},[67,85815,328],{"class":73},[67,85817,53377],{"class":262},[67,85819,55248],{"class":110},[67,85821,85],{"class":73},[67,85823,64340],{"class":114},[67,85825,323],{"class":73},[67,85827,85828,85830,85832,85835,85837,85839,85841,85844,85846,85848,85850,85852],{"class":69,"line":18729},[67,85829,53107],{"class":73},[67,85831,53377],{"class":262},[67,85833,85834],{"class":73},">合计：\u003C",[67,85836,67],{"class":262},[67,85838,55248],{"class":110},[67,85840,85],{"class":73},[67,85842,85843],{"class":114},"\"amount\"",[67,85845,57075],{"class":73},[67,85847,67],{"class":262},[67,85849,57075],{"class":73},[67,85851,53377],{"class":262},[67,85853,323],{"class":73},[67,85855,85856,85858,85860],{"class":69,"line":34402},[67,85857,54181],{"class":73},[67,85859,53377],{"class":262},[67,85861,323],{"class":73},[67,85863,85864,85866,85868],{"class":69,"line":34408},[67,85865,328],{"class":73},[67,85867,53578],{"class":262},[67,85869,323],{"class":73},[67,85871,85872,85874,85876,85878],{"class":69,"line":34414},[67,85873,13021],{"class":84},[67,85875,81137],{"class":77},[67,85877,671],{"class":84},[67,85879,57208],{"class":73},[67,85881,85882],{"class":69,"line":34420},[67,85883,81146],{"class":73},[67,85885,85886,85888,85890],{"class":69,"line":34426},[67,85887,81151],{"class":73},[67,85889,81154],{"class":114},[67,85891,33238],{"class":73},[67,85893,85894,85896,85898],{"class":69,"line":34437},[67,85895,81161],{"class":73},[67,85897,81164],{"class":114},[67,85899,33238],{"class":73},[67,85901,85902,85904,85907],{"class":69,"line":34443},[67,85903,81171],{"class":73},[67,85905,85906],{"class":77},"289.9",[67,85908,33238],{"class":73},[67,85910,85911,85913,85915],{"class":69,"line":34463},[67,85912,81181],{"class":73},[67,85914,81184],{"class":114},[67,85916,33238],{"class":73},[67,85918,85919,85922,85924],{"class":69,"line":34469},[67,85920,85921],{"class":73},"        count: ",[67,85923,2077],{"class":77},[67,85925,33238],{"class":73},[67,85927,85928,85931,85934],{"class":69,"line":34480},[67,85929,85930],{"class":73},"        spec: { color: ",[67,85932,85933],{"class":114},"'白色'",[67,85935,57365],{"class":73},[67,85937,85938],{"class":69,"line":34486},[67,85939,79652],{"class":73},[67,85941,85942],{"class":69,"line":34492},[67,85943,81146],{"class":73},[67,85945,85946,85948,85950],{"class":69,"line":34498},[67,85947,81151],{"class":73},[67,85949,81245],{"class":114},[67,85951,33238],{"class":73},[67,85953,85954,85956,85958],{"class":69,"line":34504},[67,85955,81161],{"class":73},[67,85957,81254],{"class":114},[67,85959,33238],{"class":73},[67,85961,85962,85964,85967],{"class":69,"line":34510},[67,85963,81171],{"class":73},[67,85965,85966],{"class":77},"109.8",[67,85968,33238],{"class":73},[67,85970,85971,85973,85975],{"class":69,"line":34516},[67,85972,81181],{"class":73},[67,85974,81272],{"class":114},[67,85976,33238],{"class":73},[67,85978,85979,85981,85983],{"class":69,"line":34522},[67,85980,85921],{"class":73},[67,85982,2071],{"class":77},[67,85984,33238],{"class":73},[67,85986,85987,85990,85992,85994,85996],{"class":69,"line":34542},[67,85988,85989],{"class":73},"        spec: { size: ",[67,85991,83663],{"class":114},[67,85993,57225],{"class":73},[67,85995,83668],{"class":114},[67,85997,57365],{"class":73},[67,85999,86000],{"class":69,"line":34548},[67,86001,79652],{"class":73},[67,86003,86004],{"class":69,"line":34564},[67,86005,81146],{"class":73},[67,86007,86008,86010,86012],{"class":69,"line":34570},[67,86009,81151],{"class":73},[67,86011,81289],{"class":114},[67,86013,33238],{"class":73},[67,86015,86016,86018,86020],{"class":69,"line":34584},[67,86017,81161],{"class":73},[67,86019,81298],{"class":114},[67,86021,33238],{"class":73},[67,86023,86024,86026,86029],{"class":69,"line":34590},[67,86025,81171],{"class":73},[67,86027,86028],{"class":77},"488",[67,86030,33238],{"class":73},[67,86032,86033,86035,86037],{"class":69,"line":34605},[67,86034,81181],{"class":73},[67,86036,81316],{"class":114},[67,86038,33238],{"class":73},[67,86040,86041,86043,86045],{"class":69,"line":34611},[67,86042,85921],{"class":73},[67,86044,2209],{"class":77},[67,86046,33238],{"class":73},[67,86048,86049,86051,86054,86057,86060],{"class":69,"line":34620},[67,86050,85930],{"class":73},[67,86052,86053],{"class":114},"'青色'",[67,86055,86056],{"class":73},", sum: ",[67,86058,86059],{"class":114},"'一大四小'",[67,86061,57365],{"class":73},[67,86063,86064],{"class":69,"line":34626},[67,86065,79652],{"class":73},[67,86067,86068],{"class":69,"line":34635},[67,86069,81146],{"class":73},[67,86071,86072,86074,86076],{"class":69,"line":34641},[67,86073,81151],{"class":73},[67,86075,81333],{"class":114},[67,86077,33238],{"class":73},[67,86079,86080,86082,86084],{"class":69,"line":34647},[67,86081,81161],{"class":73},[67,86083,81342],{"class":114},[67,86085,33238],{"class":73},[67,86087,86088,86090,86093],{"class":69,"line":34656},[67,86089,81171],{"class":73},[67,86091,86092],{"class":77},"139",[67,86094,33238],{"class":73},[67,86096,86097,86099,86101],{"class":69,"line":34662},[67,86098,81181],{"class":73},[67,86100,81360],{"class":114},[67,86102,33238],{"class":73},[67,86104,86105,86107,86109],{"class":69,"line":34673},[67,86106,85921],{"class":73},[67,86108,2209],{"class":77},[67,86110,33238],{"class":73},[67,86112,86113,86115,86118,86120,86123],{"class":69,"line":34679},[67,86114,85989],{"class":73},[67,86116,86117],{"class":114},"'小号'",[67,86119,57225],{"class":73},[67,86121,86122],{"class":114},"'紫色'",[67,86124,57231],{"class":73},[67,86126,86127,86130],{"class":69,"line":34698},[67,86128,86129],{"class":73},"        gift: ",[67,86131,86132],{"class":114},"'50g茶叶,清洗球'\n",[67,86134,86135],{"class":69,"line":34704},[67,86136,54162],{"class":73},[67,86138,86139],{"class":69,"line":34715},[67,86140,54871],{"class":73},[67,86142,86143],{"class":69,"line":34721},[67,86144,86145],{"class":2058},"    \u002F\u002F  1.根据数据渲染页面\n",[67,86147,86148,86150,86152,86154,86156,86158,86160,86162,86164,86166,86168,86170],{"class":69,"line":34741},[67,86149,54171],{"class":73},[67,86151,56160],{"class":110},[67,86153,854],{"class":73},[67,86155,81661],{"class":114},[67,86157,76009],{"class":73},[67,86159,85],{"class":84},[67,86161,81808],{"class":73},[67,86163,75804],{"class":110},[67,86165,854],{"class":73},[67,86167,81555],{"class":7033},[67,86169,81558],{"class":84},[67,86171,17369],{"class":73},[67,86173,86174],{"class":69,"line":34757},[67,86175,86176],{"class":2058},"      \u002F\u002F 对象解构\n",[67,86178,86179,86181,86183,86185,86187,86189,86191,86194,86196,86198,86200,86203,86205,86208,86210,86212],{"class":69,"line":34763},[67,86180,59989],{"class":84},[67,86182,81567],{"class":73},[67,86184,81580],{"class":77},[67,86186,1868],{"class":73},[67,86188,81570],{"class":77},[67,86190,1868],{"class":73},[67,86192,86193],{"class":77},"count",[67,86195,1868],{"class":73},[67,86197,81575],{"class":77},[67,86199,1868],{"class":73},[67,86201,86202],{"class":77},"spec",[67,86204,1868],{"class":73},[67,86206,86207],{"class":77},"gift",[67,86209,81583],{"class":73},[67,86211,85],{"class":84},[67,86213,81588],{"class":73},[67,86215,86216],{"class":69,"line":34777},[67,86217,86218],{"class":2058},"      \u002F\u002F 规格文字模块处理\n",[67,86220,86221,86223,86226,86228,86230,86232,86234,86236,86238,86240],{"class":69,"line":34783},[67,86222,59989],{"class":84},[67,86224,86225],{"class":77}," text",[67,86227,671],{"class":84},[67,86229,83698],{"class":73},[67,86231,83701],{"class":110},[67,86233,83704],{"class":73},[67,86235,75983],{"class":110},[67,86237,854],{"class":73},[67,86239,83711],{"class":114},[67,86241,829],{"class":73},[67,86243,86244],{"class":69,"line":34789},[67,86245,86246],{"class":2058},"      \u002F\u002F 处理赠品模块\n",[67,86248,86249,86251,86253,86255,86258,86260,86262,86264,86266,86269,86271,86273,86275,86277,86279,86282,86284,86287,86289,86291,86293,86295,86297,86299],{"class":69,"line":34800},[67,86250,59989],{"class":84},[67,86252,75679],{"class":77},[67,86254,671],{"class":84},[67,86256,86257],{"class":73}," gift ",[67,86259,2974],{"class":84},[67,86261,84871],{"class":73},[67,86263,84874],{"class":110},[67,86265,854],{"class":73},[67,86267,86268],{"class":114},"','",[67,86270,32603],{"class":73},[67,86272,75804],{"class":110},[67,86274,854],{"class":73},[67,86276,81555],{"class":7033},[67,86278,81558],{"class":84},[67,86280,86281],{"class":114}," `\u003Cspan class=\"tag\">【赠品】${",[67,86283,81555],{"class":73},[67,86285,86286],{"class":114},"}\u003C\u002Fspan>`",[67,86288,32603],{"class":73},[67,86290,75983],{"class":110},[67,86292,854],{"class":73},[67,86294,75988],{"class":114},[67,86296,15512],{"class":73},[67,86298,2848],{"class":84},[67,86300,71864],{"class":114},[67,86302,86303],{"class":69,"line":34806},[67,86304,86305],{"class":2058},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[67,86307,86308,86310,86313,86315,86318,86320,86322,86324,86327,86329,86331,86333,86336,86338,86340],{"class":69,"line":34812},[67,86309,59989],{"class":84},[67,86311,86312],{"class":77}," subtotal",[67,86314,671],{"class":84},[67,86316,86317],{"class":73}," ((price ",[67,86319,965],{"class":84},[67,86321,7571],{"class":77},[67,86323,986],{"class":84},[67,86325,86326],{"class":73}," count) ",[67,86328,2573],{"class":84},[67,86330,7571],{"class":77},[67,86332,32603],{"class":73},[67,86334,86335],{"class":110},"toFixed",[67,86337,854],{"class":73},[67,86339,2077],{"class":77},[67,86341,829],{"class":73},[67,86343,86344],{"class":69,"line":34822},[67,86345,631],{"emptyLinePlaceholder":630},[67,86347,86348,86350],{"class":69,"line":34828},[67,86349,75742],{"class":84},[67,86351,71928],{"class":114},[67,86353,86354],{"class":69,"line":34839},[67,86355,86356],{"class":114},"        \u003Cdiv class=\"item\">\n",[67,86358,86359,86362,86364],{"class":69,"line":34845},[67,86360,86361],{"class":114},"          \u003Cimg src=\"${",[67,86363,81580],{"class":73},[67,86365,81612],{"class":114},[67,86367,86368,86371,86373,86376,86378],{"class":69,"line":34855},[67,86369,86370],{"class":114},"          \u003Cp class=\"name\">${",[67,86372,81570],{"class":73},[67,86374,86375],{"class":114},"}${",[67,86377,3157],{"class":73},[67,86379,81622],{"class":114},[67,86381,86382,86385,86387],{"class":69,"line":34860},[67,86383,86384],{"class":114},"          \u003Cp class=\"spec\">${",[67,86386,603],{"class":73},[67,86388,81622],{"class":114},[67,86390,86391,86394,86396,86398,86400,86402,86404,86406],{"class":69,"line":34866},[67,86392,86393],{"class":114},"          \u003Cp class=\"price\">${",[67,86395,81575],{"class":73},[67,86397,2547],{"class":114},[67,86399,86335],{"class":110},[67,86401,854],{"class":114},[67,86403,2077],{"class":77},[67,86405,2420],{"class":114},[67,86407,81622],{"class":114},[67,86409,86410,86413,86415],{"class":69,"line":34915},[67,86411,86412],{"class":114},"          \u003Cp class=\"count\">x${",[67,86414,86193],{"class":73},[67,86416,81622],{"class":114},[67,86418,86419,86422,86425],{"class":69,"line":34962},[67,86420,86421],{"class":114},"          \u003Cp class=\"sub-total\">${",[67,86423,86424],{"class":73},"subtotal",[67,86426,81622],{"class":114},[67,86428,86429],{"class":69,"line":34967},[67,86430,86431],{"class":114},"        \u003C\u002Fdiv> \n",[67,86433,86434],{"class":69,"line":34973},[67,86435,86436],{"class":114},"             `\n",[67,86438,86439,86442,86444,86446,86448],{"class":69,"line":34992},[67,86440,86441],{"class":73},"    }).",[67,86443,75983],{"class":110},[67,86445,854],{"class":73},[67,86447,75988],{"class":114},[67,86449,829],{"class":73},[67,86451,86452],{"class":69,"line":34998},[67,86453,86454],{"class":2058},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[67,86456,86457,86459,86461,86463,86465,86468,86470,86473,86475,86477,86479,86482,86485,86487,86490,86492,86494,86496,86499,86501,86503,86505,86507],{"class":69,"line":35018},[67,86458,13021],{"class":84},[67,86460,64545],{"class":77},[67,86462,671],{"class":84},[67,86464,81808],{"class":73},[67,86466,86467],{"class":110},"reduce",[67,86469,4209],{"class":73},[67,86471,86472],{"class":7033},"prev",[67,86474,1868],{"class":73},[67,86476,81555],{"class":7033},[67,86478,15512],{"class":73},[67,86480,86481],{"class":84},"=>",[67,86483,86484],{"class":73}," prev ",[67,86486,2471],{"class":84},[67,86488,86489],{"class":73}," (item.price ",[67,86491,965],{"class":84},[67,86493,7571],{"class":77},[67,86495,986],{"class":84},[67,86497,86498],{"class":73}," item.count) ",[67,86500,2573],{"class":84},[67,86502,7571],{"class":77},[67,86504,1868],{"class":73},[67,86506,78],{"class":77},[67,86508,829],{"class":73},[67,86510,86511,86513,86515,86517,86520,86522,86524,86527,86529,86531,86533],{"class":69,"line":35024},[67,86512,54171],{"class":73},[67,86514,56160],{"class":110},[67,86516,854],{"class":73},[67,86518,86519],{"class":114},"'.amount'",[67,86521,76009],{"class":73},[67,86523,85],{"class":84},[67,86525,86526],{"class":73}," total.",[67,86528,86335],{"class":110},[67,86530,854],{"class":73},[67,86532,2077],{"class":77},[67,86534,829],{"class":73},[67,86536,86537,86539,86541],{"class":69,"line":35030},[67,86538,54181],{"class":73},[67,86540,53578],{"class":262},[67,86542,323],{"class":73},[67,86544,86545,86547,86549],{"class":69,"line":35040},[67,86546,376],{"class":73},[67,86548,53565],{"class":262},[67,86550,323],{"class":73},[67,86552,86553],{"class":69,"line":35045},[67,86554,631],{"emptyLinePlaceholder":630},[67,86556,86557,86559,86561],{"class":69,"line":35051},[67,86558,376],{"class":73},[67,86560,52403],{"class":262},[67,86562,323],{"class":73},[14,86564,86566],{"id":86565},"_411-编程思想","4.11 编程思想",[391,86568,86570],{"id":86569},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86572,86573,86576],{},[2144,86574,86575],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86578,86579],{},"调用就可以了",[19,86581,86582],{},[3317,86583],{"alt":63,"src":86584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[391,86586,86588],{"id":86587},"_4112-面向对象","4.11.2 面向对象",[19,86590,86591],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86593,86594],{},[3317,86595],{"alt":63,"src":86596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86598,86599],{},"面向对象的特性：",[2994,86601,86602,86605,86608],{},[29,86603,86604],{},"封装性",[29,86606,86607],{},"继承性",[29,86609,86610],{},"多态性",[391,86612,86614],{"id":86613},"_4113-两者比较","4.11.3 两者比较",[19,86616,86617],{},[3317,86618],{"alt":63,"src":86619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86621,86623],{"id":86622},"_412-构造函数回顾","4.12 构造函数回顾",[19,86625,86626],{},[3317,86627],{"alt":63,"src":86628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86630,86631],{},[3317,86632],{"alt":63,"src":86633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86635,86636],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86638,86639],{},[3317,86640],{"alt":63,"src":86641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86643,86645],{"id":86644},"_413-原型","4.13 原型",[391,86647,86649],{"id":86648},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86651,86652],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86654,86655],{},[3317,86656],{"alt":63,"src":86657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86659,86660],{},[3317,86661],{"alt":63,"src":86662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86664,86665],{},"原型是构造函数的属性，它也是一个对象",[19,86667,86668],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86670,86671],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[58,86673,86675],{"className":250,"code":86674,"language":252,"meta":63,"style":63},"\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",[32,86676,86677,86685,86690,86698,86703,86708,86713,86718,86723,86727,86731,86735,86740,86745,86749,86754,86759,86764,86769,86774,86778,86786],{"__ignoreMap":63},[67,86678,86679,86681,86683],{"class":69,"line":70},[67,86680,259],{"class":73},[67,86682,53565],{"class":262},[67,86684,323],{"class":73},[67,86686,86687],{"class":69,"line":191},[67,86688,86689],{"class":2058},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[67,86691,86692,86694,86696],{"class":69,"line":202},[67,86693,328],{"class":73},[67,86695,53578],{"class":262},[67,86697,323],{"class":73},[67,86699,86700],{"class":69,"line":641},[67,86701,86702],{"class":73},"    function Star(uname, age) {\n",[67,86704,86705],{"class":69,"line":655},[67,86706,86707],{"class":73},"      this.uname = uname,\n",[67,86709,86710],{"class":69,"line":660},[67,86711,86712],{"class":73},"        this.age = age\n",[67,86714,86715],{"class":69,"line":665},[67,86716,86717],{"class":73},"      \u002F\u002F this.sing = function () {\n",[67,86719,86720],{"class":69,"line":677},[67,86721,86722],{"class":73},"      \u002F\u002F   console.log('唱歌')\n",[67,86724,86725],{"class":69,"line":683},[67,86726,631],{"emptyLinePlaceholder":630},[67,86728,86729],{"class":69,"line":689},[67,86730,61798],{"class":73},[67,86732,86733],{"class":69,"line":694},[67,86734,4020],{"class":73},[67,86736,86737],{"class":69,"line":700},[67,86738,86739],{"class":73},"    Star.prototype.sing = function () {\n",[67,86741,86742],{"class":69,"line":706},[67,86743,86744],{"class":73},"      console.log('唱歌')\n",[67,86746,86747],{"class":69,"line":712},[67,86748,4020],{"class":73},[67,86750,86751],{"class":69,"line":717},[67,86752,86753],{"class":73},"    \u002F\u002F console.dir(Star.prototype)\n",[67,86755,86756],{"class":69,"line":723},[67,86757,86758],{"class":73},"    const pink = new Star('pink', 18)\n",[67,86760,86761],{"class":69,"line":729},[67,86762,86763],{"class":73},"    const red = new Star('red', 20)\n",[67,86765,86766],{"class":69,"line":735},[67,86767,86768],{"class":73},"    pink.sing()\n",[67,86770,86771],{"class":69,"line":741},[67,86772,86773],{"class":73},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[67,86775,86776],{"class":69,"line":747},[67,86777,631],{"emptyLinePlaceholder":630},[67,86779,86780,86782,86784],{"class":69,"line":753},[67,86781,54181],{"class":73},[67,86783,53578],{"class":262},[67,86785,323],{"class":73},[67,86787,86788,86790,86792],{"class":69,"line":758},[67,86789,376],{"class":73},[67,86791,53565],{"class":262},[67,86793,323],{"class":73},[19,86795,86796],{},[3317,86797],{"alt":63,"src":86798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[58,86800,86802],{"className":250,"code":86801,"language":252,"meta":63,"style":63},"\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",[32,86803,86804,86812,86820,86825,86830,86835,86840,86844,86849,86854,86859,86863,86868,86872,86876,86881,86885,86893],{"__ignoreMap":63},[67,86805,86806,86808,86810],{"class":69,"line":70},[67,86807,259],{"class":73},[67,86809,53565],{"class":262},[67,86811,323],{"class":73},[67,86813,86814,86816,86818],{"class":69,"line":191},[67,86815,328],{"class":73},[67,86817,53578],{"class":262},[67,86819,323],{"class":73},[67,86821,86822],{"class":69,"line":202},[67,86823,86824],{"class":73},"    let that\n",[67,86826,86827],{"class":69,"line":641},[67,86828,86829],{"class":73},"    function Star(uname) {\n",[67,86831,86832],{"class":69,"line":655},[67,86833,86834],{"class":73},"      this.uname = uname\n",[67,86836,86837],{"class":69,"line":660},[67,86838,86839],{"class":73},"      that = this\n",[67,86841,86842],{"class":69,"line":665},[67,86843,4020],{"class":73},[67,86845,86846],{"class":69,"line":677},[67,86847,86848],{"class":73},"    \u002F\u002F 实例对象是 ldh\n",[67,86850,86851],{"class":69,"line":683},[67,86852,86853],{"class":73},"    const ldh = new Star('刘德华')\n",[67,86855,86856],{"class":69,"line":689},[67,86857,86858],{"class":73},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[67,86860,86861],{"class":69,"line":694},[67,86862,631],{"emptyLinePlaceholder":630},[67,86864,86865],{"class":69,"line":700},[67,86866,86867],{"class":73},"    Star.sing = function () {\n",[67,86869,86870],{"class":69,"line":706},[67,86871,86744],{"class":73},[67,86873,86874],{"class":69,"line":712},[67,86875,4020],{"class":73},[67,86877,86878],{"class":69,"line":717},[67,86879,86880],{"class":73},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[67,86882,86883],{"class":69,"line":723},[67,86884,631],{"emptyLinePlaceholder":630},[67,86886,86887,86889,86891],{"class":69,"line":729},[67,86888,54181],{"class":73},[67,86890,53578],{"class":262},[67,86892,323],{"class":73},[67,86894,86895,86897,86899],{"class":69,"line":735},[67,86896,376],{"class":73},[67,86898,53565],{"class":262},[67,86900,323],{"class":73},[19,86902,86903],{},"构造函数的this指向的是实例对象；",[19,86905,86906],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[391,86908,86910],{"id":86909},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86912,86913],{},[3317,86914],{"alt":63,"src":86915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[58,86917,86919],{"className":250,"code":86918,"language":252,"meta":63,"style":63},"\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",[32,86920,86921,86929,86937,86942,86947,86952,86957,86962,86967,86972,86977,86982,86987,86991,86996,87001,87006,87011,87015,87020,87025,87030,87035,87039,87044,87049,87054,87059,87063,87068,87072,87080],{"__ignoreMap":63},[67,86922,86923,86925,86927],{"class":69,"line":70},[67,86924,259],{"class":73},[67,86926,53565],{"class":262},[67,86928,323],{"class":73},[67,86930,86931,86933,86935],{"class":69,"line":191},[67,86932,328],{"class":73},[67,86934,53578],{"class":262},[67,86936,323],{"class":73},[67,86938,86939],{"class":69,"line":202},[67,86940,86941],{"class":73},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[67,86943,86944],{"class":69,"line":641},[67,86945,86946],{"class":73},"    const arr = [1, 2, 3]\n",[67,86948,86949],{"class":69,"line":655},[67,86950,86951],{"class":73},"    \u002F\u002F 自己定义数组的扩展方法\n",[67,86953,86954],{"class":69,"line":660},[67,86955,86956],{"class":73},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[67,86958,86959],{"class":69,"line":665},[67,86960,86961],{"class":73},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[67,86963,86964],{"class":69,"line":677},[67,86965,86966],{"class":73},"    \u002F\u002F ①.最大值\n",[67,86968,86969],{"class":69,"line":683},[67,86970,86971],{"class":73},"    Array.prototype.max = function () {\n",[67,86973,86974],{"class":69,"line":689},[67,86975,86976],{"class":73},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[67,86978,86979],{"class":69,"line":694},[67,86980,86981],{"class":73},"      return Math.max(...this)\n",[67,86983,86984],{"class":69,"line":700},[67,86985,86986],{"class":73},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[67,86988,86989],{"class":69,"line":706},[67,86990,4020],{"class":73},[67,86992,86993],{"class":69,"line":712},[67,86994,86995],{"class":73},"    console.log(arr.max())\n",[67,86997,86998],{"class":69,"line":717},[67,86999,87000],{"class":73},"    \u002F\u002F ②最小值\n",[67,87002,87003],{"class":69,"line":723},[67,87004,87005],{"class":73},"    Array.prototype.min = function () {\n",[67,87007,87008],{"class":69,"line":729},[67,87009,87010],{"class":73},"      return Math.min(...this)\n",[67,87012,87013],{"class":69,"line":735},[67,87014,4020],{"class":73},[67,87016,87017],{"class":69,"line":741},[67,87018,87019],{"class":73},"    console.log(arr.min())\n",[67,87021,87022],{"class":69,"line":747},[67,87023,87024],{"class":73},"    \u002F\u002F③求和\n",[67,87026,87027],{"class":69,"line":753},[67,87028,87029],{"class":73},"    Array.prototype.sum = function () {\n",[67,87031,87032],{"class":69,"line":758},[67,87033,87034],{"class":73},"      return this.reduce((prev, current) => prev + current, 0)\n",[67,87036,87037],{"class":69,"line":764},[67,87038,4020],{"class":73},[67,87040,87041],{"class":69,"line":770},[67,87042,87043],{"class":73},"    console.log(arr.sum())\n",[67,87045,87046],{"class":69,"line":776},[67,87047,87048],{"class":73},"    \u002F\u002F ③排序\n",[67,87050,87051],{"class":69,"line":782},[67,87052,87053],{"class":73},"    Array.prototype.rever = function () {\n",[67,87055,87056],{"class":69,"line":788},[67,87057,87058],{"class":73},"      return this.reverse()\n",[67,87060,87061],{"class":69,"line":793},[67,87062,4020],{"class":73},[67,87064,87065],{"class":69,"line":798},[67,87066,87067],{"class":73},"    console.log(arr.rever())\n",[67,87069,87070],{"class":69,"line":816},[67,87071,631],{"emptyLinePlaceholder":630},[67,87073,87074,87076,87078],{"class":69,"line":832},[67,87075,54181],{"class":73},[67,87077,53578],{"class":262},[67,87079,323],{"class":73},[67,87081,87082,87084,87086],{"class":69,"line":843},[67,87083,376],{"class":73},[67,87085,53565],{"class":262},[67,87087,323],{"class":73},[19,87089,87090],{},[3317,87091],{"alt":63,"src":87092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[391,87094,87096],{"id":87095},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87098,87099],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87101,87102],{},[3317,87103],{"alt":63,"src":87104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[58,87106,87108],{"className":250,"code":87107,"language":252,"meta":63,"style":63},"\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",[32,87109,87110,87118,87126,87131,87136,87140,87145,87150,87155,87163],{"__ignoreMap":63},[67,87111,87112,87114,87116],{"class":69,"line":70},[67,87113,259],{"class":73},[67,87115,53565],{"class":262},[67,87117,323],{"class":73},[67,87119,87120,87122,87124],{"class":69,"line":191},[67,87121,328],{"class":73},[67,87123,53578],{"class":262},[67,87125,323],{"class":73},[67,87127,87128],{"class":69,"line":202},[67,87129,87130],{"class":73},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[67,87132,87133],{"class":69,"line":641},[67,87134,87135],{"class":73},"    function Star() {\n",[67,87137,87138],{"class":69,"line":655},[67,87139,4020],{"class":73},[67,87141,87142],{"class":69,"line":660},[67,87143,87144],{"class":73},"    const ldh = new Star()\n",[67,87146,87147],{"class":69,"line":665},[67,87148,87149],{"class":73},"    console.log(Star.prototype)\n",[67,87151,87152],{"class":69,"line":677},[67,87153,87154],{"class":73},"    console.log(Star.prototype.constructor === Star)\n",[67,87156,87157,87159,87161],{"class":69,"line":683},[67,87158,54181],{"class":73},[67,87160,53578],{"class":262},[67,87162,323],{"class":73},[67,87164,87165,87167,87169],{"class":69,"line":689},[67,87166,376],{"class":73},[67,87168,53565],{"class":262},[67,87170,323],{"class":73},[19,87172,87173],{},[3317,87174],{"alt":63,"src":87175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87177,87178],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[58,87180,87182],{"className":250,"code":87181,"language":252,"meta":63,"style":63},"  \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",[32,87183,87184,87192,87196,87200,87204,87209,87214,87219,87223,87228,87233,87238,87243,87248,87253,87257,87261,87266,87271,87276,87280,87285,87290,87294,87298,87302],{"__ignoreMap":63},[67,87185,87186,87188,87190],{"class":69,"line":70},[67,87187,328],{"class":73},[67,87189,53578],{"class":262},[67,87191,323],{"class":73},[67,87193,87194],{"class":69,"line":191},[67,87195,87130],{"class":73},[67,87197,87198],{"class":69,"line":202},[67,87199,87135],{"class":73},[67,87201,87202],{"class":69,"line":641},[67,87203,4020],{"class":73},[67,87205,87206],{"class":69,"line":655},[67,87207,87208],{"class":73},"    \u002F\u002F const ldh = new Star()\n",[67,87210,87211],{"class":69,"line":660},[67,87212,87213],{"class":73},"    \u002F\u002F console.log(Star.prototype)\n",[67,87215,87216],{"class":69,"line":665},[67,87217,87218],{"class":73},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[67,87220,87221],{"class":69,"line":677},[67,87222,631],{"emptyLinePlaceholder":630},[67,87224,87225],{"class":69,"line":683},[67,87226,87227],{"class":73},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[67,87229,87230],{"class":69,"line":689},[67,87231,87232],{"class":73},"    \u002F\u002F Star.prototype.sing = function () {\n",[67,87234,87235],{"class":69,"line":694},[67,87236,87237],{"class":73},"    \u002F\u002F   console.log('唱歌')\n",[67,87239,87240],{"class":69,"line":700},[67,87241,87242],{"class":73},"    \u002F\u002F }\n",[67,87244,87245],{"class":69,"line":706},[67,87246,87247],{"class":73},"    \u002F\u002F Star.prototype.dance = function () {\n",[67,87249,87250],{"class":69,"line":712},[67,87251,87252],{"class":73},"    \u002F\u002F   console.log('跳舞')\n",[67,87254,87255],{"class":69,"line":717},[67,87256,87242],{"class":73},[67,87258,87259],{"class":69,"line":723},[67,87260,87149],{"class":73},[67,87262,87263],{"class":69,"line":729},[67,87264,87265],{"class":73},"    Star.prototype = {\n",[67,87267,87268],{"class":69,"line":735},[67,87269,87270],{"class":73},"      sing: function () {\n",[67,87272,87273],{"class":69,"line":741},[67,87274,87275],{"class":73},"        console.log('唱歌')\n",[67,87277,87278],{"class":69,"line":747},[67,87279,79652],{"class":73},[67,87281,87282],{"class":69,"line":753},[67,87283,87284],{"class":73},"      dance: function () {\n",[67,87286,87287],{"class":69,"line":758},[67,87288,87289],{"class":73},"        console.log('跳舞')\n",[67,87291,87292],{"class":69,"line":764},[67,87293,54162],{"class":73},[67,87295,87296],{"class":69,"line":770},[67,87297,4020],{"class":73},[67,87299,87300],{"class":69,"line":776},[67,87301,87149],{"class":73},[67,87303,87304,87306,87308],{"class":69,"line":782},[67,87305,54181],{"class":73},[67,87307,53578],{"class":262},[67,87309,323],{"class":73},[19,87311,87312],{},"进行输出结果后会发现：",[19,87314,87315],{},[3317,87316],{"alt":63,"src":87317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87319,87320],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87322,87323],{},"所以，要重新指回创造这个原型对象的构造函数",[58,87325,87327],{"className":72973,"code":87326,"language":72975,"meta":63,"style":63},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[32,87328,87329,87343,87348,87353,87364,87377,87382,87393,87407,87411],{"__ignoreMap":63},[67,87330,87331,87334,87336,87339,87341],{"class":69,"line":70},[67,87332,87333],{"class":77},"Star",[67,87335,2547],{"class":73},[67,87337,87338],{"class":77},"prototype",[67,87340,671],{"class":84},[67,87342,17369],{"class":73},[67,87344,87345],{"class":69,"line":191},[67,87346,87347],{"class":2058},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[67,87349,87350],{"class":69,"line":202},[67,87351,87352],{"class":73},"  constructor: Star,\n",[67,87354,87355,87358,87360,87362],{"class":69,"line":641},[67,87356,87357],{"class":110},"  sing",[67,87359,53203],{"class":73},[67,87361,56210],{"class":84},[67,87363,56213],{"class":73},[67,87365,87366,87368,87370,87372,87375],{"class":69,"line":655},[67,87367,75513],{"class":73},[67,87369,60008],{"class":110},[67,87371,854],{"class":73},[67,87373,87374],{"class":114},"'唱歌'",[67,87376,829],{"class":73},[67,87378,87379],{"class":69,"line":660},[67,87380,87381],{"class":73},"   },\n",[67,87383,87384,87387,87389,87391],{"class":69,"line":665},[67,87385,87386],{"class":110},"   dance",[67,87388,53203],{"class":73},[67,87390,56210],{"class":84},[67,87392,56213],{"class":73},[67,87394,87395,87398,87400,87402,87405],{"class":69,"line":677},[67,87396,87397],{"class":73},"     console.",[67,87399,60008],{"class":110},[67,87401,854],{"class":73},[67,87403,87404],{"class":114},"'跳舞'",[67,87406,829],{"class":73},[67,87408,87409],{"class":69,"line":683},[67,87410,6129],{"class":73},[67,87412,87413],{"class":69,"line":689},[67,87414,3419],{"class":73},[19,87416,87417],{},[3317,87418],{"alt":63,"src":87419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87421,87422],{},"总结1：",[19,87424,87425],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87427,87428],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87430,87431],{},"constructor指的是他的来源",[19,87433,87434],{},[3317,87435],{"alt":63,"src":87436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87438,87439],{},[3317,87440],{"alt":63,"src":87441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87443,87444],{},"总结2：",[19,87446,87447],{},[3317,87448],{"alt":63,"src":87449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87451,87452],{},[3317,87453],{"alt":63,"src":87454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87456,87457],{},[3317,87458],{"alt":63,"src":87459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[391,87461,87463],{"id":87462},"_4134-对象原型","4.13.4 对象原型",[19,87465,87466],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87468,87469],{},"对象原型就是__proto__这个属性",[19,87471,87472],{},[3317,87473],{"alt":63,"src":87474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87476,87477],{},[3317,87478],{"alt":63,"src":87479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87481,87482],{},[3317,87483],{"alt":63,"src":87484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87486,87487],{},[3317,87488],{"alt":63,"src":87489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[58,87491,87493],{"className":250,"code":87492,"language":252,"meta":63,"style":63},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,87494,87495,87503,87511,87515,87519,87523,87528,87536],{"__ignoreMap":63},[67,87496,87497,87499,87501],{"class":69,"line":70},[67,87498,259],{"class":73},[67,87500,53565],{"class":262},[67,87502,323],{"class":73},[67,87504,87505,87507,87509],{"class":69,"line":191},[67,87506,328],{"class":73},[67,87508,53578],{"class":262},[67,87510,323],{"class":73},[67,87512,87513],{"class":69,"line":202},[67,87514,87135],{"class":73},[67,87516,87517],{"class":69,"line":641},[67,87518,4020],{"class":73},[67,87520,87521],{"class":69,"line":655},[67,87522,87144],{"class":73},[67,87524,87525],{"class":69,"line":660},[67,87526,87527],{"class":73},"    console.log(ldh)\n",[67,87529,87530,87532,87534],{"class":69,"line":665},[67,87531,54181],{"class":73},[67,87533,53578],{"class":262},[67,87535,323],{"class":73},[67,87537,87538,87540,87542],{"class":69,"line":677},[67,87539,376],{"class":73},[67,87541,53565],{"class":262},[67,87543,323],{"class":73},[19,87545,87546],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87548,87549],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87551,87552],{},[3317,87553],{"alt":63,"src":87554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87556,87557],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87559,87560],{},"对象原型指向原型对象",[19,87562,87563],{},[3317,87564],{"alt":63,"src":87565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87567,87568],{},[3317,87569],{"alt":63,"src":87570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87572,87573],{},[3317,87574],{"alt":63,"src":87575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[391,87577,87579],{"id":87578},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87581,87582],{},[3317,87583],{"alt":63,"src":87584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[26,87586,87587,87590,87593,87596],{},[29,87588,87589],{},"构造函数通过new的形式实例化得到实例对象",[29,87591,87592],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[29,87594,87595],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[29,87597,87598],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87600,87601],{},[3317,87602],{"alt":63,"src":87603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87605,87606],{},"题目梳理：",[19,87608,87609],{},[3317,87610],{"alt":63,"src":87611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[391,87613,87615],{"id":87614},"_4136-原型继承","4.13.6 原型继承",[19,87617,87618],{},[3317,87619],{"alt":63,"src":87620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87622,87623],{},[3317,87624],{"alt":63,"src":87625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87627,87628],{},[3317,87629],{"alt":63,"src":87630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87632,87633],{},[3317,87634],{"alt":63,"src":87635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87637,87638],{},[3317,87639],{"alt":63,"src":87640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87642,87643],{},[3317,87644],{"alt":63,"src":87645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87647,87648],{},[3317,87649],{"alt":63,"src":87650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87652,87653],{},[3317,87654],{"alt":63,"src":87655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87657,87658],{},"回顾：构造函数每次new得到对象都是不同的",[391,87660,87662],{"id":87661},"_4137-原型链","4.13.7 原型链",[19,87664,87665],{},[3317,87666],{"alt":63,"src":87667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87669,87670],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87672,87673],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87675,87676],{},"大哥是Object",[19,87678,87679],{},[3317,87680],{"alt":63,"src":87681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87683,87684],{},[3317,87685],{"alt":63,"src":87686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87688,87689],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87691,87692],{},"万物皆对象",[391,87694,87696],{"id":87695},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87698,87699],{},"模态框",[19,87701,87702],{},"以后遇见这个效果直接使用这个就行",[19,87704,87705],{},[3317,87706],{"alt":63,"src":87707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87709,87710],{},[3317,87711],{"alt":63,"src":87712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87714,87715],{},[3317,87716],{"alt":63,"src":87717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87719,87720],{},[3317,87721],{"alt":63,"src":87722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87724,87725],{},"补充知识点：",[26,87727,87728],{},[29,87729,87730],{},"append()",[19,87732,87733],{},[3317,87734],{"alt":63,"src":87735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[58,87737,87739],{"className":52401,"code":87738,"language":52403,"meta":63,"style":63},"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",[32,87740,87741,87746,87751,87756,87760,87764,87768,87773,87778,87783,87787],{"__ignoreMap":63},[67,87742,87743],{"class":69,"line":70},[67,87744,87745],{"class":73},"append(param1)\n",[67,87747,87748],{"class":69,"line":191},[67,87749,87750],{"class":73},"append(param1, param2)\n",[67,87752,87753],{"class":69,"line":202},[67,87754,87755],{"class":73},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[67,87757,87758],{"class":69,"line":641},[67,87759,631],{"emptyLinePlaceholder":630},[67,87761,87762],{"class":69,"line":655},[67,87763,631],{"emptyLinePlaceholder":630},[67,87765,87766],{"class":69,"line":660},[67,87767,631],{"emptyLinePlaceholder":630},[67,87769,87770],{"class":69,"line":665},[67,87771,87772],{"class":73},"let div = document.createElement(\"div\");\n",[67,87774,87775],{"class":69,"line":677},[67,87776,87777],{"class":73},"let p = document.createElement(\"p\");\n",[67,87779,87780],{"class":69,"line":683},[67,87781,87782],{"class":73},"div.append(p);\n",[67,87784,87785],{"class":69,"line":689},[67,87786,631],{"emptyLinePlaceholder":630},[67,87788,87789,87792,87794],{"class":69,"line":694},[67,87790,87791],{"class":73},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[67,87793,19],{"class":262},[67,87795,87796],{"class":73},"> ]\n",[26,87798,87799],{"start":191},[29,87800,87801],{},"remove()",[19,87803,87804],{},"自己删自己",[19,87806,87807],{},[3317,87808],{"alt":63,"src":87809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[58,87811,87813],{"className":52401,"code":87812,"language":52403,"meta":63,"style":63},"\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",[32,87814,87815,87825,87839,87843,87851,87865,87885,87897,87905,87912,87924,87937,87972,87984,87995,88007,88019,88031,88058,88068,88072,88076,88085,88097,88111,88121,88133,88137,88141,88151,88162,88172,88182,88195,88208,88218,88222,88226,88235,88245,88257,88261,88265,88274,88284,88294,88306,88310,88314,88324,88340,88351,88361,88371,88383,88395,88407,88411,88415,88428,88439,88443,88451,88459,88463,88471,88491,88511,88519,88524,88550,88555,88560,88579,88584,88596,88601,88612,88622,88632,88637,88642,88646,88651,88656,88661,88681,88686,88706,88711,88725,88730,88735,88740,88756,88760,88765,88794,88799,88804,88809,88820,88824,88828,88832,88837,88862,88867,88892,88897,88906,88910,88915,88940,88944,88969,88973,88982,88986,88991,89009,89019,89023,89031,89039,89043],{"__ignoreMap":63},[67,87816,87817,87819,87821,87823],{"class":69,"line":70},[67,87818,53065],{"class":73},[67,87820,53068],{"class":262},[67,87822,53071],{"class":110},[67,87824,323],{"class":73},[67,87826,87827,87829,87831,87833,87835,87837],{"class":69,"line":191},[67,87828,259],{"class":73},[67,87830,52403],{"class":262},[67,87832,53082],{"class":110},[67,87834,85],{"class":73},[67,87836,53087],{"class":114},[67,87838,323],{"class":73},[67,87840,87841],{"class":69,"line":202},[67,87842,631],{"emptyLinePlaceholder":630},[67,87844,87845,87847,87849],{"class":69,"line":641},[67,87846,259],{"class":73},[67,87848,53100],{"class":262},[67,87850,323],{"class":73},[67,87852,87853,87855,87857,87859,87861,87863],{"class":69,"line":655},[67,87854,328],{"class":73},[67,87856,53110],{"class":262},[67,87858,53113],{"class":110},[67,87860,85],{"class":73},[67,87862,53118],{"class":114},[67,87864,323],{"class":73},[67,87866,87867,87869,87871,87873,87875,87877,87879,87881,87883],{"class":69,"line":660},[67,87868,328],{"class":73},[67,87870,53110],{"class":262},[67,87872,266],{"class":110},[67,87874,85],{"class":73},[67,87876,53157],{"class":114},[67,87878,53137],{"class":110},[67,87880,85],{"class":73},[67,87882,53164],{"class":114},[67,87884,323],{"class":73},[67,87886,87887,87889,87891,87893,87895],{"class":69,"line":665},[67,87888,328],{"class":73},[67,87890,53173],{"class":262},[67,87892,53176],{"class":73},[67,87894,53173],{"class":262},[67,87896,323],{"class":73},[67,87898,87899,87901,87903],{"class":69,"line":677},[67,87900,328],{"class":73},[67,87902,1903],{"class":262},[67,87904,323],{"class":73},[67,87906,87907,87910],{"class":69,"line":683},[67,87908,87909],{"class":110},"    .modal",[67,87911,17369],{"class":73},[67,87913,87914,87916,87918,87920,87922],{"class":69,"line":689},[67,87915,56532],{"class":77},[67,87917,53203],{"class":73},[67,87919,5793],{"class":77},[67,87921,53258],{"class":84},[67,87923,3148],{"class":73},[67,87925,87926,87929,87931,87933,87935],{"class":69,"line":694},[67,87927,87928],{"class":77},"      min-height",[67,87930,53203],{"class":73},[67,87932,2302],{"class":77},[67,87934,53258],{"class":84},[67,87936,3148],{"class":73},[67,87938,87939,87941,87943,87945,87947,87949,87951,87953,87955,87957,87959,87961,87963,87965,87967,87970],{"class":69,"line":700},[67,87940,80510],{"class":77},[67,87942,53203],{"class":73},[67,87944,78],{"class":77},[67,87946,5913],{"class":77},[67,87948,3871],{"class":77},[67,87950,53258],{"class":84},[67,87952,80527],{"class":77},[67,87954,854],{"class":73},[67,87956,78],{"class":77},[67,87958,1868],{"class":73},[67,87960,78],{"class":77},[67,87962,1868],{"class":73},[67,87964,78],{"class":77},[67,87966,1868],{"class":73},[67,87968,87969],{"class":77},"0.1",[67,87971,4544],{"class":73},[67,87973,87974,87976,87978,87980,87982],{"class":69,"line":706},[67,87975,56895],{"class":77},[67,87977,53203],{"class":73},[67,87979,1047],{"class":77},[67,87981,53258],{"class":84},[67,87983,3148],{"class":73},[67,87985,87986,87988,87990,87993],{"class":69,"line":712},[67,87987,56520],{"class":77},[67,87989,53203],{"class":73},[67,87991,87992],{"class":77},"fixed",[67,87994,3148],{"class":73},[67,87996,87997,88000,88002,88005],{"class":69,"line":717},[67,87998,87999],{"class":77},"      z-index",[67,88001,53203],{"class":73},[67,88003,88004],{"class":77},"999",[67,88006,3148],{"class":73},[67,88008,88009,88011,88013,88015,88017],{"class":69,"line":723},[67,88010,56599],{"class":77},[67,88012,53203],{"class":73},[67,88014,2645],{"class":77},[67,88016,2319],{"class":84},[67,88018,3148],{"class":73},[67,88020,88021,88023,88025,88027,88029],{"class":69,"line":729},[67,88022,56708],{"class":77},[67,88024,53203],{"class":73},[67,88026,2645],{"class":77},[67,88028,2319],{"class":84},[67,88030,3148],{"class":73},[67,88032,88033,88035,88037,88039,88041,88044,88046,88048,88050,88052,88054,88056],{"class":69,"line":735},[67,88034,80551],{"class":77},[67,88036,53203],{"class":73},[67,88038,80556],{"class":77},[67,88040,854],{"class":73},[67,88042,88043],{"class":77},"-50",[67,88045,2319],{"class":84},[67,88047,1868],{"class":73},[67,88049,88043],{"class":77},[67,88051,2319],{"class":84},[67,88053,1868],{"class":73},[67,88055,78],{"class":77},[67,88057,4544],{"class":73},[67,88059,88060,88062,88064,88066],{"class":69,"line":741},[67,88061,56645],{"class":77},[67,88063,53203],{"class":73},[67,88065,62603],{"class":77},[67,88067,3148],{"class":73},[67,88069,88070],{"class":69,"line":747},[67,88071,4020],{"class":73},[67,88073,88074],{"class":69,"line":753},[67,88075,631],{"emptyLinePlaceholder":630},[67,88077,88078,88080,88083],{"class":69,"line":758},[67,88079,87909],{"class":110},[67,88081,88082],{"class":110}," .header",[67,88084,17369],{"class":73},[67,88086,88087,88089,88091,88093,88095],{"class":69,"line":764},[67,88088,59120],{"class":77},[67,88090,53203],{"class":73},[67,88092,2392],{"class":77},[67,88094,53258],{"class":84},[67,88096,3148],{"class":73},[67,88098,88099,88101,88103,88105,88107,88109],{"class":69,"line":770},[67,88100,56456],{"class":77},[67,88102,53203],{"class":73},[67,88104,78],{"class":77},[67,88106,3871],{"class":77},[67,88108,53258],{"class":84},[67,88110,3148],{"class":73},[67,88112,88113,88115,88117,88119],{"class":69,"line":776},[67,88114,56520],{"class":77},[67,88116,53203],{"class":73},[67,88118,56525],{"class":77},[67,88120,3148],{"class":73},[67,88122,88123,88125,88127,88129,88131],{"class":69,"line":782},[67,88124,56683],{"class":77},[67,88126,53203],{"class":73},[67,88128,2689],{"class":77},[67,88130,53258],{"class":84},[67,88132,3148],{"class":73},[67,88134,88135],{"class":69,"line":788},[67,88136,4020],{"class":73},[67,88138,88139],{"class":69,"line":793},[67,88140,631],{"emptyLinePlaceholder":630},[67,88142,88143,88145,88147,88149],{"class":69,"line":798},[67,88144,87909],{"class":110},[67,88146,88082],{"class":110},[67,88148,4856],{"class":262},[67,88150,17369],{"class":73},[67,88152,88153,88156,88158,88160],{"class":69,"line":816},[67,88154,88155],{"class":77},"      font-style",[67,88157,53203],{"class":73},[67,88159,65601],{"class":77},[67,88161,3148],{"class":73},[67,88163,88164,88166,88168,88170],{"class":69,"line":832},[67,88165,59177],{"class":77},[67,88167,53203],{"class":73},[67,88169,63830],{"class":77},[67,88171,3148],{"class":73},[67,88173,88174,88176,88178,88180],{"class":69,"line":843},[67,88175,56520],{"class":77},[67,88177,53203],{"class":73},[67,88179,56592],{"class":77},[67,88181,3148],{"class":73},[67,88183,88184,88187,88189,88191,88193],{"class":69,"line":848},[67,88185,88186],{"class":77},"      right",[67,88188,53203],{"class":73},[67,88190,2564],{"class":77},[67,88192,53258],{"class":84},[67,88194,3148],{"class":73},[67,88196,88197,88199,88201,88204,88206],{"class":69,"line":863},[67,88198,56708],{"class":77},[67,88200,53203],{"class":73},[67,88202,88203],{"class":77},"-2",[67,88205,53258],{"class":84},[67,88207,3148],{"class":73},[67,88209,88210,88212,88214,88216],{"class":69,"line":876},[67,88211,63785],{"class":77},[67,88213,53203],{"class":73},[67,88215,63790],{"class":77},[67,88217,3148],{"class":73},[67,88219,88220],{"class":69,"line":889},[67,88221,4020],{"class":73},[67,88223,88224],{"class":69,"line":894},[67,88225,631],{"emptyLinePlaceholder":630},[67,88227,88228,88230,88233],{"class":69,"line":911},[67,88229,87909],{"class":110},[67,88231,88232],{"class":110}," .body",[67,88234,17369],{"class":73},[67,88236,88237,88239,88241,88243],{"class":69,"line":927},[67,88238,59047],{"class":77},[67,88240,53203],{"class":73},[67,88242,53358],{"class":77},[67,88244,3148],{"class":73},[67,88246,88247,88249,88251,88253,88255],{"class":69,"line":932},[67,88248,56456],{"class":77},[67,88250,53203],{"class":73},[67,88252,2437],{"class":77},[67,88254,53258],{"class":84},[67,88256,3148],{"class":73},[67,88258,88259],{"class":69,"line":955},[67,88260,4020],{"class":73},[67,88262,88263],{"class":69,"line":971},[67,88264,631],{"emptyLinePlaceholder":630},[67,88266,88267,88269,88272],{"class":69,"line":1010},[67,88268,87909],{"class":110},[67,88270,88271],{"class":110}," .footer",[67,88273,17369],{"class":73},[67,88275,88276,88278,88280,88282],{"class":69,"line":1016},[67,88277,56770],{"class":77},[67,88279,53203],{"class":73},[67,88281,53243],{"class":77},[67,88283,3148],{"class":73},[67,88285,88286,88288,88290,88292],{"class":69,"line":1021},[67,88287,56781],{"class":77},[67,88289,53203],{"class":73},[67,88291,53346],{"class":77},[67,88293,3148],{"class":73},[67,88295,88296,88298,88300,88302,88304],{"class":69,"line":1034},[67,88297,56456],{"class":77},[67,88299,53203],{"class":73},[67,88301,2437],{"class":77},[67,88303,53258],{"class":84},[67,88305,3148],{"class":73},[67,88307,88308],{"class":69,"line":1053},[67,88309,4020],{"class":73},[67,88311,88312],{"class":69,"line":1070},[67,88313,631],{"emptyLinePlaceholder":630},[67,88315,88316,88318,88320,88322],{"class":69,"line":1083},[67,88317,87909],{"class":110},[67,88319,88271],{"class":110},[67,88321,3253],{"class":262},[67,88323,17369],{"class":73},[67,88325,88326,88328,88330,88332,88334,88336,88338],{"class":69,"line":1088},[67,88327,56456],{"class":77},[67,88329,53203],{"class":73},[67,88331,2071],{"class":77},[67,88333,53258],{"class":84},[67,88335,3916],{"class":77},[67,88337,53258],{"class":84},[67,88339,3148],{"class":73},[67,88341,88342,88344,88346,88349],{"class":69,"line":1093},[67,88343,63482],{"class":77},[67,88345,53203],{"class":73},[67,88347,88348],{"class":77},"#ccc",[67,88350,3148],{"class":73},[67,88352,88353,88355,88357,88359],{"class":69,"line":1110},[67,88354,65730],{"class":77},[67,88356,53203],{"class":73},[67,88358,56498],{"class":77},[67,88360,3148],{"class":73},[67,88362,88363,88365,88367,88369],{"class":69,"line":11603},[67,88364,59177],{"class":77},[67,88366,53203],{"class":73},[67,88368,62603],{"class":77},[67,88370,3148],{"class":73},[67,88372,88373,88375,88377,88379,88381],{"class":69,"line":11612},[67,88374,56895],{"class":77},[67,88376,53203],{"class":73},[67,88378,2077],{"class":77},[67,88380,53258],{"class":84},[67,88382,3148],{"class":73},[67,88384,88385,88387,88389,88391,88393],{"class":69,"line":11617},[67,88386,63511],{"class":77},[67,88388,53203],{"class":73},[67,88390,2437],{"class":77},[67,88392,53258],{"class":84},[67,88394,3148],{"class":73},[67,88396,88397,88399,88401,88403,88405],{"class":69,"line":11623},[67,88398,56683],{"class":77},[67,88400,53203],{"class":73},[67,88402,2538],{"class":77},[67,88404,53258],{"class":84},[67,88406,3148],{"class":73},[67,88408,88409],{"class":69,"line":11644},[67,88410,4020],{"class":73},[67,88412,88413],{"class":69,"line":11650},[67,88414,631],{"emptyLinePlaceholder":630},[67,88416,88417,88419,88421,88423,88426],{"class":69,"line":11664},[67,88418,87909],{"class":110},[67,88420,88271],{"class":110},[67,88422,3253],{"class":262},[67,88424,88425],{"class":110},".submit",[67,88427,17369],{"class":73},[67,88429,88430,88432,88434,88437],{"class":69,"line":11670},[67,88431,56645],{"class":77},[67,88433,53203],{"class":73},[67,88435,88436],{"class":77},"#369",[67,88438,3148],{"class":73},[67,88440,88441],{"class":69,"line":11697},[67,88442,4020],{"class":73},[67,88444,88445,88447,88449],{"class":69,"line":11706},[67,88446,54181],{"class":73},[67,88448,1903],{"class":262},[67,88450,323],{"class":73},[67,88452,88453,88455,88457],{"class":69,"line":11712},[67,88454,376],{"class":73},[67,88456,53100],{"class":262},[67,88458,323],{"class":73},[67,88460,88461],{"class":69,"line":11720},[67,88462,631],{"emptyLinePlaceholder":630},[67,88464,88465,88467,88469],{"class":69,"line":11725},[67,88466,259],{"class":73},[67,88468,53565],{"class":262},[67,88470,323],{"class":73},[67,88472,88473,88475,88477,88479,88481,88484,88487,88489],{"class":69,"line":18401},[67,88474,328],{"class":73},[67,88476,55648],{"class":262},[67,88478,16756],{"class":110},[67,88480,85],{"class":73},[67,88482,88483],{"class":114},"\"delete\"",[67,88485,88486],{"class":73},">删除\u003C\u002F",[67,88488,55648],{"class":262},[67,88490,323],{"class":73},[67,88492,88493,88495,88497,88499,88501,88504,88507,88509],{"class":69,"line":18407},[67,88494,328],{"class":73},[67,88496,55648],{"class":262},[67,88498,16756],{"class":110},[67,88500,85],{"class":73},[67,88502,88503],{"class":114},"\"login\"",[67,88505,88506],{"class":73},">登录\u003C\u002F",[67,88508,55648],{"class":262},[67,88510,323],{"class":73},[67,88512,88513,88515,88517],{"class":69,"line":18430},[67,88514,328],{"class":73},[67,88516,53578],{"class":262},[67,88518,323],{"class":73},[67,88520,88521],{"class":69,"line":18436},[67,88522,88523],{"class":2058},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[67,88525,88526,88528,88531,88533,88535,88537,88539,88541,88544,88546,88548],{"class":69,"line":18459},[67,88527,71844],{"class":84},[67,88529,88530],{"class":110}," Modal",[67,88532,854],{"class":73},[67,88534,53173],{"class":7033},[67,88536,671],{"class":84},[67,88538,71690],{"class":114},[67,88540,1868],{"class":73},[67,88542,88543],{"class":7033},"message",[67,88545,671],{"class":84},[67,88547,71690],{"class":114},[67,88549,14241],{"class":73},[67,88551,88552],{"class":69,"line":18473},[67,88553,88554],{"class":2058},"      \u002F\u002F 创建Model 模态框盒子\n",[67,88556,88557],{"class":69,"line":18493},[67,88558,88559],{"class":2058},"      \u002F\u002F 1.1 创建div标签\n",[67,88561,88562,88564,88567,88569,88571,88573,88575,88577],{"class":69,"line":18499},[67,88563,71811],{"class":77},[67,88565,88566],{"class":73},".modalBox ",[67,88568,85],{"class":84},[67,88570,56157],{"class":73},[67,88572,71911],{"class":110},[67,88574,854],{"class":73},[67,88576,83691],{"class":114},[67,88578,829],{"class":73},[67,88580,88581],{"class":69,"line":18510},[67,88582,88583],{"class":2058},"      \u002F\u002F 1.2 给div 添加类名为model\n",[67,88585,88586,88588,88591,88593],{"class":69,"line":18533},[67,88587,71811],{"class":77},[67,88589,88590],{"class":73},".modalBox.className ",[67,88592,85],{"class":84},[67,88594,88595],{"class":114}," 'modal'\n",[67,88597,88598],{"class":69,"line":18555},[67,88599,88600],{"class":2058},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[67,88602,88603,88605,88608,88610],{"class":69,"line":18560},[67,88604,71811],{"class":77},[67,88606,88607],{"class":73},".modalBox.innerHTML ",[67,88609,85],{"class":84},[67,88611,71928],{"class":114},[67,88613,88614,88617,88619],{"class":69,"line":18566},[67,88615,88616],{"class":114},"        \u003Cdiv class=\"header\">${",[67,88618,53173],{"class":73},[67,88620,88621],{"class":114},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[67,88623,88624,88627,88629],{"class":69,"line":18580},[67,88625,88626],{"class":114},"        \u003Cdiv class=\"body\">${",[67,88628,88543],{"class":73},[67,88630,88631],{"class":114},"}\u003C\u002Fdiv>\n",[67,88633,88634],{"class":69,"line":18593},[67,88635,88636],{"class":114},"      `\n",[67,88638,88639],{"class":69,"line":18598},[67,88640,88641],{"class":2058},"      \u002F\u002F console.log(this.modalBox)\n",[67,88643,88644],{"class":69,"line":18612},[67,88645,4020],{"class":73},[67,88647,88648],{"class":69,"line":18617},[67,88649,88650],{"class":2058},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[67,88652,88653],{"class":69,"line":18623},[67,88654,88655],{"class":2058},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[67,88657,88658],{"class":69,"line":18628},[67,88659,88660],{"class":2058},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[67,88662,88663,88666,88668,88670,88672,88675,88677,88679],{"class":69,"line":18642},[67,88664,88665],{"class":77},"    Modal",[67,88667,2547],{"class":73},[67,88669,87338],{"class":77},[67,88671,2547],{"class":73},[67,88673,88674],{"class":110},"open",[67,88676,671],{"class":84},[67,88678,60679],{"class":84},[67,88680,56213],{"class":73},[67,88682,88683],{"class":69,"line":18647},[67,88684,88685],{"class":2058},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[67,88687,88688,88690,88693,88695,88697,88699,88701,88704],{"class":69,"line":18652},[67,88689,59989],{"class":84},[67,88691,88692],{"class":77}," box",[67,88694,671],{"class":84},[67,88696,56157],{"class":73},[67,88698,56160],{"class":110},[67,88700,854],{"class":73},[67,88702,88703],{"class":114},"'.modal'",[67,88705,829],{"class":73},[67,88707,88708],{"class":69,"line":18666},[67,88709,88710],{"class":2058},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[67,88712,88713,88716,88718,88721,88723],{"class":69,"line":18678},[67,88714,88715],{"class":73},"      box ",[67,88717,3558],{"class":84},[67,88719,88720],{"class":73}," box.",[67,88722,58767],{"class":110},[67,88724,3809],{"class":73},[67,88726,88727],{"class":69,"line":18683},[67,88728,88729],{"class":2058},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[67,88731,88732],{"class":69,"line":18696},[67,88733,88734],{"class":2058},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[67,88736,88737],{"class":69,"line":18701},[67,88738,88739],{"class":2058},"      \u002F\u002F append可以增加对象\n",[67,88741,88742,88745,88748,88750,88753],{"class":69,"line":18706},[67,88743,88744],{"class":73},"      document.body.",[67,88746,88747],{"class":110},"append",[67,88749,854],{"class":73},[67,88751,88752],{"class":77},"this",[67,88754,88755],{"class":73},".modalBox)\n",[67,88757,88758],{"class":69,"line":18711},[67,88759,631],{"emptyLinePlaceholder":630},[67,88761,88762],{"class":69,"line":18724},[67,88763,88764],{"class":2058},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[67,88766,88767,88769,88772,88774,88776,88779,88781,88783,88785,88787,88790,88792],{"class":69,"line":18729},[67,88768,71811],{"class":77},[67,88770,88771],{"class":73},".modalBox.",[67,88773,56160],{"class":110},[67,88775,854],{"class":73},[67,88777,88778],{"class":114},"'i'",[67,88780,32603],{"class":73},[67,88782,59574],{"class":110},[67,88784,854],{"class":73},[67,88786,59579],{"class":114},[67,88788,88789],{"class":73},", () ",[67,88791,86481],{"class":84},[67,88793,17369],{"class":73},[67,88795,88796],{"class":69,"line":34402},[67,88797,88798],{"class":2058},"        \u002F\u002F 这个地方需要用到箭头函数\n",[67,88800,88801],{"class":69,"line":34408},[67,88802,88803],{"class":2058},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[67,88805,88806],{"class":69,"line":34414},[67,88807,88808],{"class":2058},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[67,88810,88811,88813,88815,88818],{"class":69,"line":34420},[67,88812,66486],{"class":77},[67,88814,2547],{"class":73},[67,88816,88817],{"class":110},"close",[67,88819,3809],{"class":73},[67,88821,88822],{"class":69,"line":34426},[67,88823,66575],{"class":73},[67,88825,88826],{"class":69,"line":34437},[67,88827,4020],{"class":73},[67,88829,88830],{"class":69,"line":34443},[67,88831,631],{"emptyLinePlaceholder":630},[67,88833,88834],{"class":69,"line":34463},[67,88835,88836],{"class":2058},"    \u002F\u002F 测试一下 点击 删除按钮\n",[67,88838,88839,88841,88843,88845,88848,88850,88852,88854,88856,88858,88860],{"class":69,"line":34469},[67,88840,54171],{"class":73},[67,88842,56160],{"class":110},[67,88844,854],{"class":73},[67,88846,88847],{"class":114},"'#delete'",[67,88849,32603],{"class":73},[67,88851,59574],{"class":110},[67,88853,854],{"class":73},[67,88855,59579],{"class":114},[67,88857,88789],{"class":73},[67,88859,86481],{"class":84},[67,88861,17369],{"class":73},[67,88863,88864],{"class":69,"line":34480},[67,88865,88866],{"class":2058},"      \u002F\u002F 先调用Model构造函数\n",[67,88868,88869,88871,88874,88876,88878,88880,88882,88885,88887,88890],{"class":69,"line":34486},[67,88870,59989],{"class":84},[67,88872,88873],{"class":77}," del",[67,88875,671],{"class":84},[67,88877,13378],{"class":84},[67,88879,88530],{"class":110},[67,88881,854],{"class":73},[67,88883,88884],{"class":114},"'温馨的提示'",[67,88886,1868],{"class":73},[67,88888,88889],{"class":114},"'您没有删除权限操作'",[67,88891,829],{"class":73},[67,88893,88894],{"class":69,"line":34492},[67,88895,88896],{"class":2058},"      \u002F\u002F 实例对象调用open方法\n",[67,88898,88899,88902,88904],{"class":69,"line":34498},[67,88900,88901],{"class":73},"      del.",[67,88903,88674],{"class":110},[67,88905,3809],{"class":73},[67,88907,88908],{"class":69,"line":34504},[67,88909,35230],{"class":73},[67,88911,88912],{"class":69,"line":34510},[67,88913,88914],{"class":2058},"    \u002F\u002F 测试一下 点击 登录按钮\n",[67,88916,88917,88919,88921,88923,88926,88928,88930,88932,88934,88936,88938],{"class":69,"line":34516},[67,88918,54171],{"class":73},[67,88920,56160],{"class":110},[67,88922,854],{"class":73},[67,88924,88925],{"class":114},"'#login'",[67,88927,32603],{"class":73},[67,88929,59574],{"class":110},[67,88931,854],{"class":73},[67,88933,59579],{"class":114},[67,88935,88789],{"class":73},[67,88937,86481],{"class":84},[67,88939,17369],{"class":73},[67,88941,88942],{"class":69,"line":34522},[67,88943,88866],{"class":2058},[67,88945,88946,88948,88951,88953,88955,88957,88959,88962,88964,88967],{"class":69,"line":34542},[67,88947,59989],{"class":84},[67,88949,88950],{"class":77}," log",[67,88952,671],{"class":84},[67,88954,13378],{"class":84},[67,88956,88530],{"class":110},[67,88958,854],{"class":73},[67,88960,88961],{"class":114},"'友情提示'",[67,88963,1868],{"class":73},[67,88965,88966],{"class":114},"'您还没有登录呢'",[67,88968,829],{"class":73},[67,88970,88971],{"class":69,"line":34548},[67,88972,88896],{"class":2058},[67,88974,88975,88978,88980],{"class":69,"line":34564},[67,88976,88977],{"class":73},"      log.",[67,88979,88674],{"class":110},[67,88981,3809],{"class":73},[67,88983,88984],{"class":69,"line":34570},[67,88985,35230],{"class":73},[67,88987,88988],{"class":69,"line":34584},[67,88989,88990],{"class":2058},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[67,88992,88993,88995,88997,88999,89001,89003,89005,89007],{"class":69,"line":34590},[67,88994,88665],{"class":77},[67,88996,2547],{"class":73},[67,88998,87338],{"class":77},[67,89000,2547],{"class":73},[67,89002,88817],{"class":110},[67,89004,671],{"class":84},[67,89006,60679],{"class":84},[67,89008,56213],{"class":73},[67,89010,89011,89013,89015,89017],{"class":69,"line":34605},[67,89012,71811],{"class":77},[67,89014,88771],{"class":73},[67,89016,58767],{"class":110},[67,89018,3809],{"class":73},[67,89020,89021],{"class":69,"line":34611},[67,89022,4020],{"class":73},[67,89024,89025,89027,89029],{"class":69,"line":34620},[67,89026,54181],{"class":73},[67,89028,53578],{"class":262},[67,89030,323],{"class":73},[67,89032,89033,89035,89037],{"class":69,"line":34626},[67,89034,376],{"class":73},[67,89036,53565],{"class":262},[67,89038,323],{"class":73},[67,89040,89041],{"class":69,"line":34635},[67,89042,631],{"emptyLinePlaceholder":630},[67,89044,89045,89047,89049],{"class":69,"line":34641},[67,89046,376],{"class":73},[67,89048,52403],{"class":262},[67,89050,323],{"class":73},[19,89052,89053],{},[3317,89054],{"alt":63,"src":89055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89057,89059],{"id":89058},"_414-深浅拷贝","4.14 深浅拷贝",[391,89061,89063],{"id":89062},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89065,89066],{},[3317,89067],{"alt":63,"src":89068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89070,89071],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89073,89074],{},[3317,89075],{"alt":63,"src":89076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89078,89079],{},[3317,89080],{"alt":63,"src":89081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89083,89084],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89086,89087],{},[3317,89088],{"alt":63,"src":89089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89091,13132],{},[19,89093,89094],{},[3317,89095],{"alt":63,"src":89096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[391,89098,89100],{"id":89099},"_4142-深拷贝","4.14.2 深拷贝",[19,89102,89103],{},"深拷贝：拷贝的是对象，不是地址",[19,89105,89106],{},"常用的三种方法：",[26,89108,89109,89112,89115],{},[29,89110,89111],{},"通过递归实现深拷贝",[29,89113,89114],{},"lodash\u002FcloneDeep",[29,89116,89117],{},"通过JSON.stringify()实现",[23794,89119,89121],{"id":89120},"_41421-递归函数","4.14.2.1 递归函数",[19,89123,89124],{},[3317,89125],{"alt":63,"src":89126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[26,89128,89129],{},[29,89130,89131],{},"死递归占溢出：",[58,89133,89135],{"className":250,"code":89134,"language":252,"meta":63,"style":63},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,89136,89137,89145,89153,89157,89162,89166,89171,89179],{"__ignoreMap":63},[67,89138,89139,89141,89143],{"class":69,"line":70},[67,89140,259],{"class":73},[67,89142,53565],{"class":262},[67,89144,323],{"class":73},[67,89146,89147,89149,89151],{"class":69,"line":191},[67,89148,328],{"class":73},[67,89150,53578],{"class":262},[67,89152,323],{"class":73},[67,89154,89155],{"class":69,"line":202},[67,89156,78903],{"class":73},[67,89158,89159],{"class":69,"line":641},[67,89160,89161],{"class":73},"      fn()\n",[67,89163,89164],{"class":69,"line":655},[67,89165,4020],{"class":73},[67,89167,89168],{"class":69,"line":660},[67,89169,89170],{"class":73},"    fn()\n",[67,89172,89173,89175,89177],{"class":69,"line":665},[67,89174,54181],{"class":73},[67,89176,53578],{"class":262},[67,89178,323],{"class":73},[67,89180,89181,89183,89185],{"class":69,"line":677},[67,89182,376],{"class":73},[67,89184,53565],{"class":262},[67,89186,323],{"class":73},[26,89188,89189],{"start":191},[29,89190,89191],{},"递归函数要加判断条件：",[19,89193,89194],{},[3317,89195],{"alt":63,"src":89196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[26,89198,89199],{"start":202},[29,89200,89201],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[58,89203,89205],{"className":52401,"code":89204,"language":52403,"meta":63,"style":63},"\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",[32,89206,89207,89217,89231,89235,89243,89257,89277,89289,89297,89301,89309,89321,89329,89337,89362,89374,89378,89385,89393,89401,89405],{"__ignoreMap":63},[67,89208,89209,89211,89213,89215],{"class":69,"line":70},[67,89210,53065],{"class":73},[67,89212,53068],{"class":262},[67,89214,53071],{"class":110},[67,89216,323],{"class":73},[67,89218,89219,89221,89223,89225,89227,89229],{"class":69,"line":191},[67,89220,259],{"class":73},[67,89222,52403],{"class":262},[67,89224,53082],{"class":110},[67,89226,85],{"class":73},[67,89228,53087],{"class":114},[67,89230,323],{"class":73},[67,89232,89233],{"class":69,"line":202},[67,89234,631],{"emptyLinePlaceholder":630},[67,89236,89237,89239,89241],{"class":69,"line":641},[67,89238,259],{"class":73},[67,89240,53100],{"class":262},[67,89242,323],{"class":73},[67,89244,89245,89247,89249,89251,89253,89255],{"class":69,"line":655},[67,89246,328],{"class":73},[67,89248,53110],{"class":262},[67,89250,53113],{"class":110},[67,89252,85],{"class":73},[67,89254,53118],{"class":114},[67,89256,323],{"class":73},[67,89258,89259,89261,89263,89265,89267,89269,89271,89273,89275],{"class":69,"line":660},[67,89260,328],{"class":73},[67,89262,53110],{"class":262},[67,89264,266],{"class":110},[67,89266,85],{"class":73},[67,89268,53157],{"class":114},[67,89270,53137],{"class":110},[67,89272,85],{"class":73},[67,89274,53164],{"class":114},[67,89276,323],{"class":73},[67,89278,89279,89281,89283,89285,89287],{"class":69,"line":665},[67,89280,328],{"class":73},[67,89282,53173],{"class":262},[67,89284,53176],{"class":73},[67,89286,53173],{"class":262},[67,89288,323],{"class":73},[67,89290,89291,89293,89295],{"class":69,"line":677},[67,89292,376],{"class":73},[67,89294,53100],{"class":262},[67,89296,323],{"class":73},[67,89298,89299],{"class":69,"line":683},[67,89300,631],{"emptyLinePlaceholder":630},[67,89302,89303,89305,89307],{"class":69,"line":689},[67,89304,259],{"class":73},[67,89306,53565],{"class":262},[67,89308,323],{"class":73},[67,89310,89311,89313,89315,89317,89319],{"class":69,"line":694},[67,89312,328],{"class":73},[67,89314,53377],{"class":262},[67,89316,57075],{"class":73},[67,89318,53377],{"class":262},[67,89320,323],{"class":73},[67,89322,89323,89325,89327],{"class":69,"line":700},[67,89324,328],{"class":73},[67,89326,53578],{"class":262},[67,89328,323],{"class":73},[67,89330,89331,89333,89335],{"class":69,"line":706},[67,89332,71844],{"class":84},[67,89334,75533],{"class":110},[67,89336,12653],{"class":73},[67,89338,89339,89341,89343,89345,89347,89349,89351,89353,89355,89357,89360],{"class":69,"line":712},[67,89340,57532],{"class":73},[67,89342,56160],{"class":110},[67,89344,854],{"class":73},[67,89346,83691],{"class":114},[67,89348,76009],{"class":73},[67,89350,85],{"class":84},[67,89352,13378],{"class":84},[67,89354,75549],{"class":110},[67,89356,19058],{"class":73},[67,89358,89359],{"class":110},"toLocaleString",[67,89361,3809],{"class":73},[67,89363,89364,89367,89370,89372],{"class":69,"line":717},[67,89365,89366],{"class":110},"      setTimeout",[67,89368,89369],{"class":73},"(getTime, ",[67,89371,8227],{"class":77},[67,89373,829],{"class":73},[67,89375,89376],{"class":69,"line":723},[67,89377,4020],{"class":73},[67,89379,89380,89383],{"class":69,"line":729},[67,89381,89382],{"class":110},"    getTime",[67,89384,3809],{"class":73},[67,89386,89387,89389,89391],{"class":69,"line":735},[67,89388,54181],{"class":73},[67,89390,53578],{"class":262},[67,89392,323],{"class":73},[67,89394,89395,89397,89399],{"class":69,"line":741},[67,89396,376],{"class":73},[67,89398,53565],{"class":262},[67,89400,323],{"class":73},[67,89402,89403],{"class":69,"line":747},[67,89404,631],{"emptyLinePlaceholder":630},[67,89406,89407,89409,89411],{"class":69,"line":753},[67,89408,376],{"class":73},[67,89410,52403],{"class":262},[67,89412,323],{"class":73},[19,89414,89415],{},[3317,89416],{"alt":63,"src":89417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[26,89419,89420],{"start":641},[29,89421,89111],{},[19,89423,89424],{},[3317,89425],{"alt":63,"src":89426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89428,89429],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89431,40957],{},[19,89433,89434],{},"这个是简易版的递归函数深拷贝",[19,89436,89437],{},"一定要注意先数组再对象，因为万物皆可对象",[58,89439,89441],{"className":52401,"code":89440,"language":52403,"meta":63,"style":63},"\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",[32,89442,89443,89453,89467,89471,89479,89493,89513,89525,89533,89537,89545,89553,89563,89572,89580,89596,89600,89608,89612,89616,89628,89633,89652,89668,89673,89678,89683,89698,89703,89708,89717,89725,89742,89750,89756,89764,89769,89774,89783,89787,89791,89795,89806,89815,89825,89839,89849,89857,89865,89873,89877],{"__ignoreMap":63},[67,89444,89445,89447,89449,89451],{"class":69,"line":70},[67,89446,53065],{"class":73},[67,89448,53068],{"class":262},[67,89450,53071],{"class":110},[67,89452,323],{"class":73},[67,89454,89455,89457,89459,89461,89463,89465],{"class":69,"line":191},[67,89456,259],{"class":73},[67,89458,52403],{"class":262},[67,89460,53082],{"class":110},[67,89462,85],{"class":73},[67,89464,53087],{"class":114},[67,89466,323],{"class":73},[67,89468,89469],{"class":69,"line":202},[67,89470,631],{"emptyLinePlaceholder":630},[67,89472,89473,89475,89477],{"class":69,"line":641},[67,89474,259],{"class":73},[67,89476,53100],{"class":262},[67,89478,323],{"class":73},[67,89480,89481,89483,89485,89487,89489,89491],{"class":69,"line":655},[67,89482,328],{"class":73},[67,89484,53110],{"class":262},[67,89486,53113],{"class":110},[67,89488,85],{"class":73},[67,89490,53118],{"class":114},[67,89492,323],{"class":73},[67,89494,89495,89497,89499,89501,89503,89505,89507,89509,89511],{"class":69,"line":660},[67,89496,328],{"class":73},[67,89498,53110],{"class":262},[67,89500,266],{"class":110},[67,89502,85],{"class":73},[67,89504,53157],{"class":114},[67,89506,53137],{"class":110},[67,89508,85],{"class":73},[67,89510,53164],{"class":114},[67,89512,323],{"class":73},[67,89514,89515,89517,89519,89521,89523],{"class":69,"line":665},[67,89516,328],{"class":73},[67,89518,53173],{"class":262},[67,89520,53176],{"class":73},[67,89522,53173],{"class":262},[67,89524,323],{"class":73},[67,89526,89527,89529,89531],{"class":69,"line":677},[67,89528,376],{"class":73},[67,89530,53100],{"class":262},[67,89532,323],{"class":73},[67,89534,89535],{"class":69,"line":683},[67,89536,631],{"emptyLinePlaceholder":630},[67,89538,89539,89541,89543],{"class":69,"line":689},[67,89540,259],{"class":73},[67,89542,53565],{"class":262},[67,89544,323],{"class":73},[67,89546,89547,89549,89551],{"class":69,"line":694},[67,89548,328],{"class":73},[67,89550,53578],{"class":262},[67,89552,323],{"class":73},[67,89554,89555,89557,89559,89561],{"class":69,"line":700},[67,89556,13021],{"class":84},[67,89558,71731],{"class":77},[67,89560,671],{"class":84},[67,89562,17369],{"class":73},[67,89564,89565,89567,89570],{"class":69,"line":706},[67,89566,73376],{"class":73},[67,89568,89569],{"class":114},"'pink'",[67,89571,33238],{"class":73},[67,89573,89574,89576,89578],{"class":69,"line":712},[67,89575,73386],{"class":73},[67,89577,2639],{"class":77},[67,89579,33238],{"class":73},[67,89581,89582,89585,89588,89590,89593],{"class":69,"line":717},[67,89583,89584],{"class":73},"      hobby: [",[67,89586,89587],{"class":114},"'乒乓球'",[67,89589,1868],{"class":73},[67,89591,89592],{"class":114},"'足球'",[67,89594,89595],{"class":73},"],\n",[67,89597,89598],{"class":69,"line":723},[67,89599,79632],{"class":73},[67,89601,89602,89605],{"class":69,"line":729},[67,89603,89604],{"class":73},"        baby: ",[67,89606,89607],{"class":114},"'小pink'\n",[67,89609,89610],{"class":69,"line":735},[67,89611,54162],{"class":73},[67,89613,89614],{"class":69,"line":741},[67,89615,4020],{"class":73},[67,89617,89618,89620,89623,89625],{"class":69,"line":747},[67,89619,13021],{"class":84},[67,89621,89622],{"class":77}," o",[67,89624,671],{"class":84},[67,89626,89627],{"class":73}," {}\n",[67,89629,89630],{"class":69,"line":753},[67,89631,89632],{"class":2058},"    \u002F\u002F 拷贝函数\n",[67,89634,89635,89637,89640,89642,89645,89647,89650],{"class":69,"line":758},[67,89636,71844],{"class":84},[67,89638,89639],{"class":110}," deepCopy",[67,89641,854],{"class":73},[67,89643,89644],{"class":7033},"newObj",[67,89646,1868],{"class":73},[67,89648,89649],{"class":7033},"oldObj",[67,89651,14241],{"class":73},[67,89653,89654,89656,89658,89660,89663,89665],{"class":69,"line":764},[67,89655,54048],{"class":84},[67,89657,3505],{"class":73},[67,89659,53612],{"class":84},[67,89661,89662],{"class":73}," k ",[67,89664,941],{"class":84},[67,89666,89667],{"class":73}," oldObj) {\n",[67,89669,89670],{"class":69,"line":770},[67,89671,89672],{"class":2058},"        \u002F\u002F 处理数组的问题\n",[67,89674,89675],{"class":69,"line":776},[67,89676,89677],{"class":2058},"        \u002F\u002F 判断是否属于数组\n",[67,89679,89680],{"class":69,"line":782},[67,89681,89682],{"class":2058},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[67,89684,89685,89687,89690,89693,89696],{"class":69,"line":788},[67,89686,4329],{"class":84},[67,89688,89689],{"class":73}," (oldObj[k] ",[67,89691,89692],{"class":84},"instanceof",[67,89694,89695],{"class":110}," Array",[67,89697,14241],{"class":73},[67,89699,89700],{"class":69,"line":793},[67,89701,89702],{"class":2058},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[67,89704,89705],{"class":69,"line":798},[67,89706,89707],{"class":2058},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[67,89709,89710,89713,89715],{"class":69,"line":816},[67,89711,89712],{"class":73},"          newObj[k] ",[67,89714,85],{"class":84},[67,89716,53603],{"class":73},[67,89718,89719,89722],{"class":69,"line":832},[67,89720,89721],{"class":110},"          deepCopy",[67,89723,89724],{"class":73},"(newObj[k], oldObj[k])\n",[67,89726,89727,89729,89731,89733,89735,89737,89740],{"class":69,"line":843},[67,89728,81840],{"class":73},[67,89730,3544],{"class":84},[67,89732,3547],{"class":84},[67,89734,89689],{"class":73},[67,89736,89692],{"class":84},[67,89738,89739],{"class":110}," Object",[67,89741,14241],{"class":73},[67,89743,89744,89746,89748],{"class":69,"line":848},[67,89745,89712],{"class":73},[67,89747,85],{"class":84},[67,89749,89627],{"class":73},[67,89751,89752,89754],{"class":69,"line":863},[67,89753,89721],{"class":110},[67,89755,89724],{"class":73},[67,89757,89758,89760,89762],{"class":69,"line":876},[67,89759,81840],{"class":73},[67,89761,3544],{"class":84},[67,89763,17369],{"class":73},[67,89765,89766],{"class":69,"line":889},[67,89767,89768],{"class":2058},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[67,89770,89771],{"class":69,"line":894},[67,89772,89773],{"class":2058},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[67,89775,89776,89778,89780],{"class":69,"line":911},[67,89777,89712],{"class":73},[67,89779,85],{"class":84},[67,89781,89782],{"class":73}," oldObj[k]\n",[67,89784,89785],{"class":69,"line":927},[67,89786,4361],{"class":73},[67,89788,89789],{"class":69,"line":932},[67,89790,54162],{"class":73},[67,89792,89793],{"class":69,"line":955},[67,89794,4020],{"class":73},[67,89796,89797,89800,89803],{"class":69,"line":971},[67,89798,89799],{"class":110},"    deepCopy",[67,89801,89802],{"class":73},"(o, obj) ",[67,89804,89805],{"class":2058},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[67,89807,89808,89810,89812],{"class":69,"line":1010},[67,89809,75513],{"class":73},[67,89811,60008],{"class":110},[67,89813,89814],{"class":73},"(o)\n",[67,89816,89817,89820,89822],{"class":69,"line":1016},[67,89818,89819],{"class":73},"    o.age ",[67,89821,85],{"class":84},[67,89823,89824],{"class":77}," 20\n",[67,89826,89827,89830,89832,89834,89836],{"class":69,"line":1021},[67,89828,89829],{"class":73},"    o.hobby[",[67,89831,78],{"class":77},[67,89833,81],{"class":73},[67,89835,85],{"class":84},[67,89837,89838],{"class":114}," '篮球'\n",[67,89840,89841,89844,89846],{"class":69,"line":1034},[67,89842,89843],{"class":73},"    o.family ",[67,89845,85],{"class":84},[67,89847,89848],{"class":114}," '老pink'\n",[67,89850,89851,89853,89855],{"class":69,"line":1053},[67,89852,75513],{"class":73},[67,89854,60008],{"class":110},[67,89856,71796],{"class":73},[67,89858,89859,89861,89863],{"class":69,"line":1070},[67,89860,54181],{"class":73},[67,89862,53578],{"class":262},[67,89864,323],{"class":73},[67,89866,89867,89869,89871],{"class":69,"line":1083},[67,89868,376],{"class":73},[67,89870,53565],{"class":262},[67,89872,323],{"class":73},[67,89874,89875],{"class":69,"line":1088},[67,89876,631],{"emptyLinePlaceholder":630},[67,89878,89879,89881,89883],{"class":69,"line":1093},[67,89880,376],{"class":73},[67,89882,52403],{"class":262},[67,89884,323],{"class":73},[19,89886,89887],{},[3317,89888],{"alt":63,"src":89889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23794,89891,89893,89894],{"id":89892},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2144,89895,89896],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89898,89899],{},[2230,89900,89901],{"href":89901,"rel":89902},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25657],[19,89904,89905],{},"lodash里边的方法都要加上一个下划线_",[19,89907,89908],{},"_.cloneDeep()",[58,89910,89912],{"className":52401,"code":89911,"language":52403,"meta":63,"style":63},"\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",[32,89913,89914,89924,89938,89942,89950,89964,89984,89996,90004,90008,90016,90021,90040,90048,90058,90066,90074,90086,90090,90096,90100,90104,90120,90128,90137,90145,90153,90161,90165],{"__ignoreMap":63},[67,89915,89916,89918,89920,89922],{"class":69,"line":70},[67,89917,53065],{"class":73},[67,89919,53068],{"class":262},[67,89921,53071],{"class":110},[67,89923,323],{"class":73},[67,89925,89926,89928,89930,89932,89934,89936],{"class":69,"line":191},[67,89927,259],{"class":73},[67,89929,52403],{"class":262},[67,89931,53082],{"class":110},[67,89933,85],{"class":73},[67,89935,53087],{"class":114},[67,89937,323],{"class":73},[67,89939,89940],{"class":69,"line":202},[67,89941,631],{"emptyLinePlaceholder":630},[67,89943,89944,89946,89948],{"class":69,"line":641},[67,89945,259],{"class":73},[67,89947,53100],{"class":262},[67,89949,323],{"class":73},[67,89951,89952,89954,89956,89958,89960,89962],{"class":69,"line":655},[67,89953,328],{"class":73},[67,89955,53110],{"class":262},[67,89957,53113],{"class":110},[67,89959,85],{"class":73},[67,89961,53118],{"class":114},[67,89963,323],{"class":73},[67,89965,89966,89968,89970,89972,89974,89976,89978,89980,89982],{"class":69,"line":660},[67,89967,328],{"class":73},[67,89969,53110],{"class":262},[67,89971,266],{"class":110},[67,89973,85],{"class":73},[67,89975,53157],{"class":114},[67,89977,53137],{"class":110},[67,89979,85],{"class":73},[67,89981,53164],{"class":114},[67,89983,323],{"class":73},[67,89985,89986,89988,89990,89992,89994],{"class":69,"line":665},[67,89987,328],{"class":73},[67,89989,53173],{"class":262},[67,89991,53176],{"class":73},[67,89993,53173],{"class":262},[67,89995,323],{"class":73},[67,89997,89998,90000,90002],{"class":69,"line":677},[67,89999,376],{"class":73},[67,90001,53100],{"class":262},[67,90003,323],{"class":73},[67,90005,90006],{"class":69,"line":683},[67,90007,631],{"emptyLinePlaceholder":630},[67,90009,90010,90012,90014],{"class":69,"line":689},[67,90011,259],{"class":73},[67,90013,53565],{"class":262},[67,90015,323],{"class":73},[67,90017,90018],{"class":69,"line":694},[67,90019,90020],{"class":2058},"  \u003C!-- 先引用这个库 -->\n",[67,90022,90023,90025,90027,90029,90031,90034,90036,90038],{"class":69,"line":700},[67,90024,328],{"class":73},[67,90026,53578],{"class":262},[67,90028,57000],{"class":110},[67,90030,85],{"class":73},[67,90032,90033],{"class":114},"\"lodash.min.js\"",[67,90035,57075],{"class":73},[67,90037,53578],{"class":262},[67,90039,323],{"class":73},[67,90041,90042,90044,90046],{"class":69,"line":706},[67,90043,328],{"class":73},[67,90045,53578],{"class":262},[67,90047,323],{"class":73},[67,90049,90050,90052,90054,90056],{"class":69,"line":712},[67,90051,13021],{"class":84},[67,90053,71731],{"class":77},[67,90055,671],{"class":84},[67,90057,17369],{"class":73},[67,90059,90060,90062,90064],{"class":69,"line":717},[67,90061,73376],{"class":73},[67,90063,89569],{"class":114},[67,90065,33238],{"class":73},[67,90067,90068,90070,90072],{"class":69,"line":723},[67,90069,73386],{"class":73},[67,90071,2639],{"class":77},[67,90073,33238],{"class":73},[67,90075,90076,90078,90080,90082,90084],{"class":69,"line":729},[67,90077,89584],{"class":73},[67,90079,89587],{"class":114},[67,90081,1868],{"class":73},[67,90083,89592],{"class":114},[67,90085,89595],{"class":73},[67,90087,90088],{"class":69,"line":735},[67,90089,79632],{"class":73},[67,90091,90092,90094],{"class":69,"line":741},[67,90093,89604],{"class":73},[67,90095,89607],{"class":114},[67,90097,90098],{"class":69,"line":747},[67,90099,54162],{"class":73},[67,90101,90102],{"class":69,"line":753},[67,90103,4020],{"class":73},[67,90105,90106,90108,90110,90112,90115,90118],{"class":69,"line":758},[67,90107,13021],{"class":84},[67,90109,89622],{"class":77},[67,90111,671],{"class":84},[67,90113,90114],{"class":73}," _.",[67,90116,90117],{"class":110},"cloneDeep",[67,90119,71796],{"class":73},[67,90121,90122,90124,90126],{"class":69,"line":764},[67,90123,75513],{"class":73},[67,90125,60008],{"class":110},[67,90127,89814],{"class":73},[67,90129,90130,90133,90135],{"class":69,"line":770},[67,90131,90132],{"class":73},"    o.family.baby ",[67,90134,85],{"class":84},[67,90136,89848],{"class":114},[67,90138,90139,90141,90143],{"class":69,"line":776},[67,90140,75513],{"class":73},[67,90142,60008],{"class":110},[67,90144,71796],{"class":73},[67,90146,90147,90149,90151],{"class":69,"line":782},[67,90148,54181],{"class":73},[67,90150,53578],{"class":262},[67,90152,323],{"class":73},[67,90154,90155,90157,90159],{"class":69,"line":788},[67,90156,376],{"class":73},[67,90158,53565],{"class":262},[67,90160,323],{"class":73},[67,90162,90163],{"class":69,"line":793},[67,90164,631],{"emptyLinePlaceholder":630},[67,90166,90167,90169,90171],{"class":69,"line":798},[67,90168,376],{"class":73},[67,90170,52403],{"class":262},[67,90172,323],{"class":73},[19,90174,90175],{},[3317,90176],{"alt":63,"src":90177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23794,90179,90181],{"id":90180},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[58,90183,90185],{"className":52401,"code":90184,"language":52403,"meta":63,"style":63},"\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",[32,90186,90187,90197,90211,90215,90223,90237,90257,90269,90277,90281,90289,90297,90307,90315,90323,90335,90339,90345,90349,90353,90358,90363,90368,90394,90402,90411,90419,90427,90435,90439],{"__ignoreMap":63},[67,90188,90189,90191,90193,90195],{"class":69,"line":70},[67,90190,53065],{"class":73},[67,90192,53068],{"class":262},[67,90194,53071],{"class":110},[67,90196,323],{"class":73},[67,90198,90199,90201,90203,90205,90207,90209],{"class":69,"line":191},[67,90200,259],{"class":73},[67,90202,52403],{"class":262},[67,90204,53082],{"class":110},[67,90206,85],{"class":73},[67,90208,53087],{"class":114},[67,90210,323],{"class":73},[67,90212,90213],{"class":69,"line":202},[67,90214,631],{"emptyLinePlaceholder":630},[67,90216,90217,90219,90221],{"class":69,"line":641},[67,90218,259],{"class":73},[67,90220,53100],{"class":262},[67,90222,323],{"class":73},[67,90224,90225,90227,90229,90231,90233,90235],{"class":69,"line":655},[67,90226,328],{"class":73},[67,90228,53110],{"class":262},[67,90230,53113],{"class":110},[67,90232,85],{"class":73},[67,90234,53118],{"class":114},[67,90236,323],{"class":73},[67,90238,90239,90241,90243,90245,90247,90249,90251,90253,90255],{"class":69,"line":660},[67,90240,328],{"class":73},[67,90242,53110],{"class":262},[67,90244,266],{"class":110},[67,90246,85],{"class":73},[67,90248,53157],{"class":114},[67,90250,53137],{"class":110},[67,90252,85],{"class":73},[67,90254,53164],{"class":114},[67,90256,323],{"class":73},[67,90258,90259,90261,90263,90265,90267],{"class":69,"line":665},[67,90260,328],{"class":73},[67,90262,53173],{"class":262},[67,90264,53176],{"class":73},[67,90266,53173],{"class":262},[67,90268,323],{"class":73},[67,90270,90271,90273,90275],{"class":69,"line":677},[67,90272,376],{"class":73},[67,90274,53100],{"class":262},[67,90276,323],{"class":73},[67,90278,90279],{"class":69,"line":683},[67,90280,631],{"emptyLinePlaceholder":630},[67,90282,90283,90285,90287],{"class":69,"line":689},[67,90284,259],{"class":73},[67,90286,53565],{"class":262},[67,90288,323],{"class":73},[67,90290,90291,90293,90295],{"class":69,"line":694},[67,90292,328],{"class":73},[67,90294,53578],{"class":262},[67,90296,323],{"class":73},[67,90298,90299,90301,90303,90305],{"class":69,"line":700},[67,90300,13021],{"class":84},[67,90302,71731],{"class":77},[67,90304,671],{"class":84},[67,90306,17369],{"class":73},[67,90308,90309,90311,90313],{"class":69,"line":706},[67,90310,73376],{"class":73},[67,90312,89569],{"class":114},[67,90314,33238],{"class":73},[67,90316,90317,90319,90321],{"class":69,"line":712},[67,90318,73386],{"class":73},[67,90320,2639],{"class":77},[67,90322,33238],{"class":73},[67,90324,90325,90327,90329,90331,90333],{"class":69,"line":717},[67,90326,89584],{"class":73},[67,90328,89587],{"class":114},[67,90330,1868],{"class":73},[67,90332,89592],{"class":114},[67,90334,89595],{"class":73},[67,90336,90337],{"class":69,"line":723},[67,90338,79632],{"class":73},[67,90340,90341,90343],{"class":69,"line":729},[67,90342,89604],{"class":73},[67,90344,89607],{"class":114},[67,90346,90347],{"class":69,"line":735},[67,90348,54162],{"class":73},[67,90350,90351],{"class":69,"line":741},[67,90352,4020],{"class":73},[67,90354,90355],{"class":69,"line":747},[67,90356,90357],{"class":2058},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[67,90359,90360],{"class":69,"line":753},[67,90361,90362],{"class":2058},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[67,90364,90365],{"class":69,"line":758},[67,90366,90367],{"class":2058},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[67,90369,90370,90372,90374,90376,90379,90381,90384,90386,90388,90390,90392],{"class":69,"line":764},[67,90371,13021],{"class":84},[67,90373,89622],{"class":77},[67,90375,671],{"class":84},[67,90377,90378],{"class":77}," JSON",[67,90380,2547],{"class":73},[67,90382,90383],{"class":110},"parse",[67,90385,854],{"class":73},[67,90387,73424],{"class":77},[67,90389,2547],{"class":73},[67,90391,73429],{"class":110},[67,90393,73432],{"class":73},[67,90395,90396,90398,90400],{"class":69,"line":770},[67,90397,75513],{"class":73},[67,90399,60008],{"class":110},[67,90401,89814],{"class":73},[67,90403,90404,90406,90408],{"class":69,"line":776},[67,90405,90132],{"class":73},[67,90407,85],{"class":84},[67,90409,90410],{"class":114}," '123'\n",[67,90412,90413,90415,90417],{"class":69,"line":782},[67,90414,75513],{"class":73},[67,90416,60008],{"class":110},[67,90418,71796],{"class":73},[67,90420,90421,90423,90425],{"class":69,"line":788},[67,90422,54181],{"class":73},[67,90424,53578],{"class":262},[67,90426,323],{"class":73},[67,90428,90429,90431,90433],{"class":69,"line":793},[67,90430,376],{"class":73},[67,90432,53565],{"class":262},[67,90434,323],{"class":73},[67,90436,90437],{"class":69,"line":798},[67,90438,631],{"emptyLinePlaceholder":630},[67,90440,90441,90443,90445],{"class":69,"line":816},[67,90442,376],{"class":73},[67,90444,52403],{"class":262},[67,90446,323],{"class":73},[19,90448,90449],{},[3317,90450],{"alt":63,"src":90451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90453,90455],{"id":90454},"_415-异常处理","4.15 异常处理",[26,90457,90458],{},[29,90459,90460],{},"throw抛异常",[19,90462,90463],{},[3317,90464],{"alt":63,"src":90465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[26,90467,90468],{"start":191},[29,90469,90470],{},"try\u002Fcatch 捕获错误信息",[19,90472,90473],{},[3317,90474],{"alt":63,"src":90475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[58,90477,90479],{"className":52401,"code":90478,"language":52403,"meta":63,"style":63},"\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",[32,90480,90481,90491,90505,90509,90517,90531,90551,90563,90571,90575,90583,90595,90603,90612,90619,90624,90643,90652,90663,90668,90678,90683,90688,90693,90710,90714,90719,90726,90738,90742,90754,90758,90762,90767,90772,90779,90787,90795,90799],{"__ignoreMap":63},[67,90482,90483,90485,90487,90489],{"class":69,"line":70},[67,90484,53065],{"class":73},[67,90486,53068],{"class":262},[67,90488,53071],{"class":110},[67,90490,323],{"class":73},[67,90492,90493,90495,90497,90499,90501,90503],{"class":69,"line":191},[67,90494,259],{"class":73},[67,90496,52403],{"class":262},[67,90498,53082],{"class":110},[67,90500,85],{"class":73},[67,90502,53087],{"class":114},[67,90504,323],{"class":73},[67,90506,90507],{"class":69,"line":202},[67,90508,631],{"emptyLinePlaceholder":630},[67,90510,90511,90513,90515],{"class":69,"line":641},[67,90512,259],{"class":73},[67,90514,53100],{"class":262},[67,90516,323],{"class":73},[67,90518,90519,90521,90523,90525,90527,90529],{"class":69,"line":655},[67,90520,328],{"class":73},[67,90522,53110],{"class":262},[67,90524,53113],{"class":110},[67,90526,85],{"class":73},[67,90528,53118],{"class":114},[67,90530,323],{"class":73},[67,90532,90533,90535,90537,90539,90541,90543,90545,90547,90549],{"class":69,"line":660},[67,90534,328],{"class":73},[67,90536,53110],{"class":262},[67,90538,266],{"class":110},[67,90540,85],{"class":73},[67,90542,53157],{"class":114},[67,90544,53137],{"class":110},[67,90546,85],{"class":73},[67,90548,53164],{"class":114},[67,90550,323],{"class":73},[67,90552,90553,90555,90557,90559,90561],{"class":69,"line":665},[67,90554,328],{"class":73},[67,90556,53173],{"class":262},[67,90558,53176],{"class":73},[67,90560,53173],{"class":262},[67,90562,323],{"class":73},[67,90564,90565,90567,90569],{"class":69,"line":677},[67,90566,376],{"class":73},[67,90568,53100],{"class":262},[67,90570,323],{"class":73},[67,90572,90573],{"class":69,"line":683},[67,90574,631],{"emptyLinePlaceholder":630},[67,90576,90577,90579,90581],{"class":69,"line":689},[67,90578,259],{"class":73},[67,90580,53565],{"class":262},[67,90582,323],{"class":73},[67,90584,90585,90587,90589,90591,90593],{"class":69,"line":694},[67,90586,328],{"class":73},[67,90588,19],{"class":262},[67,90590,55256],{"class":73},[67,90592,19],{"class":262},[67,90594,323],{"class":73},[67,90596,90597,90599,90601],{"class":69,"line":700},[67,90598,328],{"class":73},[67,90600,53578],{"class":262},[67,90602,323],{"class":73},[67,90604,90605,90607,90610],{"class":69,"line":706},[67,90606,71844],{"class":84},[67,90608,90609],{"class":110}," fn",[67,90611,12653],{"class":73},[67,90613,90614,90617],{"class":69,"line":712},[67,90615,90616],{"class":84},"      try",[67,90618,17369],{"class":73},[67,90620,90621],{"class":69,"line":717},[67,90622,90623],{"class":2058},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[67,90625,90626,90628,90630,90632,90634,90636,90638,90641],{"class":69,"line":723},[67,90627,63031],{"class":84},[67,90629,8641],{"class":77},[67,90631,671],{"class":84},[67,90633,56157],{"class":73},[67,90635,56160],{"class":110},[67,90637,854],{"class":73},[67,90639,90640],{"class":114},"'.p'",[67,90642,829],{"class":73},[67,90644,90645,90648,90650],{"class":69,"line":729},[67,90646,90647],{"class":73},"        p.style.color ",[67,90649,85],{"class":84},[67,90651,68811],{"class":114},[67,90653,90654,90657,90660],{"class":69,"line":735},[67,90655,90656],{"class":73},"      } ",[67,90658,90659],{"class":84},"catch",[67,90661,90662],{"class":73}," (err) {\n",[67,90664,90665],{"class":69,"line":741},[67,90666,90667],{"class":2058},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[67,90669,90670,90673,90675],{"class":69,"line":747},[67,90671,90672],{"class":73},"        console.",[67,90674,60008],{"class":110},[67,90676,90677],{"class":73},"(err.message)\n",[67,90679,90680],{"class":69,"line":753},[67,90681,90682],{"class":2058},"        \u002F\u002F 想要中断程序，需要加return\n",[67,90684,90685],{"class":69,"line":758},[67,90686,90687],{"class":2058},"        \u002F\u002F return\n",[67,90689,90690],{"class":69,"line":764},[67,90691,90692],{"class":2058},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[67,90694,90695,90698,90700,90703,90705,90708],{"class":69,"line":770},[67,90696,90697],{"class":84},"        throw",[67,90699,13378],{"class":84},[67,90701,90702],{"class":110}," Error",[67,90704,854],{"class":73},[67,90706,90707],{"class":114},"'你看看，选择器错误了吧'",[67,90709,829],{"class":73},[67,90711,90712],{"class":69,"line":776},[67,90713,54162],{"class":73},[67,90715,90716],{"class":69,"line":782},[67,90717,90718],{"class":2058},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[67,90720,90721,90724],{"class":69,"line":788},[67,90722,90723],{"class":84},"      finally",[67,90725,17369],{"class":73},[67,90727,90728,90731,90733,90736],{"class":69,"line":793},[67,90729,90730],{"class":110},"        alert",[67,90732,854],{"class":73},[67,90734,90735],{"class":114},"'弹出对话框'",[67,90737,829],{"class":73},[67,90739,90740],{"class":69,"line":798},[67,90741,54162],{"class":73},[67,90743,90744,90746,90748,90750,90752],{"class":69,"line":816},[67,90745,60005],{"class":73},[67,90747,60008],{"class":110},[67,90749,854],{"class":73},[67,90751,2462],{"class":77},[67,90753,829],{"class":73},[67,90755,90756],{"class":69,"line":832},[67,90757,631],{"emptyLinePlaceholder":630},[67,90759,90760],{"class":69,"line":843},[67,90761,4020],{"class":73},[67,90763,90764],{"class":69,"line":848},[67,90765,90766],{"class":2058},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[67,90768,90769],{"class":69,"line":863},[67,90770,90771],{"class":2058},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[67,90773,90774,90777],{"class":69,"line":876},[67,90775,90776],{"class":110},"    fn",[67,90778,3809],{"class":73},[67,90780,90781,90783,90785],{"class":69,"line":889},[67,90782,54181],{"class":73},[67,90784,53578],{"class":262},[67,90786,323],{"class":73},[67,90788,90789,90791,90793],{"class":69,"line":894},[67,90790,376],{"class":73},[67,90792,53565],{"class":262},[67,90794,323],{"class":73},[67,90796,90797],{"class":69,"line":911},[67,90798,631],{"emptyLinePlaceholder":630},[67,90800,90801,90803,90805],{"class":69,"line":927},[67,90802,376],{"class":73},[67,90804,52403],{"class":262},[67,90806,323],{"class":73},[19,90808,90809],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[26,90811,90812],{"start":202},[29,90813,90814],{},"debugger",[19,90816,90817],{},[3317,90818],{"alt":63,"src":90819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90821,90822],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90824,90826],{"id":90825},"_416-处理this","4.16 处理this",[391,90828,90830],{"id":90829},"_4161-this的指向","4.16.1 this的指向",[26,90832,90833],{},[29,90834,90835],{},"普通函数的this",[19,90837,90838],{},[3317,90839],{"alt":63,"src":90840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[26,90842,90843],{"start":191},[29,90844,90845],{},"箭头函数的this",[19,90847,90848],{},[3317,90849],{"alt":63,"src":90850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90852,90853],{},[3317,90854],{"alt":63,"src":90855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90857,90858],{},[3317,90859],{"alt":63,"src":90860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[391,90862,90864],{"id":90863},"_4162-this的改变","4.16.2 this的改变",[19,90866,90867],{},"call() apply() bind()",[26,90869,90870],{},[29,90871,90872],{},"call()",[19,90874,90875],{},[3317,90876],{"alt":63,"src":90877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90879,90880],{},"两个作用：①调用函数；②改变this指向",[58,90882,90884],{"className":250,"code":90883,"language":252,"meta":63,"style":63},"\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",[32,90885,90886,90894,90902,90906,90911,90915,90920,90925,90930,90934,90939,90947],{"__ignoreMap":63},[67,90887,90888,90890,90892],{"class":69,"line":70},[67,90889,259],{"class":73},[67,90891,53565],{"class":262},[67,90893,323],{"class":73},[67,90895,90896,90898,90900],{"class":69,"line":191},[67,90897,328],{"class":73},[67,90899,53578],{"class":262},[67,90901,323],{"class":73},[67,90903,90904],{"class":69,"line":202},[67,90905,73283],{"class":73},[67,90907,90908],{"class":69,"line":641},[67,90909,90910],{"class":73},"      uname: 'pink'\n",[67,90912,90913],{"class":69,"line":655},[67,90914,4020],{"class":73},[67,90916,90917],{"class":69,"line":660},[67,90918,90919],{"class":73},"    function fn(x, y) {\n",[67,90921,90922],{"class":69,"line":665},[67,90923,90924],{"class":73},"      console.log(this)  \u002F\u002Fwindow\n",[67,90926,90927],{"class":69,"line":677},[67,90928,90929],{"class":73},"      console.log(x + y)\n",[67,90931,90932],{"class":69,"line":683},[67,90933,4020],{"class":73},[67,90935,90936],{"class":69,"line":689},[67,90937,90938],{"class":73},"    fn.call(obj, 1, 2)\n",[67,90940,90941,90943,90945],{"class":69,"line":694},[67,90942,54181],{"class":73},[67,90944,53578],{"class":262},[67,90946,323],{"class":73},[67,90948,90949,90951,90953],{"class":69,"line":700},[67,90950,376],{"class":73},[67,90952,53565],{"class":262},[67,90954,323],{"class":73},[19,90956,90957],{},[3317,90958],{"alt":63,"src":90959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[26,90961,90962],{"start":191},[29,90963,90964],{},"apply()",[19,90966,90967],{},[3317,90968],{"alt":63,"src":90969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90971,90880],{},[19,90973,90974],{},"call传递的是普通参数，而apply必须传递的是数组",[58,90976,90978],{"className":52401,"code":90977,"language":52403,"meta":63,"style":63},"\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",[32,90979,90980,90990,91004,91008,91016,91030,91050,91062,91070,91074,91082,91090,91100,91107,91111,91116,91132,91144,91158,91162,91167,91186,91191,91195,91200,91205,91213,91218,91240,91245,91261,91277,91289,91293,91298,91317,91325,91333,91337],{"__ignoreMap":63},[67,90981,90982,90984,90986,90988],{"class":69,"line":70},[67,90983,53065],{"class":73},[67,90985,53068],{"class":262},[67,90987,53071],{"class":110},[67,90989,323],{"class":73},[67,90991,90992,90994,90996,90998,91000,91002],{"class":69,"line":191},[67,90993,259],{"class":73},[67,90995,52403],{"class":262},[67,90997,53082],{"class":110},[67,90999,85],{"class":73},[67,91001,53087],{"class":114},[67,91003,323],{"class":73},[67,91005,91006],{"class":69,"line":202},[67,91007,631],{"emptyLinePlaceholder":630},[67,91009,91010,91012,91014],{"class":69,"line":641},[67,91011,259],{"class":73},[67,91013,53100],{"class":262},[67,91015,323],{"class":73},[67,91017,91018,91020,91022,91024,91026,91028],{"class":69,"line":655},[67,91019,328],{"class":73},[67,91021,53110],{"class":262},[67,91023,53113],{"class":110},[67,91025,85],{"class":73},[67,91027,53118],{"class":114},[67,91029,323],{"class":73},[67,91031,91032,91034,91036,91038,91040,91042,91044,91046,91048],{"class":69,"line":660},[67,91033,328],{"class":73},[67,91035,53110],{"class":262},[67,91037,266],{"class":110},[67,91039,85],{"class":73},[67,91041,53157],{"class":114},[67,91043,53137],{"class":110},[67,91045,85],{"class":73},[67,91047,53164],{"class":114},[67,91049,323],{"class":73},[67,91051,91052,91054,91056,91058,91060],{"class":69,"line":665},[67,91053,328],{"class":73},[67,91055,53173],{"class":262},[67,91057,53176],{"class":73},[67,91059,53173],{"class":262},[67,91061,323],{"class":73},[67,91063,91064,91066,91068],{"class":69,"line":677},[67,91065,376],{"class":73},[67,91067,53100],{"class":262},[67,91069,323],{"class":73},[67,91071,91072],{"class":69,"line":683},[67,91073,631],{"emptyLinePlaceholder":630},[67,91075,91076,91078,91080],{"class":69,"line":689},[67,91077,259],{"class":73},[67,91079,53565],{"class":262},[67,91081,323],{"class":73},[67,91083,91084,91086,91088],{"class":69,"line":694},[67,91085,328],{"class":73},[67,91087,53578],{"class":262},[67,91089,323],{"class":73},[67,91091,91092,91094,91096,91098],{"class":69,"line":700},[67,91093,13021],{"class":84},[67,91095,71731],{"class":77},[67,91097,671],{"class":84},[67,91099,17369],{"class":73},[67,91101,91102,91104],{"class":69,"line":706},[67,91103,73386],{"class":73},[67,91105,91106],{"class":77},"18\n",[67,91108,91109],{"class":69,"line":712},[67,91110,4020],{"class":73},[67,91112,91113],{"class":69,"line":717},[67,91114,91115],{"class":2058},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[67,91117,91118,91120,91122,91124,91126,91128,91130],{"class":69,"line":723},[67,91119,71844],{"class":84},[67,91121,90609],{"class":110},[67,91123,854],{"class":73},[67,91125,2809],{"class":7033},[67,91127,1868],{"class":73},[67,91129,2834],{"class":7033},[67,91131,14241],{"class":73},[67,91133,91134,91136,91138,91140,91142],{"class":69,"line":729},[67,91135,60005],{"class":73},[67,91137,60008],{"class":110},[67,91139,854],{"class":73},[67,91141,88752],{"class":77},[67,91143,829],{"class":73},[67,91145,91146,91148,91150,91153,91155],{"class":69,"line":735},[67,91147,60005],{"class":73},[67,91149,60008],{"class":110},[67,91151,91152],{"class":73},"(x ",[67,91154,2471],{"class":84},[67,91156,91157],{"class":73}," y)\n",[67,91159,91160],{"class":69,"line":741},[67,91161,4020],{"class":73},[67,91163,91164],{"class":69,"line":747},[67,91165,91166],{"class":2058},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[67,91168,91169,91172,91175,91178,91180,91182,91184],{"class":69,"line":753},[67,91170,91171],{"class":73},"    fn.",[67,91173,91174],{"class":110},"apply",[67,91176,91177],{"class":73},"(obj, [",[67,91179,2209],{"class":77},[67,91181,1868],{"class":73},[67,91183,2077],{"class":77},[67,91185,6476],{"class":73},[67,91187,91188],{"class":69,"line":758},[67,91189,91190],{"class":2058},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[67,91192,91193],{"class":69,"line":764},[67,91194,631],{"emptyLinePlaceholder":630},[67,91196,91197],{"class":69,"line":770},[67,91198,91199],{"class":2058},"    \u002F\u002F 使用场景：求数组最大值\n",[67,91201,91202],{"class":69,"line":776},[67,91203,91204],{"class":2058},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[67,91206,91207,91210],{"class":69,"line":782},[67,91208,91209],{"class":2058},"    \u002F\u002F console.log(max)",[67,91211,91212],{"class":2058},"   \u002F\u002F3\n",[67,91214,91215],{"class":69,"line":788},[67,91216,91217],{"class":2058},"    \u002F\u002F 指向空或者Math都是可以的\n",[67,91219,91220,91222,91224,91226,91228,91230,91232,91234,91236,91238],{"class":69,"line":793},[67,91221,13021],{"class":84},[67,91223,59456],{"class":77},[67,91225,671],{"class":84},[67,91227,53990],{"class":73},[67,91229,2302],{"class":77},[67,91231,1868],{"class":73},[67,91233,2494],{"class":77},[67,91235,1868],{"class":73},[67,91237,2524],{"class":77},[67,91239,35015],{"class":73},[67,91241,91242],{"class":69,"line":798},[67,91243,91244],{"class":2058},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[67,91246,91247,91249,91251,91253,91256,91258],{"class":69,"line":816},[67,91248,13021],{"class":84},[67,91250,7768],{"class":77},[67,91252,671],{"class":84},[67,91254,91255],{"class":73}," Math.max.",[67,91257,91174],{"class":110},[67,91259,91260],{"class":73},"(Math, arr)\n",[67,91262,91263,91265,91268,91270,91273,91275],{"class":69,"line":832},[67,91264,13021],{"class":84},[67,91266,91267],{"class":77}," min",[67,91269,671],{"class":84},[67,91271,91272],{"class":73}," Math.min.",[67,91274,91174],{"class":110},[67,91276,91260],{"class":73},[67,91278,91279,91281,91283,91286],{"class":69,"line":843},[67,91280,75513],{"class":73},[67,91282,60008],{"class":110},[67,91284,91285],{"class":73},"(max, min)     ",[67,91287,91288],{"class":2058},"\u002F\u002F100,4\n",[67,91290,91291],{"class":69,"line":848},[67,91292,631],{"emptyLinePlaceholder":630},[67,91294,91295],{"class":69,"line":863},[67,91296,91297],{"class":2058},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[67,91299,91300,91302,91304,91307,91309,91311,91314],{"class":69,"line":876},[67,91301,75513],{"class":73},[67,91303,60008],{"class":110},[67,91305,91306],{"class":73},"(Max.",[67,91308,7832],{"class":110},[67,91310,854],{"class":73},[67,91312,91313],{"class":84},"...",[67,91315,91316],{"class":73},"arr))\n",[67,91318,91319,91321,91323],{"class":69,"line":889},[67,91320,54181],{"class":73},[67,91322,53578],{"class":262},[67,91324,323],{"class":73},[67,91326,91327,91329,91331],{"class":69,"line":894},[67,91328,376],{"class":73},[67,91330,53565],{"class":262},[67,91332,323],{"class":73},[67,91334,91335],{"class":69,"line":911},[67,91336,631],{"emptyLinePlaceholder":630},[67,91338,91339,91341,91343],{"class":69,"line":927},[67,91340,376],{"class":73},[67,91342,52403],{"class":262},[67,91344,323],{"class":73},[19,91346,91347],{},[3317,91348],{"alt":63,"src":91349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[26,91351,91352],{"start":202},[29,91353,91354],{},"bind()",[19,91356,91357],{},[3317,91358],{"alt":63,"src":91359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91361,91362],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91364,91365],{},"bind的语法跟call很相似",[58,91367,91369],{"className":250,"code":91368,"language":252,"meta":63,"style":63},"\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",[32,91370,91371,91379,91387,91391,91396,91400,91404,91409,91413,91418,91423,91428,91433,91438,91443,91448,91452,91460],{"__ignoreMap":63},[67,91372,91373,91375,91377],{"class":69,"line":70},[67,91374,259],{"class":73},[67,91376,53565],{"class":262},[67,91378,323],{"class":73},[67,91380,91381,91383,91385],{"class":69,"line":191},[67,91382,328],{"class":73},[67,91384,53578],{"class":262},[67,91386,323],{"class":73},[67,91388,91389],{"class":69,"line":202},[67,91390,73283],{"class":73},[67,91392,91393],{"class":69,"line":641},[67,91394,91395],{"class":73},"      age: 18\n",[67,91397,91398],{"class":69,"line":655},[67,91399,4020],{"class":73},[67,91401,91402],{"class":69,"line":660},[67,91403,78903],{"class":73},[67,91405,91406],{"class":69,"line":665},[67,91407,91408],{"class":73},"      console.log(this)\n",[67,91410,91411],{"class":69,"line":677},[67,91412,4020],{"class":73},[67,91414,91415],{"class":69,"line":683},[67,91416,91417],{"class":73},"    \u002F\u002F 1.bind 不会调用函数\n",[67,91419,91420],{"class":69,"line":689},[67,91421,91422],{"class":73},"    \u002F\u002F 2.bind能改变this的指向\n",[67,91424,91425],{"class":69,"line":694},[67,91426,91427],{"class":73},"    fn.bind()\n",[67,91429,91430],{"class":69,"line":700},[67,91431,91432],{"class":73},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[67,91434,91435],{"class":69,"line":706},[67,91436,91437],{"class":73},"    const fun = fn.bind(obj)\n",[67,91439,91440],{"class":69,"line":712},[67,91441,91442],{"class":73},"    \u002F\u002F console.log(fun)\n",[67,91444,91445],{"class":69,"line":717},[67,91446,91447],{"class":73},"    \u002F\u002F 调用,查看this的指向\n",[67,91449,91450],{"class":69,"line":723},[67,91451,54415],{"class":73},[67,91453,91454,91456,91458],{"class":69,"line":729},[67,91455,54181],{"class":73},[67,91457,53578],{"class":262},[67,91459,323],{"class":73},[67,91461,91462,91464,91466],{"class":69,"line":735},[67,91463,376],{"class":73},[67,91465,53565],{"class":262},[67,91467,323],{"class":73},[19,91469,91470],{},[3317,91471],{"alt":63,"src":91472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[26,91474,91475],{"start":641},[29,91476,91477],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[58,91479,91481],{"className":250,"code":91480,"language":252,"meta":63,"style":63},"\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",[32,91482,91483,91491,91504,91512,91517,91521,91526,91531,91536,91541,91546,91551,91556,91561,91565,91573],{"__ignoreMap":63},[67,91484,91485,91487,91489],{"class":69,"line":70},[67,91486,259],{"class":73},[67,91488,53565],{"class":262},[67,91490,323],{"class":73},[67,91492,91493,91495,91497,91500,91502],{"class":69,"line":191},[67,91494,328],{"class":73},[67,91496,55648],{"class":262},[67,91498,91499],{"class":73},">禁用\u003C\u002F",[67,91501,55648],{"class":262},[67,91503,323],{"class":73},[67,91505,91506,91508,91510],{"class":69,"line":202},[67,91507,328],{"class":73},[67,91509,53578],{"class":262},[67,91511,323],{"class":73},[67,91513,91514],{"class":69,"line":641},[67,91515,91516],{"class":73},"    const btn = document.querySelector('button')\n",[67,91518,91519],{"class":69,"line":655},[67,91520,60777],{"class":73},[67,91522,91523],{"class":69,"line":660},[67,91524,91525],{"class":73},"      this.disabled = true\n",[67,91527,91528],{"class":69,"line":665},[67,91529,91530],{"class":73},"      \u002F\u002F 定时器是window进行调用的\n",[67,91532,91533],{"class":69,"line":677},[67,91534,91535],{"class":73},"      setTimeout(function () {\n",[67,91537,91538],{"class":69,"line":683},[67,91539,91540],{"class":73},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[67,91542,91543],{"class":69,"line":689},[67,91544,91545],{"class":73},"        this.disabled = false\n",[67,91547,91548],{"class":69,"line":694},[67,91549,91550],{"class":73},"      }.bind(this), 2000)\n",[67,91552,91553],{"class":69,"line":700},[67,91554,91555],{"class":73},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[67,91557,91558],{"class":69,"line":706},[67,91559,91560],{"class":73},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[67,91562,91563],{"class":69,"line":712},[67,91564,35230],{"class":73},[67,91566,91567,91569,91571],{"class":69,"line":717},[67,91568,54181],{"class":73},[67,91570,53578],{"class":262},[67,91572,323],{"class":73},[67,91574,91575,91577,91579],{"class":69,"line":723},[67,91576,376],{"class":73},[67,91578,53565],{"class":262},[67,91580,323],{"class":73},[26,91582,91583],{"start":655},[29,91584,23749],{},[19,91586,91587],{},[3317,91588],{"alt":63,"src":91589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91591,91593],{"id":91592},"_417-性能优化","4.17 性能优化",[391,91595,91597],{"id":91596},"_4171-防抖","4.17.1 防抖",[19,91599,91600],{},[3317,91601],{"alt":63,"src":91602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91604,91605],{},[2144,91606,91607],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91609,91610],{},"防抖实现方式：",[2994,91612,91613],{},[29,91614,91615],{},"lodash 提供了防抖处理",[19,91617,91618],{},"_.debounce(func,[wait=0],[options={}])",[19,91620,91621],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[58,91623,91625],{"className":52401,"code":91624,"language":52403,"meta":63,"style":63},"\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",[32,91626,91627,91637,91651,91655,91663,91677,91697,91709,91717,91723,91733,91745,91757,91768,91780,91790,91800,91813,91817,91825,91833,91837,91845,91863,91881,91889,91908,91918,91927,91938,91943,91947,91952,91957,91962,91987,91995,92003,92007],{"__ignoreMap":63},[67,91628,91629,91631,91633,91635],{"class":69,"line":70},[67,91630,53065],{"class":73},[67,91632,53068],{"class":262},[67,91634,53071],{"class":110},[67,91636,323],{"class":73},[67,91638,91639,91641,91643,91645,91647,91649],{"class":69,"line":191},[67,91640,259],{"class":73},[67,91642,52403],{"class":262},[67,91644,53082],{"class":110},[67,91646,85],{"class":73},[67,91648,53087],{"class":114},[67,91650,323],{"class":73},[67,91652,91653],{"class":69,"line":202},[67,91654,631],{"emptyLinePlaceholder":630},[67,91656,91657,91659,91661],{"class":69,"line":641},[67,91658,259],{"class":73},[67,91660,53100],{"class":262},[67,91662,323],{"class":73},[67,91664,91665,91667,91669,91671,91673,91675],{"class":69,"line":655},[67,91666,328],{"class":73},[67,91668,53110],{"class":262},[67,91670,53113],{"class":110},[67,91672,85],{"class":73},[67,91674,53118],{"class":114},[67,91676,323],{"class":73},[67,91678,91679,91681,91683,91685,91687,91689,91691,91693,91695],{"class":69,"line":660},[67,91680,328],{"class":73},[67,91682,53110],{"class":262},[67,91684,266],{"class":110},[67,91686,85],{"class":73},[67,91688,53157],{"class":114},[67,91690,53137],{"class":110},[67,91692,85],{"class":73},[67,91694,53164],{"class":114},[67,91696,323],{"class":73},[67,91698,91699,91701,91703,91705,91707],{"class":69,"line":665},[67,91700,328],{"class":73},[67,91702,53173],{"class":262},[67,91704,53176],{"class":73},[67,91706,53173],{"class":262},[67,91708,323],{"class":73},[67,91710,91711,91713,91715],{"class":69,"line":677},[67,91712,328],{"class":73},[67,91714,1903],{"class":262},[67,91716,323],{"class":73},[67,91718,91719,91721],{"class":69,"line":683},[67,91720,56513],{"class":110},[67,91722,17369],{"class":73},[67,91724,91725,91727,91729,91731],{"class":69,"line":689},[67,91726,74356],{"class":77},[67,91728,53203],{"class":73},[67,91730,62266],{"class":77},[67,91732,3148],{"class":73},[67,91734,91735,91737,91739,91741,91743],{"class":69,"line":694},[67,91736,56532],{"class":77},[67,91738,53203],{"class":73},[67,91740,3565],{"class":77},[67,91742,53258],{"class":84},[67,91744,3148],{"class":73},[67,91746,91747,91749,91751,91753,91755],{"class":69,"line":700},[67,91748,56546],{"class":77},[67,91750,53203],{"class":73},[67,91752,3565],{"class":77},[67,91754,53258],{"class":84},[67,91756,3148],{"class":73},[67,91758,91759,91761,91763,91766],{"class":69,"line":706},[67,91760,56645],{"class":77},[67,91762,53203],{"class":73},[67,91764,91765],{"class":77},"gray",[67,91767,3148],{"class":73},[67,91769,91770,91772,91774,91776,91778],{"class":69,"line":712},[67,91771,56683],{"class":77},[67,91773,53203],{"class":73},[67,91775,2814],{"class":77},[67,91777,53258],{"class":84},[67,91779,3148],{"class":73},[67,91781,91782,91784,91786,91788],{"class":69,"line":717},[67,91783,59177],{"class":77},[67,91785,53203],{"class":73},[67,91787,62603],{"class":77},[67,91789,3148],{"class":73},[67,91791,91792,91794,91796,91798],{"class":69,"line":723},[67,91793,59047],{"class":77},[67,91795,53203],{"class":73},[67,91797,53358],{"class":77},[67,91799,3148],{"class":73},[67,91801,91802,91805,91807,91809,91811],{"class":69,"line":729},[67,91803,91804],{"class":77},"      padding-top",[67,91806,53203],{"class":73},[67,91808,2310],{"class":77},[67,91810,53258],{"class":84},[67,91812,3148],{"class":73},[67,91814,91815],{"class":69,"line":735},[67,91816,4020],{"class":73},[67,91818,91819,91821,91823],{"class":69,"line":741},[67,91820,54181],{"class":73},[67,91822,1903],{"class":262},[67,91824,323],{"class":73},[67,91826,91827,91829,91831],{"class":69,"line":747},[67,91828,376],{"class":73},[67,91830,53100],{"class":262},[67,91832,323],{"class":73},[67,91834,91835],{"class":69,"line":753},[67,91836,631],{"emptyLinePlaceholder":630},[67,91838,91839,91841,91843],{"class":69,"line":758},[67,91840,259],{"class":73},[67,91842,53565],{"class":262},[67,91844,323],{"class":73},[67,91846,91847,91849,91851,91853,91855,91857,91859,91861],{"class":69,"line":764},[67,91848,328],{"class":73},[67,91850,53377],{"class":262},[67,91852,55248],{"class":110},[67,91854,85],{"class":73},[67,91856,55253],{"class":114},[67,91858,57075],{"class":73},[67,91860,53377],{"class":262},[67,91862,323],{"class":73},[67,91864,91865,91867,91869,91871,91873,91875,91877,91879],{"class":69,"line":770},[67,91866,328],{"class":73},[67,91868,53578],{"class":262},[67,91870,57000],{"class":110},[67,91872,85],{"class":73},[67,91874,90033],{"class":114},[67,91876,57075],{"class":73},[67,91878,53578],{"class":262},[67,91880,323],{"class":73},[67,91882,91883,91885,91887],{"class":69,"line":776},[67,91884,328],{"class":73},[67,91886,53578],{"class":262},[67,91888,323],{"class":73},[67,91890,91891,91893,91895,91897,91899,91901,91903,91906],{"class":69,"line":782},[67,91892,13021],{"class":84},[67,91894,88692],{"class":77},[67,91896,671],{"class":84},[67,91898,56157],{"class":73},[67,91900,56160],{"class":110},[67,91902,854],{"class":73},[67,91904,91905],{"class":114},"'.box'",[67,91907,829],{"class":73},[67,91909,91910,91912,91914,91916],{"class":69,"line":788},[67,91911,53983],{"class":84},[67,91913,11244],{"class":73},[67,91915,85],{"class":84},[67,91917,49101],{"class":77},[67,91919,91920,91922,91925],{"class":69,"line":793},[67,91921,71844],{"class":84},[67,91923,91924],{"class":110}," mouseMove",[67,91926,12653],{"class":73},[67,91928,91929,91932,91934,91936],{"class":69,"line":798},[67,91930,91931],{"class":73},"      box.innerHTML ",[67,91933,85],{"class":84},[67,91935,4856],{"class":73},[67,91937,4527],{"class":84},[67,91939,91940],{"class":69,"line":816},[67,91941,91942],{"class":2058},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[67,91944,91945],{"class":69,"line":832},[67,91946,4020],{"class":73},[67,91948,91949],{"class":69,"line":843},[67,91950,91951],{"class":2058},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[67,91953,91954],{"class":69,"line":848},[67,91955,91956],{"class":2058},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[67,91958,91959],{"class":69,"line":863},[67,91960,91961],{"class":2058},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[67,91963,91964,91967,91969,91971,91974,91977,91980,91983,91985],{"class":69,"line":876},[67,91965,91966],{"class":73},"    box.",[67,91968,59574],{"class":110},[67,91970,854],{"class":73},[67,91972,91973],{"class":114},"'mousemove'",[67,91975,91976],{"class":73},", _.",[67,91978,91979],{"class":110},"debounce",[67,91981,91982],{"class":73},"(mouseMove, ",[67,91984,66834],{"class":77},[67,91986,1050],{"class":73},[67,91988,91989,91991,91993],{"class":69,"line":889},[67,91990,54181],{"class":73},[67,91992,53578],{"class":262},[67,91994,323],{"class":73},[67,91996,91997,91999,92001],{"class":69,"line":894},[67,91998,376],{"class":73},[67,92000,53565],{"class":262},[67,92002,323],{"class":73},[67,92004,92005],{"class":69,"line":911},[67,92006,631],{"emptyLinePlaceholder":630},[67,92008,92009,92011,92013],{"class":69,"line":927},[67,92010,376],{"class":73},[67,92012,52403],{"class":262},[67,92014,323],{"class":73},[2994,92016,92017],{},[29,92018,92019],{},"手写一个防抖函数来处理",[19,92021,92022],{},"防抖的核心就是利用定时器来实现的：",[19,92024,92025],{},"①声明一个定时器变量",[19,92027,92028],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92030,92031],{},"③如果没有定时器则开启定时器，记得存到变量里面",[58,92033,92035],{"className":52401,"code":92034,"language":52403,"meta":63,"style":63},"\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",[32,92036,92037,92047,92061,92065,92073,92087,92107,92119,92127,92133,92143,92155,92167,92177,92189,92199,92209,92221,92225,92233,92241,92245,92253,92271,92289,92297,92315,92325,92333,92343,92347,92351,92355,92360,92365,92370,92375,92380,92385,92403,92410,92415,92423,92428,92441,92457,92467,92472,92476,92480,92500,92504,92509,92514,92519,92524,92532,92540,92544],{"__ignoreMap":63},[67,92038,92039,92041,92043,92045],{"class":69,"line":70},[67,92040,53065],{"class":73},[67,92042,53068],{"class":262},[67,92044,53071],{"class":110},[67,92046,323],{"class":73},[67,92048,92049,92051,92053,92055,92057,92059],{"class":69,"line":191},[67,92050,259],{"class":73},[67,92052,52403],{"class":262},[67,92054,53082],{"class":110},[67,92056,85],{"class":73},[67,92058,53087],{"class":114},[67,92060,323],{"class":73},[67,92062,92063],{"class":69,"line":202},[67,92064,631],{"emptyLinePlaceholder":630},[67,92066,92067,92069,92071],{"class":69,"line":641},[67,92068,259],{"class":73},[67,92070,53100],{"class":262},[67,92072,323],{"class":73},[67,92074,92075,92077,92079,92081,92083,92085],{"class":69,"line":655},[67,92076,328],{"class":73},[67,92078,53110],{"class":262},[67,92080,53113],{"class":110},[67,92082,85],{"class":73},[67,92084,53118],{"class":114},[67,92086,323],{"class":73},[67,92088,92089,92091,92093,92095,92097,92099,92101,92103,92105],{"class":69,"line":660},[67,92090,328],{"class":73},[67,92092,53110],{"class":262},[67,92094,266],{"class":110},[67,92096,85],{"class":73},[67,92098,53157],{"class":114},[67,92100,53137],{"class":110},[67,92102,85],{"class":73},[67,92104,53164],{"class":114},[67,92106,323],{"class":73},[67,92108,92109,92111,92113,92115,92117],{"class":69,"line":665},[67,92110,328],{"class":73},[67,92112,53173],{"class":262},[67,92114,53176],{"class":73},[67,92116,53173],{"class":262},[67,92118,323],{"class":73},[67,92120,92121,92123,92125],{"class":69,"line":677},[67,92122,328],{"class":73},[67,92124,1903],{"class":262},[67,92126,323],{"class":73},[67,92128,92129,92131],{"class":69,"line":683},[67,92130,56513],{"class":110},[67,92132,17369],{"class":73},[67,92134,92135,92137,92139,92141],{"class":69,"line":689},[67,92136,74356],{"class":77},[67,92138,53203],{"class":73},[67,92140,62266],{"class":77},[67,92142,3148],{"class":73},[67,92144,92145,92147,92149,92151,92153],{"class":69,"line":694},[67,92146,56532],{"class":77},[67,92148,53203],{"class":73},[67,92150,3565],{"class":77},[67,92152,53258],{"class":84},[67,92154,3148],{"class":73},[67,92156,92157,92159,92161,92163,92165],{"class":69,"line":700},[67,92158,56546],{"class":77},[67,92160,53203],{"class":73},[67,92162,3565],{"class":77},[67,92164,53258],{"class":84},[67,92166,3148],{"class":73},[67,92168,92169,92171,92173,92175],{"class":69,"line":706},[67,92170,56645],{"class":77},[67,92172,53203],{"class":73},[67,92174,91765],{"class":77},[67,92176,3148],{"class":73},[67,92178,92179,92181,92183,92185,92187],{"class":69,"line":712},[67,92180,56683],{"class":77},[67,92182,53203],{"class":73},[67,92184,2814],{"class":77},[67,92186,53258],{"class":84},[67,92188,3148],{"class":73},[67,92190,92191,92193,92195,92197],{"class":69,"line":717},[67,92192,59177],{"class":77},[67,92194,53203],{"class":73},[67,92196,62603],{"class":77},[67,92198,3148],{"class":73},[67,92200,92201,92203,92205,92207],{"class":69,"line":723},[67,92202,59047],{"class":77},[67,92204,53203],{"class":73},[67,92206,53358],{"class":77},[67,92208,3148],{"class":73},[67,92210,92211,92213,92215,92217,92219],{"class":69,"line":729},[67,92212,91804],{"class":77},[67,92214,53203],{"class":73},[67,92216,2310],{"class":77},[67,92218,53258],{"class":84},[67,92220,3148],{"class":73},[67,92222,92223],{"class":69,"line":735},[67,92224,4020],{"class":73},[67,92226,92227,92229,92231],{"class":69,"line":741},[67,92228,54181],{"class":73},[67,92230,1903],{"class":262},[67,92232,323],{"class":73},[67,92234,92235,92237,92239],{"class":69,"line":747},[67,92236,376],{"class":73},[67,92238,53100],{"class":262},[67,92240,323],{"class":73},[67,92242,92243],{"class":69,"line":753},[67,92244,631],{"emptyLinePlaceholder":630},[67,92246,92247,92249,92251],{"class":69,"line":758},[67,92248,259],{"class":73},[67,92250,53565],{"class":262},[67,92252,323],{"class":73},[67,92254,92255,92257,92259,92261,92263,92265,92267,92269],{"class":69,"line":764},[67,92256,328],{"class":73},[67,92258,53377],{"class":262},[67,92260,55248],{"class":110},[67,92262,85],{"class":73},[67,92264,55253],{"class":114},[67,92266,57075],{"class":73},[67,92268,53377],{"class":262},[67,92270,323],{"class":73},[67,92272,92273,92275,92277,92279,92281,92283,92285,92287],{"class":69,"line":770},[67,92274,328],{"class":73},[67,92276,53578],{"class":262},[67,92278,57000],{"class":110},[67,92280,85],{"class":73},[67,92282,90033],{"class":114},[67,92284,57075],{"class":73},[67,92286,53578],{"class":262},[67,92288,323],{"class":73},[67,92290,92291,92293,92295],{"class":69,"line":776},[67,92292,328],{"class":73},[67,92294,53578],{"class":262},[67,92296,323],{"class":73},[67,92298,92299,92301,92303,92305,92307,92309,92311,92313],{"class":69,"line":782},[67,92300,13021],{"class":84},[67,92302,88692],{"class":77},[67,92304,671],{"class":84},[67,92306,56157],{"class":73},[67,92308,56160],{"class":110},[67,92310,854],{"class":73},[67,92312,91905],{"class":114},[67,92314,829],{"class":73},[67,92316,92317,92319,92321,92323],{"class":69,"line":788},[67,92318,53983],{"class":84},[67,92320,11244],{"class":73},[67,92322,85],{"class":84},[67,92324,49101],{"class":77},[67,92326,92327,92329,92331],{"class":69,"line":793},[67,92328,71844],{"class":84},[67,92330,91924],{"class":110},[67,92332,12653],{"class":73},[67,92334,92335,92337,92339,92341],{"class":69,"line":798},[67,92336,91931],{"class":73},[67,92338,85],{"class":84},[67,92340,4856],{"class":73},[67,92342,4527],{"class":84},[67,92344,92345],{"class":69,"line":816},[67,92346,91942],{"class":2058},[67,92348,92349],{"class":69,"line":832},[67,92350,4020],{"class":73},[67,92352,92353],{"class":69,"line":843},[67,92354,91951],{"class":2058},[67,92356,92357],{"class":69,"line":848},[67,92358,92359],{"class":2058},"    \u002F\u002F 手写防抖函数\n",[67,92361,92362],{"class":69,"line":863},[67,92363,92364],{"class":2058},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[67,92366,92367],{"class":69,"line":876},[67,92368,92369],{"class":2058},"    \u002F\u002F 1.声明定时器变量\n",[67,92371,92372],{"class":69,"line":889},[67,92373,92374],{"class":2058},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[67,92376,92377],{"class":69,"line":894},[67,92378,92379],{"class":2058},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[67,92381,92382],{"class":69,"line":911},[67,92383,92384],{"class":2058},"    \u002F\u002F 4.定时器里面写函数调用\n",[67,92386,92387,92389,92392,92394,92397,92399,92401],{"class":69,"line":927},[67,92388,71844],{"class":84},[67,92390,92391],{"class":110}," debounce",[67,92393,854],{"class":73},[67,92395,92396],{"class":7033},"fn",[67,92398,1868],{"class":73},[67,92400,2709],{"class":7033},[67,92402,14241],{"class":73},[67,92404,92405,92407],{"class":69,"line":932},[67,92406,81532],{"class":84},[67,92408,92409],{"class":73}," timer\n",[67,92411,92412],{"class":69,"line":955},[67,92413,92414],{"class":2058},"      \u002F\u002F return 返回一个匿名函数\n",[67,92416,92417,92419,92421],{"class":69,"line":971},[67,92418,75742],{"class":84},[67,92420,60679],{"class":84},[67,92422,56213],{"class":73},[67,92424,92425],{"class":69,"line":1010},[67,92426,92427],{"class":2058},"        \u002F\u002F 这里边写第二三四步\n",[67,92429,92430,92432,92435,92438],{"class":69,"line":1016},[67,92431,4329],{"class":84},[67,92433,92434],{"class":73}," (timer) ",[67,92436,92437],{"class":110},"clearTimeout",[67,92439,92440],{"class":73},"(timer)\n",[67,92442,92443,92446,92448,92451,92453,92455],{"class":69,"line":1021},[67,92444,92445],{"class":73},"        timer ",[67,92447,85],{"class":84},[67,92449,92450],{"class":110}," setTimeout",[67,92452,854],{"class":73},[67,92454,56210],{"class":84},[67,92456,56213],{"class":73},[67,92458,92459,92462,92464],{"class":69,"line":1034},[67,92460,92461],{"class":110},"          fn",[67,92463,14849],{"class":73},[67,92465,92466],{"class":2058},"\u002F\u002F加小括号调用fn }, t)\n",[67,92468,92469],{"class":69,"line":1053},[67,92470,92471],{"class":73},"        }, t)\n",[67,92473,92474],{"class":69,"line":1070},[67,92475,54162],{"class":73},[67,92477,92478],{"class":69,"line":1083},[67,92479,4020],{"class":73},[67,92481,92482,92484,92486,92488,92490,92492,92494,92496,92498],{"class":69,"line":1088},[67,92483,91966],{"class":73},[67,92485,59574],{"class":110},[67,92487,854],{"class":73},[67,92489,91973],{"class":114},[67,92491,1868],{"class":73},[67,92493,91979],{"class":110},[67,92495,91982],{"class":73},[67,92497,66834],{"class":77},[67,92499,1050],{"class":73},[67,92501,92502],{"class":69,"line":1093},[67,92503,631],{"emptyLinePlaceholder":630},[67,92505,92506],{"class":69,"line":1110},[67,92507,92508],{"class":2058},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[67,92510,92511],{"class":69,"line":11603},[67,92512,92513],{"class":2058},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[67,92515,92516],{"class":69,"line":11612},[67,92517,92518],{"class":2058},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[67,92520,92521],{"class":69,"line":11617},[67,92522,92523],{"class":2058},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[67,92525,92526,92528,92530],{"class":69,"line":11623},[67,92527,54181],{"class":73},[67,92529,53578],{"class":262},[67,92531,323],{"class":73},[67,92533,92534,92536,92538],{"class":69,"line":11644},[67,92535,376],{"class":73},[67,92537,53565],{"class":262},[67,92539,323],{"class":73},[67,92541,92542],{"class":69,"line":11650},[67,92543,631],{"emptyLinePlaceholder":630},[67,92545,92546,92548,92550],{"class":69,"line":11664},[67,92547,376],{"class":73},[67,92549,52403],{"class":262},[67,92551,323],{"class":73},[391,92553,92555],{"id":92554},"_4172-节流","4.17.2 节流",[19,92557,92558],{},[3317,92559],{"alt":63,"src":92560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92562,92563],{},[3317,92564],{"alt":63,"src":92565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92567,92568],{},[2144,92569,92570],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92572,92573],{},"实现方式：",[2994,92575,92576],{},[29,92577,92578],{},"lodash 提供的节流函数来处理",[19,92580,92581],{},"_.throttle(func,[wait=0],[options=])",[19,92583,92584],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[58,92586,92588],{"className":52401,"code":92587,"language":52403,"meta":63,"style":63},"\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",[32,92589,92590,92600,92614,92618,92626,92640,92660,92672,92680,92686,92696,92708,92720,92730,92742,92752,92762,92774,92778,92786,92794,92798,92806,92824,92842,92850,92868,92878,92886,92896,92900,92904,92908,92913,92918,92939,92947,92955,92959],{"__ignoreMap":63},[67,92591,92592,92594,92596,92598],{"class":69,"line":70},[67,92593,53065],{"class":73},[67,92595,53068],{"class":262},[67,92597,53071],{"class":110},[67,92599,323],{"class":73},[67,92601,92602,92604,92606,92608,92610,92612],{"class":69,"line":191},[67,92603,259],{"class":73},[67,92605,52403],{"class":262},[67,92607,53082],{"class":110},[67,92609,85],{"class":73},[67,92611,53087],{"class":114},[67,92613,323],{"class":73},[67,92615,92616],{"class":69,"line":202},[67,92617,631],{"emptyLinePlaceholder":630},[67,92619,92620,92622,92624],{"class":69,"line":641},[67,92621,259],{"class":73},[67,92623,53100],{"class":262},[67,92625,323],{"class":73},[67,92627,92628,92630,92632,92634,92636,92638],{"class":69,"line":655},[67,92629,328],{"class":73},[67,92631,53110],{"class":262},[67,92633,53113],{"class":110},[67,92635,85],{"class":73},[67,92637,53118],{"class":114},[67,92639,323],{"class":73},[67,92641,92642,92644,92646,92648,92650,92652,92654,92656,92658],{"class":69,"line":660},[67,92643,328],{"class":73},[67,92645,53110],{"class":262},[67,92647,266],{"class":110},[67,92649,85],{"class":73},[67,92651,53157],{"class":114},[67,92653,53137],{"class":110},[67,92655,85],{"class":73},[67,92657,53164],{"class":114},[67,92659,323],{"class":73},[67,92661,92662,92664,92666,92668,92670],{"class":69,"line":665},[67,92663,328],{"class":73},[67,92665,53173],{"class":262},[67,92667,53176],{"class":73},[67,92669,53173],{"class":262},[67,92671,323],{"class":73},[67,92673,92674,92676,92678],{"class":69,"line":677},[67,92675,328],{"class":73},[67,92677,1903],{"class":262},[67,92679,323],{"class":73},[67,92681,92682,92684],{"class":69,"line":683},[67,92683,56513],{"class":110},[67,92685,17369],{"class":73},[67,92687,92688,92690,92692,92694],{"class":69,"line":689},[67,92689,74356],{"class":77},[67,92691,53203],{"class":73},[67,92693,62266],{"class":77},[67,92695,3148],{"class":73},[67,92697,92698,92700,92702,92704,92706],{"class":69,"line":694},[67,92699,56532],{"class":77},[67,92701,53203],{"class":73},[67,92703,3565],{"class":77},[67,92705,53258],{"class":84},[67,92707,3148],{"class":73},[67,92709,92710,92712,92714,92716,92718],{"class":69,"line":700},[67,92711,56546],{"class":77},[67,92713,53203],{"class":73},[67,92715,3565],{"class":77},[67,92717,53258],{"class":84},[67,92719,3148],{"class":73},[67,92721,92722,92724,92726,92728],{"class":69,"line":706},[67,92723,56645],{"class":77},[67,92725,53203],{"class":73},[67,92727,91765],{"class":77},[67,92729,3148],{"class":73},[67,92731,92732,92734,92736,92738,92740],{"class":69,"line":712},[67,92733,56683],{"class":77},[67,92735,53203],{"class":73},[67,92737,2814],{"class":77},[67,92739,53258],{"class":84},[67,92741,3148],{"class":73},[67,92743,92744,92746,92748,92750],{"class":69,"line":717},[67,92745,59177],{"class":77},[67,92747,53203],{"class":73},[67,92749,62603],{"class":77},[67,92751,3148],{"class":73},[67,92753,92754,92756,92758,92760],{"class":69,"line":723},[67,92755,59047],{"class":77},[67,92757,53203],{"class":73},[67,92759,53358],{"class":77},[67,92761,3148],{"class":73},[67,92763,92764,92766,92768,92770,92772],{"class":69,"line":729},[67,92765,91804],{"class":77},[67,92767,53203],{"class":73},[67,92769,2310],{"class":77},[67,92771,53258],{"class":84},[67,92773,3148],{"class":73},[67,92775,92776],{"class":69,"line":735},[67,92777,4020],{"class":73},[67,92779,92780,92782,92784],{"class":69,"line":741},[67,92781,54181],{"class":73},[67,92783,1903],{"class":262},[67,92785,323],{"class":73},[67,92787,92788,92790,92792],{"class":69,"line":747},[67,92789,376],{"class":73},[67,92791,53100],{"class":262},[67,92793,323],{"class":73},[67,92795,92796],{"class":69,"line":753},[67,92797,631],{"emptyLinePlaceholder":630},[67,92799,92800,92802,92804],{"class":69,"line":758},[67,92801,259],{"class":73},[67,92803,53565],{"class":262},[67,92805,323],{"class":73},[67,92807,92808,92810,92812,92814,92816,92818,92820,92822],{"class":69,"line":764},[67,92809,328],{"class":73},[67,92811,53377],{"class":262},[67,92813,55248],{"class":110},[67,92815,85],{"class":73},[67,92817,55253],{"class":114},[67,92819,57075],{"class":73},[67,92821,53377],{"class":262},[67,92823,323],{"class":73},[67,92825,92826,92828,92830,92832,92834,92836,92838,92840],{"class":69,"line":770},[67,92827,328],{"class":73},[67,92829,53578],{"class":262},[67,92831,57000],{"class":110},[67,92833,85],{"class":73},[67,92835,90033],{"class":114},[67,92837,57075],{"class":73},[67,92839,53578],{"class":262},[67,92841,323],{"class":73},[67,92843,92844,92846,92848],{"class":69,"line":776},[67,92845,328],{"class":73},[67,92847,53578],{"class":262},[67,92849,323],{"class":73},[67,92851,92852,92854,92856,92858,92860,92862,92864,92866],{"class":69,"line":782},[67,92853,13021],{"class":84},[67,92855,88692],{"class":77},[67,92857,671],{"class":84},[67,92859,56157],{"class":73},[67,92861,56160],{"class":110},[67,92863,854],{"class":73},[67,92865,91905],{"class":114},[67,92867,829],{"class":73},[67,92869,92870,92872,92874,92876],{"class":69,"line":788},[67,92871,53983],{"class":84},[67,92873,11244],{"class":73},[67,92875,85],{"class":84},[67,92877,49101],{"class":77},[67,92879,92880,92882,92884],{"class":69,"line":793},[67,92881,71844],{"class":84},[67,92883,91924],{"class":110},[67,92885,12653],{"class":73},[67,92887,92888,92890,92892,92894],{"class":69,"line":798},[67,92889,91931],{"class":73},[67,92891,85],{"class":84},[67,92893,4856],{"class":73},[67,92895,4527],{"class":84},[67,92897,92898],{"class":69,"line":816},[67,92899,91942],{"class":2058},[67,92901,92902],{"class":69,"line":832},[67,92903,4020],{"class":73},[67,92905,92906],{"class":69,"line":843},[67,92907,91951],{"class":2058},[67,92909,92910],{"class":69,"line":848},[67,92911,92912],{"class":2058},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[67,92914,92915],{"class":69,"line":863},[67,92916,92917],{"class":2058},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[67,92919,92920,92922,92924,92926,92928,92930,92933,92935,92937],{"class":69,"line":876},[67,92921,91966],{"class":73},[67,92923,59574],{"class":110},[67,92925,854],{"class":73},[67,92927,91973],{"class":114},[67,92929,91976],{"class":73},[67,92931,92932],{"class":110},"throttle",[67,92934,91982],{"class":73},[67,92936,66834],{"class":77},[67,92938,1050],{"class":73},[67,92940,92941,92943,92945],{"class":69,"line":889},[67,92942,54181],{"class":73},[67,92944,53578],{"class":262},[67,92946,323],{"class":73},[67,92948,92949,92951,92953],{"class":69,"line":894},[67,92950,376],{"class":73},[67,92952,53565],{"class":262},[67,92954,323],{"class":73},[67,92956,92957],{"class":69,"line":911},[67,92958,631],{"emptyLinePlaceholder":630},[67,92960,92961,92963,92965],{"class":69,"line":927},[67,92962,376],{"class":73},[67,92964,52403],{"class":262},[67,92966,323],{"class":73},[2994,92968,92969],{},[29,92970,92971],{},"手写一个节流函数来处理",[19,92973,72712],{},[19,92975,92025],{},[19,92977,92978],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92980,92981],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[58,92983,92985],{"className":52401,"code":92984,"language":52403,"meta":63,"style":63},"\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",[32,92986,92987,92997,93011,93015,93023,93037,93057,93069,93077,93083,93093,93105,93117,93127,93139,93149,93159,93171,93175,93183,93191,93195,93203,93221,93239,93247,93265,93275,93283,93293,93297,93301,93305,93310,93315,93320,93325,93330,93335,93352,93358,93366,93377,93392,93399,93404,93409,93419,93424,93429,93434,93438,93442,93446,93466,93474,93482,93486],{"__ignoreMap":63},[67,92988,92989,92991,92993,92995],{"class":69,"line":70},[67,92990,53065],{"class":73},[67,92992,53068],{"class":262},[67,92994,53071],{"class":110},[67,92996,323],{"class":73},[67,92998,92999,93001,93003,93005,93007,93009],{"class":69,"line":191},[67,93000,259],{"class":73},[67,93002,52403],{"class":262},[67,93004,53082],{"class":110},[67,93006,85],{"class":73},[67,93008,53087],{"class":114},[67,93010,323],{"class":73},[67,93012,93013],{"class":69,"line":202},[67,93014,631],{"emptyLinePlaceholder":630},[67,93016,93017,93019,93021],{"class":69,"line":641},[67,93018,259],{"class":73},[67,93020,53100],{"class":262},[67,93022,323],{"class":73},[67,93024,93025,93027,93029,93031,93033,93035],{"class":69,"line":655},[67,93026,328],{"class":73},[67,93028,53110],{"class":262},[67,93030,53113],{"class":110},[67,93032,85],{"class":73},[67,93034,53118],{"class":114},[67,93036,323],{"class":73},[67,93038,93039,93041,93043,93045,93047,93049,93051,93053,93055],{"class":69,"line":660},[67,93040,328],{"class":73},[67,93042,53110],{"class":262},[67,93044,266],{"class":110},[67,93046,85],{"class":73},[67,93048,53157],{"class":114},[67,93050,53137],{"class":110},[67,93052,85],{"class":73},[67,93054,53164],{"class":114},[67,93056,323],{"class":73},[67,93058,93059,93061,93063,93065,93067],{"class":69,"line":665},[67,93060,328],{"class":73},[67,93062,53173],{"class":262},[67,93064,53176],{"class":73},[67,93066,53173],{"class":262},[67,93068,323],{"class":73},[67,93070,93071,93073,93075],{"class":69,"line":677},[67,93072,328],{"class":73},[67,93074,1903],{"class":262},[67,93076,323],{"class":73},[67,93078,93079,93081],{"class":69,"line":683},[67,93080,56513],{"class":110},[67,93082,17369],{"class":73},[67,93084,93085,93087,93089,93091],{"class":69,"line":689},[67,93086,74356],{"class":77},[67,93088,53203],{"class":73},[67,93090,62266],{"class":77},[67,93092,3148],{"class":73},[67,93094,93095,93097,93099,93101,93103],{"class":69,"line":694},[67,93096,56532],{"class":77},[67,93098,53203],{"class":73},[67,93100,3565],{"class":77},[67,93102,53258],{"class":84},[67,93104,3148],{"class":73},[67,93106,93107,93109,93111,93113,93115],{"class":69,"line":700},[67,93108,56546],{"class":77},[67,93110,53203],{"class":73},[67,93112,3565],{"class":77},[67,93114,53258],{"class":84},[67,93116,3148],{"class":73},[67,93118,93119,93121,93123,93125],{"class":69,"line":706},[67,93120,56645],{"class":77},[67,93122,53203],{"class":73},[67,93124,91765],{"class":77},[67,93126,3148],{"class":73},[67,93128,93129,93131,93133,93135,93137],{"class":69,"line":712},[67,93130,56683],{"class":77},[67,93132,53203],{"class":73},[67,93134,2814],{"class":77},[67,93136,53258],{"class":84},[67,93138,3148],{"class":73},[67,93140,93141,93143,93145,93147],{"class":69,"line":717},[67,93142,59177],{"class":77},[67,93144,53203],{"class":73},[67,93146,62603],{"class":77},[67,93148,3148],{"class":73},[67,93150,93151,93153,93155,93157],{"class":69,"line":723},[67,93152,59047],{"class":77},[67,93154,53203],{"class":73},[67,93156,53358],{"class":77},[67,93158,3148],{"class":73},[67,93160,93161,93163,93165,93167,93169],{"class":69,"line":729},[67,93162,91804],{"class":77},[67,93164,53203],{"class":73},[67,93166,2310],{"class":77},[67,93168,53258],{"class":84},[67,93170,3148],{"class":73},[67,93172,93173],{"class":69,"line":735},[67,93174,4020],{"class":73},[67,93176,93177,93179,93181],{"class":69,"line":741},[67,93178,54181],{"class":73},[67,93180,1903],{"class":262},[67,93182,323],{"class":73},[67,93184,93185,93187,93189],{"class":69,"line":747},[67,93186,376],{"class":73},[67,93188,53100],{"class":262},[67,93190,323],{"class":73},[67,93192,93193],{"class":69,"line":753},[67,93194,631],{"emptyLinePlaceholder":630},[67,93196,93197,93199,93201],{"class":69,"line":758},[67,93198,259],{"class":73},[67,93200,53565],{"class":262},[67,93202,323],{"class":73},[67,93204,93205,93207,93209,93211,93213,93215,93217,93219],{"class":69,"line":764},[67,93206,328],{"class":73},[67,93208,53377],{"class":262},[67,93210,55248],{"class":110},[67,93212,85],{"class":73},[67,93214,55253],{"class":114},[67,93216,57075],{"class":73},[67,93218,53377],{"class":262},[67,93220,323],{"class":73},[67,93222,93223,93225,93227,93229,93231,93233,93235,93237],{"class":69,"line":770},[67,93224,328],{"class":73},[67,93226,53578],{"class":262},[67,93228,57000],{"class":110},[67,93230,85],{"class":73},[67,93232,90033],{"class":114},[67,93234,57075],{"class":73},[67,93236,53578],{"class":262},[67,93238,323],{"class":73},[67,93240,93241,93243,93245],{"class":69,"line":776},[67,93242,328],{"class":73},[67,93244,53578],{"class":262},[67,93246,323],{"class":73},[67,93248,93249,93251,93253,93255,93257,93259,93261,93263],{"class":69,"line":782},[67,93250,13021],{"class":84},[67,93252,88692],{"class":77},[67,93254,671],{"class":84},[67,93256,56157],{"class":73},[67,93258,56160],{"class":110},[67,93260,854],{"class":73},[67,93262,91905],{"class":114},[67,93264,829],{"class":73},[67,93266,93267,93269,93271,93273],{"class":69,"line":788},[67,93268,53983],{"class":84},[67,93270,11244],{"class":73},[67,93272,85],{"class":84},[67,93274,49101],{"class":77},[67,93276,93277,93279,93281],{"class":69,"line":793},[67,93278,71844],{"class":84},[67,93280,91924],{"class":110},[67,93282,12653],{"class":73},[67,93284,93285,93287,93289,93291],{"class":69,"line":798},[67,93286,91931],{"class":73},[67,93288,85],{"class":84},[67,93290,4856],{"class":73},[67,93292,4527],{"class":84},[67,93294,93295],{"class":69,"line":816},[67,93296,91942],{"class":2058},[67,93298,93299],{"class":69,"line":832},[67,93300,4020],{"class":73},[67,93302,93303],{"class":69,"line":843},[67,93304,91951],{"class":2058},[67,93306,93307],{"class":69,"line":848},[67,93308,93309],{"class":2058},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[67,93311,93312],{"class":69,"line":863},[67,93313,93314],{"class":2058},"    \u002F\u002F 1.声明一个定时器变量\n",[67,93316,93317],{"class":69,"line":876},[67,93318,93319],{"class":2058},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[67,93321,93322],{"class":69,"line":889},[67,93323,93324],{"class":2058},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[67,93326,93327],{"class":69,"line":894},[67,93328,93329],{"class":2058},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[67,93331,93332],{"class":69,"line":911},[67,93333,93334],{"class":2058},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[67,93336,93337,93339,93342,93344,93346,93348,93350],{"class":69,"line":927},[67,93338,71844],{"class":84},[67,93340,93341],{"class":110}," throttle",[67,93343,854],{"class":73},[67,93345,92396],{"class":7033},[67,93347,1868],{"class":73},[67,93349,2709],{"class":7033},[67,93351,14241],{"class":73},[67,93353,93354,93356],{"class":69,"line":932},[67,93355,81532],{"class":84},[67,93357,92409],{"class":73},[67,93359,93360,93362,93364],{"class":69,"line":955},[67,93361,75742],{"class":84},[67,93363,60679],{"class":84},[67,93365,56213],{"class":73},[67,93367,93368,93370,93372,93374],{"class":69,"line":971},[67,93369,4329],{"class":84},[67,93371,3505],{"class":73},[67,93373,2218],{"class":84},[67,93375,93376],{"class":73},"timer) {\n",[67,93378,93379,93382,93384,93386,93388,93390],{"class":69,"line":1010},[67,93380,93381],{"class":73},"          timer ",[67,93383,85],{"class":84},[67,93385,92450],{"class":110},[67,93387,854],{"class":73},[67,93389,56210],{"class":84},[67,93391,56213],{"class":73},[67,93393,93394,93397],{"class":69,"line":1016},[67,93395,93396],{"class":110},"            fn",[67,93398,3809],{"class":73},[67,93400,93401],{"class":69,"line":1021},[67,93402,93403],{"class":2058},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[67,93405,93406],{"class":69,"line":1034},[67,93407,93408],{"class":2058},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[67,93410,93411,93414,93416],{"class":69,"line":1053},[67,93412,93413],{"class":73},"            timer ",[67,93415,85],{"class":84},[67,93417,93418],{"class":77}," null\n",[67,93420,93421],{"class":69,"line":1070},[67,93422,93423],{"class":2058},"            \u002F\u002F 不能用clearTimeout(timer)\n",[67,93425,93426],{"class":69,"line":1083},[67,93427,93428],{"class":2058},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[67,93430,93431],{"class":69,"line":1088},[67,93432,93433],{"class":73},"          }, t)\n",[67,93435,93436],{"class":69,"line":1093},[67,93437,4361],{"class":73},[67,93439,93440],{"class":69,"line":1110},[67,93441,54162],{"class":73},[67,93443,93444],{"class":69,"line":11603},[67,93445,4020],{"class":73},[67,93447,93448,93450,93452,93454,93456,93458,93460,93462,93464],{"class":69,"line":11612},[67,93449,91966],{"class":73},[67,93451,59574],{"class":110},[67,93453,854],{"class":73},[67,93455,91973],{"class":114},[67,93457,1868],{"class":73},[67,93459,92932],{"class":110},[67,93461,91982],{"class":73},[67,93463,66834],{"class":77},[67,93465,1050],{"class":73},[67,93467,93468,93470,93472],{"class":69,"line":11617},[67,93469,54181],{"class":73},[67,93471,53578],{"class":262},[67,93473,323],{"class":73},[67,93475,93476,93478,93480],{"class":69,"line":11623},[67,93477,376],{"class":73},[67,93479,53565],{"class":262},[67,93481,323],{"class":73},[67,93483,93484],{"class":69,"line":11644},[67,93485,631],{"emptyLinePlaceholder":630},[67,93487,93488,93490,93492],{"class":69,"line":11650},[67,93489,376],{"class":73},[67,93491,52403],{"class":262},[67,93493,323],{"class":73},[391,93495,93497],{"id":93496},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[58,93499,93501],{"className":250,"code":93500,"language":252,"meta":63,"style":63},"\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",[32,93502,93503,93511,93519,93524,93529,93534,93539,93543,93551],{"__ignoreMap":63},[67,93504,93505,93507,93509],{"class":69,"line":70},[67,93506,259],{"class":73},[67,93508,53565],{"class":262},[67,93510,323],{"class":73},[67,93512,93513,93515,93517],{"class":69,"line":191},[67,93514,328],{"class":73},[67,93516,53578],{"class":262},[67,93518,323],{"class":73},[67,93520,93521],{"class":69,"line":202},[67,93522,93523],{"class":73},"    let timer = null\n",[67,93525,93526],{"class":69,"line":641},[67,93527,93528],{"class":73},"    timer = setTimeout(() => {\n",[67,93530,93531],{"class":69,"line":655},[67,93532,93533],{"class":73},"      clearTimeout(timer)\n",[67,93535,93536],{"class":69,"line":660},[67,93537,93538],{"class":73},"      console.log(timer)\n",[67,93540,93541],{"class":69,"line":665},[67,93542,61986],{"class":73},[67,93544,93545,93547,93549],{"class":69,"line":677},[67,93546,54181],{"class":73},[67,93548,53578],{"class":262},[67,93550,323],{"class":73},[67,93552,93553,93555,93557],{"class":69,"line":683},[67,93554,376],{"class":73},[67,93556,53565],{"class":262},[67,93558,323],{"class":73},[19,93560,93561],{},"输出为1",[19,93563,93564],{},"在开启的定时器里边写清除定时器",[19,93566,93567],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[391,93569,93571],{"id":93570},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93573,93574],{},"页面打开，可以记录上一次的视频播放位置",[19,93576,93577],{},[3317,93578],{"alt":63,"src":93579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93581,93582],{},[3317,93583],{"alt":63,"src":93584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[58,93586,93588],{"className":52401,"code":93587,"language":52403,"meta":63,"style":63},"\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",[32,93589,93590,93600,93614,93618,93626,93640,93660,93680,93702,93715,93723,93729,93739,93749,93759,93763,93767,93774,93787,93799,93803,93807,93817,93829,93843,93847,93851,93858,93868,93881,93893,93903,93913,93929,93941,93945,93949,93957,93967,93979,93989,93999,94009,94013,94017,94027,94038,94042,94050,94058,94062,94070,94085,94100,94115,94136,94144,94152,94167,94189,94197,94212,94238,94264,94290,94298,94306,94325,94333,94338,94357,94362,94380,94385,94390,94398,94403,94417,94425,94430,94447,94451,94456,94478,94482,94490,94498,94502],{"__ignoreMap":63},[67,93591,93592,93594,93596,93598],{"class":69,"line":70},[67,93593,53065],{"class":73},[67,93595,53068],{"class":262},[67,93597,53071],{"class":110},[67,93599,323],{"class":73},[67,93601,93602,93604,93606,93608,93610,93612],{"class":69,"line":191},[67,93603,259],{"class":73},[67,93605,52403],{"class":262},[67,93607,53082],{"class":110},[67,93609,85],{"class":73},[67,93611,53087],{"class":114},[67,93613,323],{"class":73},[67,93615,93616],{"class":69,"line":202},[67,93617,631],{"emptyLinePlaceholder":630},[67,93619,93620,93622,93624],{"class":69,"line":641},[67,93621,259],{"class":73},[67,93623,53100],{"class":262},[67,93625,323],{"class":73},[67,93627,93628,93630,93632,93634,93636,93638],{"class":69,"line":655},[67,93629,328],{"class":73},[67,93631,53110],{"class":262},[67,93633,53113],{"class":110},[67,93635,85],{"class":73},[67,93637,53118],{"class":114},[67,93639,60888],{"class":73},[67,93641,93642,93644,93646,93648,93650,93652,93654,93656,93658],{"class":69,"line":660},[67,93643,328],{"class":73},[67,93645,53110],{"class":262},[67,93647,53129],{"class":110},[67,93649,85],{"class":73},[67,93651,53134],{"class":114},[67,93653,53137],{"class":110},[67,93655,85],{"class":73},[67,93657,53142],{"class":114},[67,93659,60888],{"class":73},[67,93661,93662,93664,93666,93668,93670,93672,93674,93676,93678],{"class":69,"line":665},[67,93663,328],{"class":73},[67,93665,53110],{"class":262},[67,93667,266],{"class":110},[67,93669,85],{"class":73},[67,93671,53157],{"class":114},[67,93673,53137],{"class":110},[67,93675,85],{"class":73},[67,93677,53164],{"class":114},[67,93679,60888],{"class":73},[67,93681,93682,93684,93686,93688,93690,93693,93695,93697,93700],{"class":69,"line":677},[67,93683,328],{"class":73},[67,93685,53110],{"class":262},[67,93687,266],{"class":110},[67,93689,85],{"class":73},[67,93691,93692],{"class":114},"\"referrer\"",[67,93694,53137],{"class":110},[67,93696,85],{"class":73},[67,93698,93699],{"class":114},"\"never\"",[67,93701,60888],{"class":73},[67,93703,93704,93706,93708,93711,93713],{"class":69,"line":683},[67,93705,328],{"class":73},[67,93707,53173],{"class":262},[67,93709,93710],{"class":73},">综合案例\u003C\u002F",[67,93712,53173],{"class":262},[67,93714,323],{"class":73},[67,93716,93717,93719,93721],{"class":69,"line":689},[67,93718,328],{"class":73},[67,93720,1903],{"class":262},[67,93722,323],{"class":73},[67,93724,93725,93727],{"class":69,"line":694},[67,93726,8220],{"class":262},[67,93728,17369],{"class":73},[67,93730,93731,93733,93735,93737],{"class":69,"line":700},[67,93732,56456],{"class":77},[67,93734,53203],{"class":73},[67,93736,78],{"class":77},[67,93738,3148],{"class":73},[67,93740,93741,93743,93745,93747],{"class":69,"line":706},[67,93742,56467],{"class":77},[67,93744,53203],{"class":73},[67,93746,78],{"class":77},[67,93748,3148],{"class":73},[67,93750,93751,93753,93755,93757],{"class":69,"line":712},[67,93752,74356],{"class":77},[67,93754,53203],{"class":73},[67,93756,62266],{"class":77},[67,93758,3148],{"class":73},[67,93760,93761],{"class":69,"line":717},[67,93762,4020],{"class":73},[67,93764,93765],{"class":69,"line":723},[67,93766,631],{"emptyLinePlaceholder":630},[67,93768,93769,93772],{"class":69,"line":729},[67,93770,93771],{"class":110},"    .container",[67,93773,17369],{"class":73},[67,93775,93776,93778,93780,93783,93785],{"class":69,"line":735},[67,93777,56532],{"class":77},[67,93779,53203],{"class":73},[67,93781,93782],{"class":77},"1200",[67,93784,53258],{"class":84},[67,93786,3148],{"class":73},[67,93788,93789,93791,93793,93795,93797],{"class":69,"line":741},[67,93790,56467],{"class":77},[67,93792,53203],{"class":73},[67,93794,78],{"class":77},[67,93796,53322],{"class":77},[67,93798,3148],{"class":73},[67,93800,93801],{"class":69,"line":747},[67,93802,4020],{"class":73},[67,93804,93805],{"class":69,"line":753},[67,93806,631],{"emptyLinePlaceholder":630},[67,93808,93809,93812,93815],{"class":69,"line":758},[67,93810,93811],{"class":110},"    .video",[67,93813,93814],{"class":262}," video",[67,93816,17369],{"class":73},[67,93818,93819,93821,93823,93825,93827],{"class":69,"line":764},[67,93820,56532],{"class":77},[67,93822,53203],{"class":73},[67,93824,2302],{"class":77},[67,93826,2319],{"class":84},[67,93828,3148],{"class":73},[67,93830,93831,93833,93835,93837,93839,93841],{"class":69,"line":770},[67,93832,56456],{"class":77},[67,93834,53203],{"class":73},[67,93836,2689],{"class":77},[67,93838,53258],{"class":84},[67,93840,5913],{"class":77},[67,93842,3148],{"class":73},[67,93844,93845],{"class":69,"line":776},[67,93846,4020],{"class":73},[67,93848,93849],{"class":69,"line":782},[67,93850,631],{"emptyLinePlaceholder":630},[67,93852,93853,93856],{"class":69,"line":788},[67,93854,93855],{"class":110},"    .elevator",[67,93857,17369],{"class":73},[67,93859,93860,93862,93864,93866],{"class":69,"line":793},[67,93861,56520],{"class":77},[67,93863,53203],{"class":73},[67,93865,87992],{"class":77},[67,93867,3148],{"class":73},[67,93869,93870,93872,93874,93877,93879],{"class":69,"line":798},[67,93871,56708],{"class":77},[67,93873,53203],{"class":73},[67,93875,93876],{"class":77},"280",[67,93878,53258],{"class":84},[67,93880,3148],{"class":73},[67,93882,93883,93885,93887,93889,93891],{"class":69,"line":816},[67,93884,88186],{"class":77},[67,93886,53203],{"class":73},[67,93888,2689],{"class":77},[67,93890,53258],{"class":84},[67,93892,3148],{"class":73},[67,93894,93895,93897,93899,93901],{"class":69,"line":832},[67,93896,87999],{"class":77},[67,93898,53203],{"class":73},[67,93900,88004],{"class":77},[67,93902,3148],{"class":73},[67,93904,93905,93907,93909,93911],{"class":69,"line":843},[67,93906,63482],{"class":77},[67,93908,53203],{"class":73},[67,93910,62603],{"class":77},[67,93912,3148],{"class":73},[67,93914,93915,93917,93919,93921,93923,93925,93927],{"class":69,"line":848},[67,93916,63737],{"class":77},[67,93918,53203],{"class":73},[67,93920,2209],{"class":77},[67,93922,53258],{"class":84},[67,93924,53287],{"class":77},[67,93926,64004],{"class":77},[67,93928,3148],{"class":73},[67,93930,93931,93933,93935,93937,93939],{"class":69,"line":863},[67,93932,56532],{"class":77},[67,93934,53203],{"class":73},[67,93936,2896],{"class":77},[67,93938,53258],{"class":84},[67,93940,3148],{"class":73},[67,93942,93943],{"class":69,"line":876},[67,93944,4020],{"class":73},[67,93946,93947],{"class":69,"line":889},[67,93948,631],{"emptyLinePlaceholder":630},[67,93950,93951,93953,93955],{"class":69,"line":894},[67,93952,93855],{"class":110},[67,93954,3253],{"class":262},[67,93956,17369],{"class":73},[67,93958,93959,93961,93963,93965],{"class":69,"line":911},[67,93960,56770],{"class":77},[67,93962,53203],{"class":73},[67,93964,62630],{"class":77},[67,93966,3148],{"class":73},[67,93968,93969,93971,93973,93975,93977],{"class":69,"line":927},[67,93970,56456],{"class":77},[67,93972,53203],{"class":73},[67,93974,2437],{"class":77},[67,93976,53258],{"class":84},[67,93978,3148],{"class":73},[67,93980,93981,93983,93985,93987],{"class":69,"line":932},[67,93982,65730],{"class":77},[67,93984,53203],{"class":73},[67,93986,56498],{"class":77},[67,93988,3148],{"class":73},[67,93990,93991,93993,93995,93997],{"class":69,"line":955},[67,93992,59047],{"class":77},[67,93994,53203],{"class":73},[67,93996,53358],{"class":77},[67,93998,3148],{"class":73},[67,94000,94001,94003,94005,94007],{"class":69,"line":971},[67,94002,59177],{"class":77},[67,94004,53203],{"class":73},[67,94006,63830],{"class":77},[67,94008,3148],{"class":73},[67,94010,94011],{"class":69,"line":1010},[67,94012,4020],{"class":73},[67,94014,94015],{"class":69,"line":1016},[67,94016,631],{"emptyLinePlaceholder":630},[67,94018,94019,94021,94023,94025],{"class":69,"line":1021},[67,94020,93855],{"class":110},[67,94022,3253],{"class":262},[67,94024,65784],{"class":110},[67,94026,17369],{"class":73},[67,94028,94029,94031,94033,94036],{"class":69,"line":1034},[67,94030,59177],{"class":77},[67,94032,53203],{"class":73},[67,94034,94035],{"class":77},"#1286ff",[67,94037,3148],{"class":73},[67,94039,94040],{"class":69,"line":1053},[67,94041,4020],{"class":73},[67,94043,94044,94046,94048],{"class":69,"line":1070},[67,94045,54181],{"class":73},[67,94047,1903],{"class":262},[67,94049,323],{"class":73},[67,94051,94052,94054,94056],{"class":69,"line":1083},[67,94053,376],{"class":73},[67,94055,53100],{"class":262},[67,94057,323],{"class":73},[67,94059,94060],{"class":69,"line":1088},[67,94061,631],{"emptyLinePlaceholder":630},[67,94063,94064,94066,94068],{"class":69,"line":1093},[67,94065,259],{"class":73},[67,94067,53565],{"class":262},[67,94069,323],{"class":73},[67,94071,94072,94074,94076,94078,94080,94083],{"class":69,"line":1110},[67,94073,328],{"class":73},[67,94075,53377],{"class":262},[67,94077,55248],{"class":110},[67,94079,85],{"class":73},[67,94081,94082],{"class":114},"\"container\"",[67,94084,323],{"class":73},[67,94086,94087,94089,94091,94093,94095,94098],{"class":69,"line":11603},[67,94088,53107],{"class":73},[67,94090,53377],{"class":262},[67,94092,55248],{"class":110},[67,94094,85],{"class":73},[67,94096,94097],{"class":114},"\"header\"",[67,94099,323],{"class":73},[67,94101,94102,94104,94106,94108,94110,94113],{"class":69,"line":11612},[67,94103,56995],{"class":73},[67,94105,2230],{"class":262},[67,94107,62818],{"class":110},[67,94109,85],{"class":73},[67,94111,94112],{"class":114},"\"http:\u002F\u002Fpip.itcast.cn\"",[67,94114,323],{"class":73},[67,94116,94117,94119,94121,94123,94125,94128,94130,94132,94134],{"class":69,"line":11617},[67,94118,57063],{"class":73},[67,94120,3317],{"class":262},[67,94122,57000],{"class":110},[67,94124,85],{"class":73},[67,94126,94127],{"class":114},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[67,94129,57008],{"class":110},[67,94131,85],{"class":73},[67,94133,9468],{"class":114},[67,94135,60888],{"class":73},[67,94137,94138,94140,94142],{"class":69,"line":11623},[67,94139,57168],{"class":73},[67,94141,2230],{"class":262},[67,94143,323],{"class":73},[67,94145,94146,94148,94150],{"class":69,"line":11644},[67,94147,53542],{"class":73},[67,94149,53377],{"class":262},[67,94151,323],{"class":73},[67,94153,94154,94156,94158,94160,94162,94165],{"class":69,"line":11650},[67,94155,53107],{"class":73},[67,94157,53377],{"class":262},[67,94159,55248],{"class":110},[67,94161,85],{"class":73},[67,94163,94164],{"class":114},"\"video\"",[67,94166,323],{"class":73},[67,94168,94169,94171,94173,94175,94177,94180,94183,94185,94187],{"class":69,"line":11664},[67,94170,56995],{"class":73},[67,94172,29969],{"class":262},[67,94174,57000],{"class":110},[67,94176,85],{"class":73},[67,94178,94179],{"class":114},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[67,94181,94182],{"class":110}," controls",[67,94184,57075],{"class":73},[67,94186,29969],{"class":262},[67,94188,323],{"class":73},[67,94190,94191,94193,94195],{"class":69,"line":11670},[67,94192,53542],{"class":73},[67,94194,53377],{"class":262},[67,94196,323],{"class":73},[67,94198,94199,94201,94203,94205,94207,94210],{"class":69,"line":11697},[67,94200,53107],{"class":73},[67,94202,53377],{"class":262},[67,94204,55248],{"class":110},[67,94206,85],{"class":73},[67,94208,94209],{"class":114},"\"elevator\"",[67,94211,323],{"class":73},[67,94213,94214,94216,94218,94220,94222,94224,94227,94229,94231,94234,94236],{"class":69,"line":11706},[67,94215,56995],{"class":73},[67,94217,2230],{"class":262},[67,94219,62818],{"class":110},[67,94221,85],{"class":73},[67,94223,65996],{"class":114},[67,94225,94226],{"class":110}," data-ref",[67,94228,85],{"class":73},[67,94230,94164],{"class":114},[67,94232,94233],{"class":73},">视频介绍\u003C\u002F",[67,94235,2230],{"class":262},[67,94237,323],{"class":73},[67,94239,94240,94242,94244,94246,94248,94250,94252,94254,94257,94260,94262],{"class":69,"line":11712},[67,94241,56995],{"class":73},[67,94243,2230],{"class":262},[67,94245,62818],{"class":110},[67,94247,85],{"class":73},[67,94249,65996],{"class":114},[67,94251,94226],{"class":110},[67,94253,85],{"class":73},[67,94255,94256],{"class":114},"\"intro\"",[67,94258,94259],{"class":73},">课程简介\u003C\u002F",[67,94261,2230],{"class":262},[67,94263,323],{"class":73},[67,94265,94266,94268,94270,94272,94274,94276,94278,94280,94283,94286,94288],{"class":69,"line":11720},[67,94267,56995],{"class":73},[67,94269,2230],{"class":262},[67,94271,62818],{"class":110},[67,94273,85],{"class":73},[67,94275,65996],{"class":114},[67,94277,94226],{"class":110},[67,94279,85],{"class":73},[67,94281,94282],{"class":114},"\"outline\"",[67,94284,94285],{"class":73},">评论列表\u003C\u002F",[67,94287,2230],{"class":262},[67,94289,323],{"class":73},[67,94291,94292,94294,94296],{"class":69,"line":11725},[67,94293,53542],{"class":73},[67,94295,53377],{"class":262},[67,94297,323],{"class":73},[67,94299,94300,94302,94304],{"class":69,"line":18401},[67,94301,54181],{"class":73},[67,94303,53377],{"class":262},[67,94305,323],{"class":73},[67,94307,94308,94310,94312,94314,94316,94319,94321,94323],{"class":69,"line":18407},[67,94309,328],{"class":73},[67,94311,53578],{"class":262},[67,94313,57000],{"class":110},[67,94315,85],{"class":73},[67,94317,94318],{"class":114},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[67,94320,57075],{"class":73},[67,94322,53578],{"class":262},[67,94324,323],{"class":73},[67,94326,94327,94329,94331],{"class":69,"line":18430},[67,94328,328],{"class":73},[67,94330,53578],{"class":262},[67,94332,323],{"class":73},[67,94334,94335],{"class":69,"line":18436},[67,94336,94337],{"class":2058},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[67,94339,94340,94342,94344,94346,94348,94350,94352,94355],{"class":69,"line":18459},[67,94341,13021],{"class":84},[67,94343,93814],{"class":77},[67,94345,671],{"class":84},[67,94347,56157],{"class":73},[67,94349,56160],{"class":110},[67,94351,854],{"class":73},[67,94353,94354],{"class":114},"'video'",[67,94356,829],{"class":73},[67,94358,94359],{"class":69,"line":18473},[67,94360,94361],{"class":2058},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[67,94363,94364,94367,94369,94371,94373,94376,94378],{"class":69,"line":18493},[67,94365,94366],{"class":73},"    video.ontimeupdate ",[67,94368,85],{"class":84},[67,94370,90114],{"class":73},[67,94372,92932],{"class":110},[67,94374,94375],{"class":73},"(() ",[67,94377,86481],{"class":84},[67,94379,17369],{"class":73},[67,94381,94382],{"class":69,"line":18499},[67,94383,94384],{"class":2058},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[67,94386,94387],{"class":69,"line":18510},[67,94388,94389],{"class":2058},"      \u002F\u002F 控制台输出当前的时间\n",[67,94391,94392,94395],{"class":69,"line":18533},[67,94393,94394],{"class":2058},"      \u002F\u002F console.log(video.currentTime)",[67,94396,94397],{"class":2058},"  \u002F\u002F获得当前的视频时间\n",[67,94399,94400],{"class":69,"line":18555},[67,94401,94402],{"class":2058},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[67,94404,94405,94407,94409,94411,94414],{"class":69,"line":18560},[67,94406,76443],{"class":73},[67,94408,73414],{"class":110},[67,94410,854],{"class":73},[67,94412,94413],{"class":114},"'currentTime'",[67,94415,94416],{"class":73},", video.currentTime)\n",[67,94418,94419,94421,94423],{"class":69,"line":18566},[67,94420,56296],{"class":73},[67,94422,8227],{"class":77},[67,94424,829],{"class":73},[67,94426,94427],{"class":69,"line":18580},[67,94428,94429],{"class":2058},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[67,94431,94432,94435,94438,94440,94443,94445],{"class":69,"line":18593},[67,94433,94434],{"class":73},"    video.",[67,94436,94437],{"class":110},"onloadeddata",[67,94439,671],{"class":84},[67,94441,94442],{"class":73}," () ",[67,94444,86481],{"class":84},[67,94446,17369],{"class":73},[67,94448,94449],{"class":69,"line":18598},[67,94450,61773],{"class":2058},[67,94452,94453],{"class":69,"line":18612},[67,94454,94455],{"class":2058},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[67,94457,94458,94461,94463,94466,94468,94470,94472,94474,94476],{"class":69,"line":18617},[67,94459,94460],{"class":73},"      video.currentTime ",[67,94462,85],{"class":84},[67,94464,94465],{"class":73}," localStorage.",[67,94467,73445],{"class":110},[67,94469,854],{"class":73},[67,94471,94413],{"class":114},[67,94473,15512],{"class":73},[67,94475,73117],{"class":84},[67,94477,49101],{"class":77},[67,94479,94480],{"class":69,"line":18623},[67,94481,4020],{"class":73},[67,94483,94484,94486,94488],{"class":69,"line":18628},[67,94485,54181],{"class":73},[67,94487,53578],{"class":262},[67,94489,323],{"class":73},[67,94491,94492,94494,94496],{"class":69,"line":18642},[67,94493,376],{"class":73},[67,94495,53565],{"class":262},[67,94497,323],{"class":73},[67,94499,94500],{"class":69,"line":18647},[67,94501,631],{"emptyLinePlaceholder":630},[67,94503,94504,94506,94508],{"class":69,"line":18652},[67,94505,376],{"class":73},[67,94507,52403],{"class":262},[67,94509,323],{"class":73},[1903,94511,94512],{},"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":63,"searchDepth":191,"depth":191,"links":94514},[94515,94520,94524,94525,94526,94531,94536,94537,94538,94539,94546,94551,94552,94562,94566,94567,94571],{"id":78451,"depth":191,"text":78452,"children":94516},[94517,94518,94519],{"id":78455,"depth":202,"text":78456},{"id":78480,"depth":202,"text":78481},{"id":78492,"depth":202,"text":78493},{"id":78504,"depth":191,"text":78505,"children":94521},[94522,94523],{"id":78508,"depth":202,"text":78509},{"id":78523,"depth":202,"text":78524},{"id":78575,"depth":191,"text":78576},{"id":78619,"depth":191,"text":78620},{"id":78636,"depth":191,"text":78637,"children":94527},[94528,94529,94530],{"id":78640,"depth":202,"text":78641},{"id":78653,"depth":202,"text":78654},{"id":78758,"depth":202,"text":78759},{"id":79047,"depth":191,"text":79048,"children":94532},[94533,94534,94535],{"id":79051,"depth":202,"text":79052},{"id":79494,"depth":202,"text":79495},{"id":79905,"depth":202,"text":79906},{"id":79968,"depth":191,"text":79969},{"id":80047,"depth":191,"text":80048},{"id":80140,"depth":191,"text":80141},{"id":81985,"depth":191,"text":81986,"children":94540},[94541,94542,94543,94544,94545],{"id":81989,"depth":202,"text":81990},{"id":82001,"depth":202,"text":82002},{"id":82220,"depth":202,"text":82221},{"id":82238,"depth":202,"text":82239},{"id":82298,"depth":202,"text":82299},{"id":86565,"depth":191,"text":86566,"children":94547},[94548,94549,94550],{"id":86569,"depth":202,"text":86570},{"id":86587,"depth":202,"text":86588},{"id":86613,"depth":202,"text":86614},{"id":86622,"depth":191,"text":86623},{"id":86644,"depth":191,"text":86645,"children":94553},[94554,94555,94556,94557,94558,94559,94560,94561],{"id":86648,"depth":202,"text":86649},{"id":86909,"depth":202,"text":86910},{"id":87095,"depth":202,"text":87096},{"id":87462,"depth":202,"text":87463},{"id":87578,"depth":202,"text":87579},{"id":87614,"depth":202,"text":87615},{"id":87661,"depth":202,"text":87662},{"id":87695,"depth":202,"text":87696},{"id":89058,"depth":191,"text":89059,"children":94563},[94564,94565],{"id":89062,"depth":202,"text":89063},{"id":89099,"depth":202,"text":89100},{"id":90454,"depth":191,"text":90455},{"id":90825,"depth":191,"text":90826,"children":94568},[94569,94570],{"id":90829,"depth":202,"text":90830},{"id":90863,"depth":202,"text":90864},{"id":91592,"depth":191,"text":91593,"children":94572},[94573,94574,94575,94576],{"id":91596,"depth":202,"text":91597},{"id":92554,"depth":202,"text":92555},{"id":93496,"depth":202,"text":93497},{"id":93570,"depth":202,"text":93571},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78440,"description":25173},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94583,"title":94584,"body":94585,"description":94596,"extension":1930,"meta":94597,"navigation":630,"path":94599,"seo":94600,"stem":94601,"__hash__":94602},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94586,"toc":94594},[94587],[19,94588,94589,94590],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2230,94591,94592],{"href":94592,"rel":94593},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25657],{"title":63,"searchDepth":191,"depth":191,"links":94595},[],"三件套第三套学习",{"category":94598},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94584,"description":94596},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94604,"title":94605,"body":94606,"description":25173,"extension":1930,"meta":94711,"navigation":630,"path":94712,"seo":94713,"stem":94714,"__hash__":94715},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94607,"toc":94706},[94608,94615,94618,94621,94624,94628,94637,94640,94643,94647,94656,94659,94663,94666,94686,94689,94703],[19,94609,94610],{},[2230,94611,94614],{"href":94612,"rel":94613},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25657],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94616,94605],{"id":94617},"_1安装",[19,94619,94620],{},"numpy是科学计算基础库,底层是C语言",[19,94622,94623],{},"三种方式：",[14,94625,94627],{"id":94626},"_11-通过pip安装","1.1 通过pip安装",[58,94629,94631],{"className":60,"code":94630,"language":62,"meta":63,"style":63},"pip install numpy\n",[32,94632,94633],{"__ignoreMap":63},[67,94634,94635],{"class":69,"line":70},[67,94636,94630],{"class":73},[19,94638,94639],{},"首选方式，自动处理依赖项",[19,94641,94642],{},"在提示系统命令符中使用cmd",[14,94644,94646],{"id":94645},"_12-通过anaconda安装","1.2 通过Anaconda安装",[58,94648,94650],{"className":60,"code":94649,"language":62,"meta":63,"style":63},"conda install numpy\n",[32,94651,94652],{"__ignoreMap":63},[67,94653,94654],{"class":69,"line":70},[67,94655,94649],{"class":73},[19,94657,94658],{},"自动解决环境依赖",[14,94660,94662],{"id":94661},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94664,94665],{},"对于Debian\u002FUbuntu",[58,94667,94669],{"className":60,"code":94668,"language":62,"meta":63,"style":63},"sudo apt-get install python3-numpy\n",[32,94670,94671],{"__ignoreMap":63},[67,94672,94673,94676,94678,94681,94683],{"class":69,"line":70},[67,94674,94675],{"class":73},"sudo apt",[67,94677,1863],{"class":84},[67,94679,94680],{"class":73},"get install python3",[67,94682,1863],{"class":84},[67,94684,94685],{"class":73},"numpy\n",[19,94687,94688],{},"对于Fedora:",[58,94690,94692],{"className":60,"code":94691,"language":62,"meta":63,"style":63},"sudo dnf install python3-numpy\n",[32,94693,94694],{"__ignoreMap":63},[67,94695,94696,94699,94701],{"class":69,"line":70},[67,94697,94698],{"class":73},"sudo dnf install python3",[67,94700,1863],{"class":84},[67,94702,94685],{"class":73},[1903,94704,94705],{},"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":63,"searchDepth":191,"depth":191,"links":94707},[94708,94709,94710],{"id":94626,"depth":191,"text":94627},{"id":94645,"depth":191,"text":94646},{"id":94661,"depth":191,"text":94662},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94605,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94717,"title":94718,"body":94719,"description":25173,"extension":1930,"meta":94832,"navigation":630,"path":94833,"seo":94834,"stem":94835,"__hash__":94836},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94720,"toc":94830},[94721,94724,94727,94730,94733,94736,94739,94742,94745,94748,94824,94827],[10,94722,94718],{"id":94723},"_10算数函数",[19,94725,94726],{},"加减乘除运算跟python基础语法没区别",[19,94728,94729],{},"除了python那种方法外还可以使用函数",[19,94731,94732],{},"加：np.add(a,b)",[19,94734,94735],{},"减：np.subtract(a,b)",[19,94737,94738],{},"乘：np.multiply(a,b)",[19,94740,94741],{},"除：np.divide(a,b) == a\u002Fb",[19,94743,94744],{},"取余：np.mod(a,b) == a%b",[19,94746,94747],{},"必须会的用法：",[58,94749,94751],{"className":60,"code":94750,"language":62,"meta":63,"style":63},"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",[32,94752,94753,94775,94796,94806,94819],{"__ignoreMap":63},[67,94754,94755,94757,94759,94762,94764,94767,94769,94771,94773],{"class":69,"line":70},[67,94756,2230],{"class":73},[67,94758,85],{"class":84},[67,94760,94761],{"class":73},"np.arange(",[67,94763,2411],{"class":77},[67,94765,94766],{"class":73},").reshape(",[67,94768,2071],{"class":77},[67,94770,2369],{"class":73},[67,94772,2071],{"class":77},[67,94774,829],{"class":73},[67,94776,94777,94779,94781,94784,94786,94788,94790,94792,94794],{"class":69,"line":191},[67,94778,2255],{"class":73},[67,94780,85],{"class":84},[67,94782,94783],{"class":73},"np.array([",[67,94785,2437],{"class":77},[67,94787,2369],{"class":73},[67,94789,2437],{"class":77},[67,94791,2369],{"class":73},[67,94793,2437],{"class":77},[67,94795,6476],{"class":73},[67,94797,94798,94801,94803],{"class":69,"line":202},[67,94799,94800],{"class":73},"result",[67,94802,85],{"class":84},[67,94804,94805],{"class":73},"np.empty_like(a)\n",[67,94807,94808,94811,94814,94816],{"class":69,"line":641},[67,94809,94810],{"class":73},"np.add(a,b,",[67,94812,94813],{"class":7033},"out",[67,94815,85],{"class":84},[67,94817,94818],{"class":73},"result)\n",[67,94820,94821],{"class":69,"line":655},[67,94822,94823],{"class":73},"result\n",[19,94825,94826],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1903,94828,94829],{},"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":63,"searchDepth":191,"depth":191,"links":94831},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94718,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94838,"title":94839,"body":94840,"description":25173,"extension":1930,"meta":95602,"navigation":630,"path":95603,"seo":95604,"stem":95605,"__hash__":95606},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94841,"toc":95589},[94842,94845,94848,94851,94855,94894,94898,94942,95002,95006,95009,95048,95051,95096,95100,95136,95140,95209,95213,95277,95281,95284,95287,95290,95293,95329,95333,95373,95377,95449,95452,95456,95519,95523,95586],[10,94843,94839],{"id":94844},"_11统计函数",[19,94846,94847],{},"sum max min mean",[19,94849,94850],{},"这些有axis参数，可以指定方向",[14,94852,94854],{"id":94853},"_111-sum求和函数","11.1 sum()求和函数",[58,94856,94858],{"className":60,"code":94857,"language":62,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[32,94859,94860,94865,94886],{"__ignoreMap":63},[67,94861,94862],{"class":69,"line":70},[67,94863,94864],{"class":2058},"#创建一维数组\n",[67,94866,94867,94869,94871,94874,94876,94878,94880,94882,94884],{"class":69,"line":191},[67,94868,2230],{"class":73},[67,94870,85],{"class":84},[67,94872,94873],{"class":73},"np.random.randint(",[67,94875,2209],{"class":77},[67,94877,2369],{"class":73},[67,94879,2302],{"class":77},[67,94881,2369],{"class":73},[67,94883,2689],{"class":77},[67,94885,829],{"class":73},[67,94887,94888,94891],{"class":69,"line":202},[67,94889,94890],{"class":73},"np.sum(a)",[67,94892,94893],{"class":2058},"#求和\n",[14,94895,94897],{"id":94896},"_112-max求最大值函数","11.2 max()求最大值函数",[58,94899,94901],{"className":60,"code":94900,"language":62,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[32,94902,94903,94907,94927,94932,94937],{"__ignoreMap":63},[67,94904,94905],{"class":69,"line":70},[67,94906,94864],{"class":2058},[67,94908,94909,94911,94913,94915,94917,94919,94921,94923,94925],{"class":69,"line":191},[67,94910,2230],{"class":73},[67,94912,85],{"class":84},[67,94914,94873],{"class":73},[67,94916,2209],{"class":77},[67,94918,2369],{"class":73},[67,94920,2302],{"class":77},[67,94922,2369],{"class":73},[67,94924,2689],{"class":77},[67,94926,829],{"class":73},[67,94928,94929],{"class":69,"line":202},[67,94930,94931],{"class":73},"np.max(a)\n",[67,94933,94934],{"class":69,"line":641},[67,94935,94936],{"class":2058},"#最大索引(求最大元素的索引)arg\n",[67,94938,94939],{"class":69,"line":655},[67,94940,94941],{"class":73},"np.argmax(a)\n",[58,94943,94945],{"className":60,"code":94944,"language":62,"meta":63,"style":63},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[32,94946,94947,94968,94988,94992],{"__ignoreMap":63},[67,94948,94949,94951,94953,94956,94958,94960,94962,94964,94966],{"class":69,"line":70},[67,94950,12719],{"class":73},[67,94952,85],{"class":84},[67,94954,94955],{"class":73}," np.array([",[67,94957,2209],{"class":77},[67,94959,1868],{"class":73},[67,94961,2310],{"class":77},[67,94963,1868],{"class":73},[67,94965,2071],{"class":77},[67,94967,6476],{"class":73},[67,94969,94970,94972,94974,94976,94978,94980,94982,94984,94986],{"class":69,"line":191},[67,94971,12745],{"class":73},[67,94973,85],{"class":84},[67,94975,94955],{"class":73},[67,94977,2071],{"class":77},[67,94979,1868],{"class":73},[67,94981,2077],{"class":77},[67,94983,1868],{"class":73},[67,94985,1047],{"class":77},[67,94987,6476],{"class":73},[67,94989,94990],{"class":69,"line":202},[67,94991,631],{"emptyLinePlaceholder":630},[67,94993,94994,94996,94999],{"class":69,"line":641},[67,94995,1626],{"class":77},[67,94997,94998],{"class":73},"(np.maximum(a, b))   ",[67,95000,95001],{"class":2058},"# [3 5 4]，每个位置上取较大值\n",[14,95003,95005],{"id":95004},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95007,95008],{},"①一维数组：",[58,95010,95012],{"className":60,"code":95011,"language":62,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[32,95013,95014,95018,95038,95043],{"__ignoreMap":63},[67,95015,95016],{"class":69,"line":70},[67,95017,94864],{"class":2058},[67,95019,95020,95022,95024,95026,95028,95030,95032,95034,95036],{"class":69,"line":191},[67,95021,2230],{"class":73},[67,95023,85],{"class":84},[67,95025,94873],{"class":73},[67,95027,2209],{"class":77},[67,95029,2369],{"class":73},[67,95031,2302],{"class":77},[67,95033,2369],{"class":73},[67,95035,2689],{"class":77},[67,95037,829],{"class":73},[67,95039,95040],{"class":69,"line":202},[67,95041,95042],{"class":2058},"#求平均值\n",[67,95044,95045],{"class":69,"line":641},[67,95046,95047],{"class":73},"np.mean(a)\n",[19,95049,95050],{},"②二维数组",[58,95052,95054],{"className":60,"code":95053,"language":62,"meta":63,"style":63},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[32,95055,95056,95061,95086,95091],{"__ignoreMap":63},[67,95057,95058],{"class":69,"line":70},[67,95059,95060],{"class":2058},"#二维数组\n",[67,95062,95063,95066,95068,95070,95072,95074,95076,95078,95080,95082,95084],{"class":69,"line":191},[67,95064,95065],{"class":73},"aa",[67,95067,85],{"class":84},[67,95069,94761],{"class":73},[67,95071,2209],{"class":77},[67,95073,2369],{"class":73},[67,95075,2513],{"class":77},[67,95077,94766],{"class":73},[67,95079,2071],{"class":77},[67,95081,2369],{"class":73},[67,95083,1047],{"class":77},[67,95085,829],{"class":73},[67,95087,95088],{"class":69,"line":202},[67,95089,95090],{"class":2058},"#对数组中的所有数求平均\n",[67,95092,95093],{"class":69,"line":641},[67,95094,95095],{"class":73},"np.mean(aa)\n",[14,95097,95099],{"id":95098},"_114-median求中位数函数","11.4 median()求中位数函数",[58,95101,95103],{"className":60,"code":95102,"language":62,"meta":63,"style":63},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[32,95104,95105,95110,95126,95131],{"__ignoreMap":63},[67,95106,95107],{"class":69,"line":70},[67,95108,95109],{"class":2058},"#求中位数\n",[67,95111,95112,95114,95116,95118,95120,95122,95124],{"class":69,"line":191},[67,95113,2255],{"class":73},[67,95115,85],{"class":84},[67,95117,94761],{"class":73},[67,95119,2209],{"class":77},[67,95121,2369],{"class":73},[67,95123,2437],{"class":77},[67,95125,829],{"class":73},[67,95127,95128],{"class":69,"line":202},[67,95129,95130],{"class":73},"np.median(b)\n",[67,95132,95133],{"class":69,"line":641},[67,95134,95135],{"class":2058},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95137,95139],{"id":95138},"_115-power求幂运算函数","11.5 power()求幂运算函数",[58,95141,95143],{"className":60,"code":95142,"language":62,"meta":63,"style":63},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[32,95144,95145,95161,95166,95171,95180,95185,95194],{"__ignoreMap":63},[67,95146,95147,95149,95151,95153,95155,95157,95159],{"class":69,"line":70},[67,95148,2255],{"class":73},[67,95150,85],{"class":84},[67,95152,94761],{"class":73},[67,95154,2209],{"class":77},[67,95156,2369],{"class":73},[67,95158,2437],{"class":77},[67,95160,829],{"class":73},[67,95162,95163],{"class":69,"line":191},[67,95164,95165],{"class":2058},"#幂运算\n",[67,95167,95168],{"class":69,"line":202},[67,95169,95170],{"class":2058},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[67,95172,95173,95176,95178],{"class":69,"line":641},[67,95174,95175],{"class":73},"np.power(b,",[67,95177,2077],{"class":77},[67,95179,829],{"class":73},[67,95181,95182],{"class":69,"line":655},[67,95183,95184],{"class":2058},"#或者以下代码，将数据存储起来\n",[67,95186,95187,95189,95191],{"class":69,"line":660},[67,95188,2834],{"class":73},[67,95190,85],{"class":84},[67,95192,95193],{"class":73},"np.empty_like(b)\n",[67,95195,95196,95198,95200,95202,95204,95206],{"class":69,"line":665},[67,95197,95175],{"class":73},[67,95199,2077],{"class":77},[67,95201,2369],{"class":73},[67,95203,94813],{"class":7033},[67,95205,85],{"class":84},[67,95207,95208],{"class":73},"y)\n",[14,95210,95212],{"id":95211},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[58,95214,95216],{"className":60,"code":95215,"language":62,"meta":63,"style":63},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[32,95217,95218,95234,95239,95244,95248,95266],{"__ignoreMap":63},[67,95219,95220,95222,95224,95226,95228,95230,95232],{"class":69,"line":70},[67,95221,2255],{"class":73},[67,95223,85],{"class":84},[67,95225,94761],{"class":73},[67,95227,2209],{"class":77},[67,95229,2369],{"class":73},[67,95231,2437],{"class":77},[67,95233,829],{"class":73},[67,95235,95236],{"class":69,"line":191},[67,95237,95238],{"class":2058},"#开方\n",[67,95240,95241],{"class":69,"line":202},[67,95242,95243],{"class":73},"np.sqrt(b)\n",[67,95245,95246],{"class":69,"line":641},[67,95247,95184],{"class":2058},[67,95249,95250,95252,95254,95257,95260,95262,95264],{"class":69,"line":655},[67,95251,2834],{"class":73},[67,95253,85],{"class":84},[67,95255,95256],{"class":73},"np.empty_like(b,",[67,95258,95259],{"class":7033},"dtype",[67,95261,85],{"class":84},[67,95263,2041],{"class":77},[67,95265,829],{"class":73},[67,95267,95268,95271,95273,95275],{"class":69,"line":660},[67,95269,95270],{"class":73},"np.sqrt(b,",[67,95272,94813],{"class":7033},[67,95274,85],{"class":84},[67,95276,95208],{"class":73},[14,95278,95280],{"id":95279},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95282,95283],{},"对数组中的元素累计求和，可指定轴",[19,95285,95286],{},"#累计求和的意思是：",[19,95288,95289],{},"a = np.array([1, 2, 3, 4])",[19,95291,95292],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[58,95294,95296],{"className":60,"code":95295,"language":62,"meta":63,"style":63},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[32,95297,95298,95314,95319,95324],{"__ignoreMap":63},[67,95299,95300,95302,95304,95306,95308,95310,95312],{"class":69,"line":70},[67,95301,2255],{"class":73},[67,95303,85],{"class":84},[67,95305,94761],{"class":73},[67,95307,2209],{"class":77},[67,95309,2369],{"class":73},[67,95311,2437],{"class":77},[67,95313,829],{"class":73},[67,95315,95316],{"class":69,"line":191},[67,95317,95318],{"class":73},"np.cumsum(b)\n",[67,95320,95321],{"class":69,"line":202},[67,95322,95323],{"class":2058},"#结果：\n",[67,95325,95326],{"class":69,"line":641},[67,95327,95328],{"class":2058},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95330,95332],{"id":95331},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[58,95334,95336],{"className":60,"code":95335,"language":62,"meta":63,"style":63},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[32,95337,95338,95354,95359,95364,95368],{"__ignoreMap":63},[67,95339,95340,95342,95344,95346,95348,95350,95352],{"class":69,"line":70},[67,95341,2255],{"class":73},[67,95343,85],{"class":84},[67,95345,94761],{"class":73},[67,95347,2209],{"class":77},[67,95349,2369],{"class":73},[67,95351,2437],{"class":77},[67,95353,829],{"class":73},[67,95355,95356],{"class":69,"line":191},[67,95357,95358],{"class":2058},"#对数组中的元素累计求积，可指定轴\n",[67,95360,95361],{"class":69,"line":202},[67,95362,95363],{"class":73},"np.cumprod(b)\n",[67,95365,95366],{"class":69,"line":641},[67,95367,95323],{"class":2058},[67,95369,95370],{"class":69,"line":655},[67,95371,95372],{"class":2058},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95374,95376],{"id":95375},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[58,95378,95380],{"className":60,"code":95379,"language":62,"meta":63,"style":63},"#删除数组中的重复数据，并对数据进行排序\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",[32,95381,95382,95387,95435,95440,95444],{"__ignoreMap":63},[67,95383,95384],{"class":69,"line":70},[67,95385,95386],{"class":2058},"#删除数组中的重复数据，并对数据进行排序\n",[67,95388,95389,95391,95393,95395,95397,95399,95401,95403,95405,95407,95409,95411,95413,95415,95417,95419,95421,95423,95425,95427,95429,95431,95433],{"class":69,"line":191},[67,95390,2230],{"class":73},[67,95392,85],{"class":84},[67,95394,94783],{"class":73},[67,95396,2209],{"class":77},[67,95398,2369],{"class":73},[67,95400,2077],{"class":77},[67,95402,2369],{"class":73},[67,95404,2071],{"class":77},[67,95406,2369],{"class":73},[67,95408,2488],{"class":77},[67,95410,2369],{"class":73},[67,95412,2071],{"class":77},[67,95414,2369],{"class":73},[67,95416,2437],{"class":77},[67,95418,2369],{"class":73},[67,95420,2189],{"class":77},[67,95422,2369],{"class":73},[67,95424,78],{"class":77},[67,95426,2369],{"class":73},[67,95428,2764],{"class":77},[67,95430,2369],{"class":73},[67,95432,1047],{"class":77},[67,95434,6476],{"class":73},[67,95436,95437],{"class":69,"line":202},[67,95438,95439],{"class":73},"np.unique(a)\n",[67,95441,95442],{"class":69,"line":641},[67,95443,95323],{"class":2058},[67,95445,95446],{"class":69,"line":655},[67,95447,95448],{"class":2058},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95450,95451],{},"升序形式排序",[14,95453,95455],{"id":95454},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[58,95457,95459],{"className":60,"code":95458,"language":62,"meta":63,"style":63},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[32,95460,95461,95509,95514],{"__ignoreMap":63},[67,95462,95463,95465,95467,95469,95471,95473,95475,95477,95479,95481,95483,95485,95487,95489,95491,95493,95495,95497,95499,95501,95503,95505,95507],{"class":69,"line":70},[67,95464,2230],{"class":73},[67,95466,85],{"class":84},[67,95468,94783],{"class":73},[67,95470,2209],{"class":77},[67,95472,2369],{"class":73},[67,95474,2077],{"class":77},[67,95476,2369],{"class":73},[67,95478,2071],{"class":77},[67,95480,2369],{"class":73},[67,95482,2488],{"class":77},[67,95484,2369],{"class":73},[67,95486,2071],{"class":77},[67,95488,2369],{"class":73},[67,95490,2437],{"class":77},[67,95492,2369],{"class":73},[67,95494,2189],{"class":77},[67,95496,2369],{"class":73},[67,95498,78],{"class":77},[67,95500,2369],{"class":73},[67,95502,2764],{"class":77},[67,95504,2369],{"class":73},[67,95506,1047],{"class":77},[67,95508,6476],{"class":73},[67,95510,95511],{"class":69,"line":191},[67,95512,95513],{"class":2058},"#返回数组中非零元素的索引\n",[67,95515,95516],{"class":69,"line":202},[67,95517,95518],{"class":73},"np.nonzero(a)\n",[14,95520,95522],{"id":95521},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[58,95524,95526],{"className":60,"code":95525,"language":62,"meta":63,"style":63},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[32,95527,95528,95576,95581],{"__ignoreMap":63},[67,95529,95530,95532,95534,95536,95538,95540,95542,95544,95546,95548,95550,95552,95554,95556,95558,95560,95562,95564,95566,95568,95570,95572,95574],{"class":69,"line":70},[67,95531,2230],{"class":73},[67,95533,85],{"class":84},[67,95535,94783],{"class":73},[67,95537,2209],{"class":77},[67,95539,2369],{"class":73},[67,95541,2077],{"class":77},[67,95543,2369],{"class":73},[67,95545,2071],{"class":77},[67,95547,2369],{"class":73},[67,95549,2488],{"class":77},[67,95551,2369],{"class":73},[67,95553,2071],{"class":77},[67,95555,2369],{"class":73},[67,95557,2437],{"class":77},[67,95559,2369],{"class":73},[67,95561,2189],{"class":77},[67,95563,2369],{"class":73},[67,95565,78],{"class":77},[67,95567,2369],{"class":73},[67,95569,2764],{"class":77},[67,95571,2369],{"class":73},[67,95573,1047],{"class":77},[67,95575,6476],{"class":73},[67,95577,95578],{"class":69,"line":191},[67,95579,95580],{"class":2058},"#计算一组数中最大值与最小值的差，可指定轴\n",[67,95582,95583],{"class":69,"line":202},[67,95584,95585],{"class":73},"np.ptp(a)\n",[1903,95587,95588],{},"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":63,"searchDepth":191,"depth":191,"links":95590},[95591,95592,95593,95594,95595,95596,95597,95598,95599,95600,95601],{"id":94853,"depth":191,"text":94854},{"id":94896,"depth":191,"text":94897},{"id":95004,"depth":191,"text":95005},{"id":95098,"depth":191,"text":95099},{"id":95138,"depth":191,"text":95139},{"id":95211,"depth":191,"text":95212},{"id":95279,"depth":191,"text":95280},{"id":95331,"depth":191,"text":95332},{"id":95375,"depth":191,"text":95376},{"id":95454,"depth":191,"text":95455},{"id":95521,"depth":191,"text":95522},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94839,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95608,"title":95609,"body":95610,"description":25173,"extension":1930,"meta":96265,"navigation":630,"path":96266,"seo":96267,"stem":96268,"__hash__":96269},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95611,"toc":96253},[95612,95615,95619,95622,95838,95842,95845,96054,96058,96124,96129,96133,96136,96139,96177,96181,96184,96189,96193,96196,96199,96204,96208,96211,96215,96218,96221,96226,96230,96233,96236,96241,96245,96250],[10,95613,95609],{"id":95614},"_12其他常用函数",[14,95616,95618],{"id":95617},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95620,95621],{},"将数组的数据按照行列复制扩展",[58,95623,95625],{"className":60,"code":95624,"language":62,"meta":63,"style":63},"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",[32,95626,95627,95643,95652,95656,95661,95666,95679,95683,95688,95693,95698,95702,95707,95731,95743,95747,95751,95756,95761,95766,95771,95775,95788,95792,95796,95801,95806,95811,95816,95821,95825,95829,95834],{"__ignoreMap":63},[67,95628,95629,95631,95633,95635,95637,95639,95641],{"class":69,"line":70},[67,95630,2230],{"class":73},[67,95632,85],{"class":84},[67,95634,94761],{"class":73},[67,95636,2209],{"class":77},[67,95638,2369],{"class":73},[67,95640,2310],{"class":77},[67,95642,829],{"class":73},[67,95644,95645,95648,95650],{"class":69,"line":191},[67,95646,95647],{"class":73},"np.tile(a,",[67,95649,2077],{"class":77},[67,95651,829],{"class":73},[67,95653,95654],{"class":69,"line":202},[67,95655,95323],{"class":2058},[67,95657,95658],{"class":69,"line":641},[67,95659,95660],{"class":2058},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[67,95662,95663],{"class":69,"line":655},[67,95664,95665],{"class":2058},"#行复制两次，列复制三次\n",[67,95667,95668,95671,95673,95675,95677],{"class":69,"line":660},[67,95669,95670],{"class":73},"np.tile(a,(",[67,95672,2077],{"class":77},[67,95674,2369],{"class":73},[67,95676,2071],{"class":77},[67,95678,1050],{"class":73},[67,95680,95681],{"class":69,"line":665},[67,95682,95323],{"class":2058},[67,95684,95685],{"class":69,"line":677},[67,95686,95687],{"class":114},"'''\n",[67,95689,95690],{"class":69,"line":683},[67,95691,95692],{"class":114},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[67,95694,95695],{"class":69,"line":689},[67,95696,95697],{"class":114},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[67,95699,95700],{"class":69,"line":694},[67,95701,95687],{"class":114},[67,95703,95704],{"class":69,"line":700},[67,95705,95706],{"class":2058},"#创建二维数组\n",[67,95708,95709,95711,95713,95715,95717,95719,95721,95723,95725,95727,95729],{"class":69,"line":706},[67,95710,95065],{"class":73},[67,95712,85],{"class":84},[67,95714,94761],{"class":73},[67,95716,2209],{"class":77},[67,95718,2369],{"class":73},[67,95720,2513],{"class":77},[67,95722,94766],{"class":73},[67,95724,1047],{"class":77},[67,95726,2369],{"class":73},[67,95728,2071],{"class":77},[67,95730,829],{"class":73},[67,95732,95733,95736,95738,95740],{"class":69,"line":712},[67,95734,95735],{"class":73},"np.tile(aa,",[67,95737,2077],{"class":77},[67,95739,2420],{"class":73},[67,95741,95742],{"class":2058},"#一个数的时候就是行\n",[67,95744,95745],{"class":69,"line":717},[67,95746,95323],{"class":2058},[67,95748,95749],{"class":69,"line":723},[67,95750,95687],{"class":114},[67,95752,95753],{"class":69,"line":729},[67,95754,95755],{"class":114},"array([[ 1,  2,  3,  1,  2,  3],\n",[67,95757,95758],{"class":69,"line":735},[67,95759,95760],{"class":114},"       [ 4,  5,  6,  4,  5,  6],\n",[67,95762,95763],{"class":69,"line":741},[67,95764,95765],{"class":114},"       [ 7,  8,  9,  7,  8,  9],\n",[67,95767,95768],{"class":69,"line":747},[67,95769,95770],{"class":114},"       [10, 11, 12, 10, 11, 12]])\n",[67,95772,95773],{"class":69,"line":753},[67,95774,95687],{"class":114},[67,95776,95777,95780,95782,95784,95786],{"class":69,"line":758},[67,95778,95779],{"class":73},"np.tile(aa,(",[67,95781,2077],{"class":77},[67,95783,2369],{"class":73},[67,95785,2071],{"class":77},[67,95787,1050],{"class":73},[67,95789,95790],{"class":69,"line":764},[67,95791,95323],{"class":2058},[67,95793,95794],{"class":69,"line":770},[67,95795,95687],{"class":114},[67,95797,95798],{"class":69,"line":776},[67,95799,95800],{"class":114},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[67,95802,95803],{"class":69,"line":782},[67,95804,95805],{"class":114},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[67,95807,95808],{"class":69,"line":788},[67,95809,95810],{"class":114},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[67,95812,95813],{"class":69,"line":793},[67,95814,95815],{"class":114},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[67,95817,95818],{"class":69,"line":798},[67,95819,95820],{"class":114},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[67,95822,95823],{"class":69,"line":816},[67,95824,95805],{"class":114},[67,95826,95827],{"class":69,"line":832},[67,95828,95810],{"class":114},[67,95830,95831],{"class":69,"line":843},[67,95832,95833],{"class":114},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[67,95835,95836],{"class":69,"line":848},[67,95837,95687],{"class":114},[14,95839,95841],{"id":95840},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95843,95844],{},"repeat()将数组中的每个元素重复若干次",[58,95846,95848],{"className":60,"code":95847,"language":62,"meta":63,"style":63},"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",[32,95849,95850,95866,95875,95879,95884,95908,95913,95922,95926,95931,95935,95940,95956,95960,95964,95969,95974,95979,95983,95988,95992,95997,96002,96006,96022,96026,96030,96035,96040,96045,96050],{"__ignoreMap":63},[67,95851,95852,95854,95856,95858,95860,95862,95864],{"class":69,"line":70},[67,95853,2230],{"class":73},[67,95855,85],{"class":84},[67,95857,94761],{"class":73},[67,95859,2209],{"class":77},[67,95861,2369],{"class":73},[67,95863,2310],{"class":77},[67,95865,829],{"class":73},[67,95867,95868,95871,95873],{"class":69,"line":191},[67,95869,95870],{"class":73},"np.repeat(a,",[67,95872,2071],{"class":77},[67,95874,829],{"class":73},[67,95876,95877],{"class":69,"line":202},[67,95878,95323],{"class":2058},[67,95880,95881],{"class":69,"line":641},[67,95882,95883],{"class":2058},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[67,95885,95886,95888,95890,95892,95894,95896,95898,95900,95902,95904,95906],{"class":69,"line":655},[67,95887,95065],{"class":73},[67,95889,85],{"class":84},[67,95891,94761],{"class":73},[67,95893,2209],{"class":77},[67,95895,2369],{"class":73},[67,95897,2513],{"class":77},[67,95899,94766],{"class":73},[67,95901,1047],{"class":77},[67,95903,2369],{"class":73},[67,95905,2071],{"class":77},[67,95907,829],{"class":73},[67,95909,95910],{"class":69,"line":660},[67,95911,95912],{"class":2058},"#这个重复之后二维变成一维\n",[67,95914,95915,95918,95920],{"class":69,"line":665},[67,95916,95917],{"class":73},"np.repeat(aa,",[67,95919,2077],{"class":77},[67,95921,829],{"class":73},[67,95923,95924],{"class":69,"line":677},[67,95925,95687],{"class":114},[67,95927,95928],{"class":69,"line":683},[67,95929,95930],{"class":114},"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",[67,95932,95933],{"class":69,"line":689},[67,95934,95687],{"class":114},[67,95936,95937],{"class":69,"line":694},[67,95938,95939],{"class":2058},"#指定axis\n",[67,95941,95942,95944,95946,95948,95950,95952,95954],{"class":69,"line":700},[67,95943,95917],{"class":73},[67,95945,2077],{"class":77},[67,95947,2369],{"class":73},[67,95949,49282],{"class":7033},[67,95951,85],{"class":84},[67,95953,78],{"class":77},[67,95955,829],{"class":73},[67,95957,95958],{"class":69,"line":706},[67,95959,95323],{"class":2058},[67,95961,95962],{"class":69,"line":712},[67,95963,95687],{"class":114},[67,95965,95966],{"class":69,"line":717},[67,95967,95968],{"class":114},"array([[ 1,  2,  3],\n",[67,95970,95971],{"class":69,"line":723},[67,95972,95973],{"class":114},"       [ 1,  2,  3],\n",[67,95975,95976],{"class":69,"line":729},[67,95977,95978],{"class":114},"       [ 4,  5,  6],\n",[67,95980,95981],{"class":69,"line":735},[67,95982,95978],{"class":114},[67,95984,95985],{"class":69,"line":741},[67,95986,95987],{"class":114},"       [ 7,  8,  9],\n",[67,95989,95990],{"class":69,"line":747},[67,95991,95987],{"class":114},[67,95993,95994],{"class":69,"line":753},[67,95995,95996],{"class":114},"       [10, 11, 12],\n",[67,95998,95999],{"class":69,"line":758},[67,96000,96001],{"class":114},"       [10, 11, 12]])\n",[67,96003,96004],{"class":69,"line":764},[67,96005,95687],{"class":114},[67,96007,96008,96010,96012,96014,96016,96018,96020],{"class":69,"line":770},[67,96009,95917],{"class":73},[67,96011,2077],{"class":77},[67,96013,2369],{"class":73},[67,96015,49282],{"class":7033},[67,96017,85],{"class":84},[67,96019,2209],{"class":77},[67,96021,829],{"class":73},[67,96023,96024],{"class":69,"line":776},[67,96025,95323],{"class":2058},[67,96027,96028],{"class":69,"line":782},[67,96029,95687],{"class":114},[67,96031,96032],{"class":69,"line":788},[67,96033,96034],{"class":114},"array([[ 1,  1,  2,  2,  3,  3],\n",[67,96036,96037],{"class":69,"line":793},[67,96038,96039],{"class":114},"       [ 4,  4,  5,  5,  6,  6],\n",[67,96041,96042],{"class":69,"line":798},[67,96043,96044],{"class":114},"       [ 7,  7,  8,  8,  9,  9],\n",[67,96046,96047],{"class":69,"line":816},[67,96048,96049],{"class":114},"       [10, 10, 11, 11, 12, 12]])\n",[67,96051,96052],{"class":69,"line":832},[67,96053,95687],{"class":114},[14,96055,96057],{"id":96056},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[58,96059,96061],{"className":60,"code":96060,"language":62,"meta":63,"style":63},"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",[32,96062,96063,96079,96084,96096,96100,96105,96115,96119],{"__ignoreMap":63},[67,96064,96065,96067,96069,96071,96073,96075,96077],{"class":69,"line":70},[67,96066,2230],{"class":73},[67,96068,85],{"class":84},[67,96070,94761],{"class":73},[67,96072,2209],{"class":77},[67,96074,2369],{"class":73},[67,96076,2310],{"class":77},[67,96078,829],{"class":73},[67,96080,96081],{"class":69,"line":191},[67,96082,96083],{"class":2058},"#array([，2，3，4])\n",[67,96085,96086,96089,96091,96093],{"class":69,"line":202},[67,96087,96088],{"class":73},"np.roll(a,",[67,96090,2077],{"class":77},[67,96092,2420],{"class":73},[67,96094,96095],{"class":2058},"#传正数向后调多少位，传负数向前调多少位\n",[67,96097,96098],{"class":69,"line":641},[67,96099,95323],{"class":2058},[67,96101,96102],{"class":69,"line":655},[67,96103,96104],{"class":2058},"#array([3, 4, 1, 2])\n",[67,96106,96107,96109,96111,96113],{"class":69,"line":660},[67,96108,96088],{"class":73},[67,96110,1863],{"class":84},[67,96112,2209],{"class":77},[67,96114,829],{"class":73},[67,96116,96117],{"class":69,"line":665},[67,96118,95323],{"class":2058},[67,96120,96121],{"class":69,"line":677},[67,96122,96123],{"class":2058},"#array([2, 3, 4, 1])\n",[19,96125,96126],{},[3317,96127],{"alt":63,"src":96128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96130,96132],{"id":96131},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96134,96135],{},"resize()重新调整数组的大小",[19,96137,96138],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[58,96140,96142],{"className":60,"code":96141,"language":62,"meta":63,"style":63},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[32,96143,96144,96149,96162],{"__ignoreMap":63},[67,96145,96146],{"class":69,"line":70},[67,96147,96148],{"class":2058},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[67,96150,96151,96154,96156,96158,96160],{"class":69,"line":191},[67,96152,96153],{"class":73},"np.resize(aa,(",[67,96155,2077],{"class":77},[67,96157,2369],{"class":73},[67,96159,2335],{"class":77},[67,96161,1050],{"class":73},[67,96163,96164,96166,96168,96170,96172,96174],{"class":69,"line":202},[67,96165,96153],{"class":73},[67,96167,2077],{"class":77},[67,96169,2369],{"class":73},[67,96171,2411],{"class":77},[67,96173,84530],{"class":73},[67,96175,96176],{"class":2058},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96178,96180],{"id":96179},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96182,96183],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96185,96186],{},[3317,96187],{"alt":63,"src":96188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96190,96192],{"id":96191},"_126-保存加载文件","12.6 保存加载文件",[19,96194,96195],{},"savetxt():将数据保存到txt文件中",[19,96197,96198],{},"loadtxt():从文件加载数据",[19,96200,96201],{},[3317,96202],{"alt":63,"src":96203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96205,96207],{"id":96206},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96209,96210],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96212,96214],{"id":96213},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96216,96217],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96219,96220],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96222,96223],{},[3317,96224],{"alt":63,"src":96225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96227,96229],{"id":96228},"_129-where语句","12.9 where语句",[19,96231,96232],{},"np.where(条件,x,y)",[19,96234,96235],{},"如果条件为True,对应值为x,否则对应值为y",[19,96237,96238],{},[3317,96239],{"alt":63,"src":96240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96242,96244],{"id":96243},"_1210-dot矩阵","12.10 dot()矩阵",[19,96246,96247],{},[3317,96248],{"alt":63,"src":96249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1903,96251,96252],{},"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":63,"searchDepth":191,"depth":191,"links":96254},[96255,96256,96257,96258,96259,96260,96261,96262,96263,96264],{"id":95617,"depth":191,"text":95618},{"id":95840,"depth":191,"text":95841},{"id":96056,"depth":191,"text":96057},{"id":96131,"depth":191,"text":96132},{"id":96179,"depth":191,"text":96180},{"id":96191,"depth":191,"text":96192},{"id":96206,"depth":191,"text":96207},{"id":96213,"depth":191,"text":96214},{"id":96228,"depth":191,"text":96229},{"id":96243,"depth":191,"text":96244},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95609,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96271,"title":96272,"body":96273,"description":25173,"extension":1930,"meta":96626,"navigation":630,"path":96627,"seo":96628,"stem":96629,"__hash__":96630},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96274,"toc":96624},[96275,96278,96281,96284,96287,96290,96355,96357,96621],[10,96276,96272],{"id":96277},"_13数组排序",[19,96279,96280],{},"排序主要用到的方法是np.sort和np.argsort",[19,96282,96283],{},"其中np.sort()对数组直接排序",[19,96285,96286],{},"而np.argsort()是返回排序后的原始索引",[19,96288,96289],{},"①一维数组",[58,96291,96293],{"className":60,"code":96292,"language":62,"meta":63,"style":63},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[32,96294,96295,96299,96339,96347],{"__ignoreMap":63},[67,96296,96297],{"class":69,"line":70},[67,96298,94864],{"class":2058},[67,96300,96301,96303,96305,96307,96309,96311,96313,96315,96317,96319,96321,96323,96325,96327,96329,96331,96333,96335,96337],{"class":69,"line":191},[67,96302,2230],{"class":73},[67,96304,85],{"class":84},[67,96306,94783],{"class":73},[67,96308,2071],{"class":77},[67,96310,2369],{"class":73},[67,96312,2488],{"class":77},[67,96314,2369],{"class":73},[67,96316,2386],{"class":77},[67,96318,2369],{"class":73},[67,96320,2764],{"class":77},[67,96322,2369],{"class":73},[67,96324,2271],{"class":77},[67,96326,2369],{"class":73},[67,96328,2882],{"class":77},[67,96330,2369],{"class":73},[67,96332,2335],{"class":77},[67,96334,2369],{"class":73},[67,96336,2437],{"class":77},[67,96338,6476],{"class":73},[67,96340,96341,96344],{"class":69,"line":202},[67,96342,96343],{"class":73},"np.sort(a)",[67,96345,96346],{"class":2058},"#升序排序\n",[67,96348,96349,96352],{"class":69,"line":641},[67,96350,96351],{"class":73},"np.argsort(a)",[67,96353,96354],{"class":2058},"#按照元素大小来索引排序\n",[19,96356,95050],{},[58,96358,96360],{"className":60,"code":96359,"language":62,"meta":63,"style":63},"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",[32,96361,96362,96374,96400,96405,96409,96414,96419,96424,96429,96433,96441,96445,96450,96455,96460,96465,96469,96474,96487,96491,96496,96501,96506,96511,96515,96520,96532,96536,96540,96544,96548,96552,96556,96561,96576,96581,96590,96595,96599,96603,96608,96612,96617],{"__ignoreMap":63},[67,96363,96364,96367,96369,96371],{"class":69,"line":70},[67,96365,96366],{"class":73},"np.random.seed(",[67,96368,78],{"class":77},[67,96370,2420],{"class":73},[67,96372,96373],{"class":2058},"#保证每次值一样\n",[67,96375,96376,96378,96380,96382,96384,96386,96388,96390,96392,96394,96396,96398],{"class":69,"line":191},[67,96377,95065],{"class":73},[67,96379,85],{"class":84},[67,96381,94873],{"class":73},[67,96383,2302],{"class":77},[67,96385,2369],{"class":73},[67,96387,33268],{"class":7033},[67,96389,85],{"class":84},[67,96391,854],{"class":73},[67,96393,1047],{"class":77},[67,96395,2369],{"class":73},[67,96397,2335],{"class":77},[67,96399,1050],{"class":73},[67,96401,96402],{"class":69,"line":202},[67,96403,96404],{"class":2058},"#原数组：\n",[67,96406,96407],{"class":69,"line":641},[67,96408,95687],{"class":114},[67,96410,96411],{"class":69,"line":655},[67,96412,96413],{"class":114},"array([[44, 47, 64, 67, 67,  9],\n",[67,96415,96416],{"class":69,"line":660},[67,96417,96418],{"class":114},"       [83, 21, 36, 87, 70, 88],\n",[67,96420,96421],{"class":69,"line":665},[67,96422,96423],{"class":114},"       [88, 12, 58, 65, 39, 87],\n",[67,96425,96426],{"class":69,"line":677},[67,96427,96428],{"class":114},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[67,96430,96431],{"class":69,"line":683},[67,96432,95687],{"class":114},[67,96434,96435,96438],{"class":69,"line":689},[67,96436,96437],{"class":73},"np.sort(aa)",[67,96439,96440],{"class":2058},"#每行进行了排序\n",[67,96442,96443],{"class":69,"line":694},[67,96444,95687],{"class":114},[67,96446,96447],{"class":69,"line":700},[67,96448,96449],{"class":114},"array([[ 9, 44, 47, 64, 67, 67],\n",[67,96451,96452],{"class":69,"line":706},[67,96453,96454],{"class":114},"       [21, 36, 70, 83, 87, 88],\n",[67,96456,96457],{"class":69,"line":712},[67,96458,96459],{"class":114},"       [12, 39, 58, 65, 87, 88],\n",[67,96461,96462],{"class":69,"line":717},[67,96463,96464],{"class":114},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[67,96466,96467],{"class":69,"line":723},[67,96468,95687],{"class":114},[67,96470,96471],{"class":69,"line":729},[67,96472,96473],{"class":2058},"#axis=0时\n",[67,96475,96476,96479,96481,96483,96485],{"class":69,"line":735},[67,96477,96478],{"class":73},"np.sort(aa,",[67,96480,49282],{"class":7033},[67,96482,85],{"class":84},[67,96484,78],{"class":77},[67,96486,829],{"class":73},[67,96488,96489],{"class":69,"line":741},[67,96490,95687],{"class":114},[67,96492,96493],{"class":69,"line":747},[67,96494,96495],{"class":114},"array([[44, 12, 36, 37, 25,  9],\n",[67,96497,96498],{"class":69,"line":753},[67,96499,96500],{"class":114},"       [46, 21, 58, 65, 39, 77],\n",[67,96502,96503],{"class":69,"line":758},[67,96504,96505],{"class":114},"       [83, 47, 64, 67, 67, 87],\n",[67,96507,96508],{"class":69,"line":764},[67,96509,96510],{"class":114},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[67,96512,96513],{"class":69,"line":770},[67,96514,95687],{"class":114},[67,96516,96517],{"class":69,"line":776},[67,96518,96519],{"class":2058},"#axis=1时,为默认值\n",[67,96521,96522,96524,96526,96528,96530],{"class":69,"line":782},[67,96523,96478],{"class":73},[67,96525,49282],{"class":7033},[67,96527,85],{"class":84},[67,96529,2209],{"class":77},[67,96531,829],{"class":73},[67,96533,96534],{"class":69,"line":788},[67,96535,95687],{"class":114},[67,96537,96538],{"class":69,"line":793},[67,96539,96449],{"class":114},[67,96541,96542],{"class":69,"line":798},[67,96543,96454],{"class":114},[67,96545,96546],{"class":69,"line":816},[67,96547,96459],{"class":114},[67,96549,96550],{"class":69,"line":832},[67,96551,96464],{"class":114},[67,96553,96554],{"class":69,"line":843},[67,96555,95687],{"class":114},[67,96557,96558],{"class":69,"line":848},[67,96559,96560],{"class":2058},"#按最后一列排序\n",[67,96562,96563,96565,96567,96570,96572,96574],{"class":69,"line":863},[67,96564,2255],{"class":73},[67,96566,85],{"class":84},[67,96568,96569],{"class":73},"aa[:,",[67,96571,1863],{"class":84},[67,96573,2209],{"class":77},[67,96575,35015],{"class":73},[67,96577,96578],{"class":69,"line":876},[67,96579,96580],{"class":2058},"#获取最后一列排好序的索引\n",[67,96582,96583,96585,96587],{"class":69,"line":889},[67,96584,75818],{"class":73},[67,96586,85],{"class":84},[67,96588,96589],{"class":73},"np.argsort(b)\n",[67,96591,96592],{"class":69,"line":894},[67,96593,96594],{"class":73},"aa[index]\n",[67,96596,96597],{"class":69,"line":911},[67,96598,95687],{"class":114},[67,96600,96601],{"class":69,"line":927},[67,96602,96413],{"class":114},[67,96604,96605],{"class":69,"line":932},[67,96606,96607],{"class":114},"       [46, 88, 81, 37, 25, 77],\n",[67,96609,96610],{"class":69,"line":955},[67,96611,96423],{"class":114},[67,96613,96614],{"class":69,"line":971},[67,96615,96616],{"class":114},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[67,96618,96619],{"class":69,"line":1010},[67,96620,95687],{"class":114},[1903,96622,96623],{},"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":63,"searchDepth":191,"depth":191,"links":96625},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96272,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96632,"title":96633,"body":96634,"description":25173,"extension":1930,"meta":96664,"navigation":630,"path":96665,"seo":96666,"stem":96667,"__hash__":96668},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96635,"toc":96662},[96636,96639,96642,96645,96648,96651,96654,96657],[10,96637,96633],{"id":96638},"_14广播机制",[19,96640,96641],{},"广播的规则：",[19,96643,96644],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96646,96647],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96649,96650],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96652,96653],{},"3.如果没有维度形状为1，则会引发异常",[19,96655,96656],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96658,96659],{},[3317,96660],{"alt":63,"src":96661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":63,"searchDepth":191,"depth":191,"links":96663},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96633,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96670,"title":96671,"body":96672,"description":25173,"extension":1930,"meta":96770,"navigation":630,"path":96771,"seo":96772,"stem":96773,"__hash__":96774},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96673,"toc":96768},[96674,96677,96680,96765],[10,96675,96671],{"id":96676},"_15比较掩码",[19,96678,96679],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[58,96681,96683],{"className":60,"code":96682,"language":62,"meta":63,"style":63},"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",[32,96684,96685,96731,96742,96756,96760],{"__ignoreMap":63},[67,96686,96687,96689,96691,96694,96696,96698,96700,96702,96704,96706,96708,96710,96712,96714,96716,96718,96720,96722,96724,96726,96728],{"class":69,"line":70},[67,96688,2230],{"class":73},[67,96690,85],{"class":84},[67,96692,96693],{"class":73},"np.array([[",[67,96695,2209],{"class":77},[67,96697,2369],{"class":73},[67,96699,2077],{"class":77},[67,96701,2369],{"class":73},[67,96703,2071],{"class":77},[67,96705,49798],{"class":73},[67,96707,2462],{"class":77},[67,96709,2369],{"class":73},[67,96711,2488],{"class":77},[67,96713,2369],{"class":73},[67,96715,2513],{"class":77},[67,96717,49798],{"class":73},[67,96719,2714],{"class":77},[67,96721,2369],{"class":73},[67,96723,2739],{"class":77},[67,96725,2369],{"class":73},[67,96727,2764],{"class":77},[67,96729,96730],{"class":73},"]])\n",[67,96732,96733,96735,96737,96739],{"class":69,"line":191},[67,96734,2230],{"class":73},[67,96736,259],{"class":84},[67,96738,2689],{"class":77},[67,96740,96741],{"class":2058},"#结果是一个由True,False组成的数组\n",[67,96743,96744,96747,96749,96751,96753],{"class":69,"line":202},[67,96745,96746],{"class":73},"a[a",[67,96748,259],{"class":84},[67,96750,2689],{"class":77},[67,96752,2928],{"class":73},[67,96754,96755],{"class":2058},"#小于20的元素会存到这个数组中\n",[67,96757,96758],{"class":69,"line":641},[67,96759,95323],{"class":2058},[67,96761,96762],{"class":69,"line":655},[67,96763,96764],{"class":2058},"#array([ 1,  2,  3, 11, 12, 13])\n",[1903,96766,96767],{},"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":63,"searchDepth":191,"depth":191,"links":96769},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96671,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96776,"title":96777,"body":96778,"description":25173,"extension":1930,"meta":96870,"navigation":630,"path":96871,"seo":96872,"stem":96873,"__hash__":96874},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96779,"toc":96868},[96780,96783,96786,96789,96792,96795,96860,96865],[10,96781,96777],{"id":96782},"_16魔法命令time",[19,96784,96785],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96787,96788],{},"%:行模式",[19,96790,96791],{},"%%:单元格模式",[19,96793,96794],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[58,96796,96798],{"className":60,"code":96797,"language":62,"meta":63,"style":63},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[32,96799,96800,96805,96812,96817,96826,96839,96843,96851],{"__ignoreMap":63},[67,96801,96802],{"class":69,"line":70},[67,96803,96804],{"class":2058},"#程序执行时间\n",[67,96806,96807,96809],{"class":69,"line":191},[67,96808,622],{"class":84},[67,96810,96811],{"class":73}," time \n",[67,96813,96814],{"class":69,"line":202},[67,96815,96816],{"class":2058},"#获取时间\n",[67,96818,96819,96822,96824],{"class":69,"line":641},[67,96820,96821],{"class":73},"start",[67,96823,85],{"class":84},[67,96825,34188],{"class":73},[67,96827,96828,96831,96834,96836],{"class":69,"line":655},[67,96829,96830],{"class":73},"time.sleep(",[67,96832,96833],{"class":77},"0.4",[67,96835,2420],{"class":73},[67,96837,96838],{"class":2058},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[67,96840,96841],{"class":69,"line":660},[67,96842,96816],{"class":2058},[67,96844,96845,96847,96849],{"class":69,"line":665},[67,96846,47569],{"class":73},[67,96848,85],{"class":84},[67,96850,34188],{"class":73},[67,96852,96853,96855,96857],{"class":69,"line":677},[67,96854,47569],{"class":73},[67,96856,1863],{"class":84},[67,96858,96859],{"class":73},"start\n",[19,96861,96862],{},[3317,96863],{"alt":63,"src":96864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1903,96866,96867],{},"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":63,"searchDepth":191,"depth":191,"links":96869},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96777,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96876,"title":96877,"body":96878,"description":25173,"extension":1930,"meta":96913,"navigation":630,"path":96914,"seo":96915,"stem":96916,"__hash__":96917},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96879,"toc":96911},[96880,96883,96886,96889,96892,96895,96898,96901,96906],[10,96881,96877],{"id":96882},"_17魔法命令timeit",[19,96884,96885],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96887,96888],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96890,96891],{},"单元格模式：",[19,96893,96894],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96896,96897],{},"初始化语句执行次数由轮数来决定",[19,96899,96900],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96902,96903],{},[3317,96904],{"alt":63,"src":96905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96907,96908],{},[3317,96909],{"alt":63,"src":96910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":63,"searchDepth":191,"depth":191,"links":96912},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96877,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96919,"title":96920,"body":96921,"description":25173,"extension":1930,"meta":96939,"navigation":630,"path":96940,"seo":96941,"stem":96942,"__hash__":96943},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96922,"toc":96937},[96923,96926,96929,96932],[10,96924,96920],{"id":96925},"_18魔法命令writefile和run",[19,96927,96928],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96930,96931],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96933,96934],{},[3317,96935],{"alt":63,"src":96936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":63,"searchDepth":191,"depth":191,"links":96938},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96920,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96945,"title":96946,"body":96947,"description":25173,"extension":1930,"meta":97000,"navigation":630,"path":97001,"seo":97002,"stem":97003,"__hash__":97004},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96948,"toc":96998},[96949,96952,96955,96957,96960,96963,96968,96971,96974,96977,96980,96983,96986,96989,96992,96995],[10,96950,96946],{"id":96951},"_19魔法命令memit",[19,96953,96954],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96956,26391],{},[19,96958,96959],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96961,96962],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96964,96965],{},[3317,96966],{"alt":63,"src":96967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96969,96970],{},"补充：",[19,96972,96973],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96975,96976],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96978,96979],{},"解决方法：",[19,96981,96982],{},"1.cmd",[19,96984,96985],{},"2.依次输入以下代码：",[19,96987,96988],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96990,96991],{},"pip install --upgrade ipython",[19,96993,96994],{},"#升级 memory_profiler 和 setuptools",[19,96996,96997],{},"pip install --upgrade memory_profiler setuptools",{"title":63,"searchDepth":191,"depth":191,"links":96999},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96946,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97006,"title":97007,"body":97008,"description":25173,"extension":1930,"meta":98652,"navigation":630,"path":98653,"seo":98654,"stem":98655,"__hash__":98656},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97009,"toc":98622},[97010,97013,97017,97021,97082,97085,97090,97094,97099,97104,97109,97114,97117,97122,97126,97130,97163,97166,97169,97172,97224,97227,97263,97266,97308,97312,97333,97335,97372,97374,97379,97381,97386,97390,97393,97421,97425,97429,97480,97484,97576,97580,97584,97587,97592,97596,97621,97626,97630,97633,97636,97639,97642,97645,97648,97651,97663,97667,97671,97674,97706,97709,97732,97735,97761,97764,97790,97793,97827,97830,97892,97896,97899,97903,97906,97932,97935,97938,97943,97946,98015,98017,98022,98083,98086,98097,98103,98108,98112,98115,98128,98132,98147,98149,98172,98174,98200,98203,98206,98209,98257,98259,98264,98268,98272,98299,98303,98330,98333,98338,98343,98433,98437,98495,98500,98503,98506,98548,98552,98608,98613,98616,98619],[10,97011,97007],{"id":97012},"_2创建数组",[14,97014,97016],{"id":97015},"_21-array函数创建数组","2.1 array()函数创建数组",[391,97018,97020],{"id":97019},"_221-函数语句","2.2.1 函数语句",[58,97022,97024],{"className":60,"code":97023,"language":62,"meta":63,"style":63},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[32,97025,97026],{"__ignoreMap":63},[67,97027,97028,97031,97034,97036,97038,97040,97042,97044,97047,97049,97052,97054,97057,97059,97061,97063,97066,97068,97071,97073,97076,97078,97080],{"class":69,"line":70},[67,97029,97030],{"class":73},"numpy.array(",[67,97032,97033],{"class":77},"object",[67,97035,1868],{"class":73},[67,97037,95259],{"class":7033},[67,97039,671],{"class":84},[67,97041,40701],{"class":77},[67,97043,1868],{"class":73},[67,97045,97046],{"class":7033},"copy",[67,97048,671],{"class":84},[67,97050,97051],{"class":77}," True",[67,97053,1868],{"class":73},[67,97055,97056],{"class":7033},"order",[67,97058,671],{"class":84},[67,97060,40701],{"class":77},[67,97062,1868],{"class":73},[67,97064,97065],{"class":7033},"subok",[67,97067,671],{"class":84},[67,97069,97070],{"class":77}," False",[67,97072,1868],{"class":73},[67,97074,97075],{"class":7033},"ndmin",[67,97077,671],{"class":84},[67,97079,5913],{"class":77},[67,97081,829],{"class":73},[19,97083,97084],{},"参数：",[19,97086,97087],{},[3317,97088],{"alt":63,"src":97089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[391,97091,97093],{"id":97092},"_222-实例","2.2.2 实例",[19,97095,97096],{},[3317,97097],{"alt":63,"src":97098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97100,97101],{},[3317,97102],{"alt":63,"src":97103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97105,97106],{},[3317,97107],{"alt":63,"src":97108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97110,97111],{},[3317,97112],{"alt":63,"src":97113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97115,97116],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97118,97119],{},[3317,97120],{"alt":63,"src":97121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97123,97125],{"id":97124},"_22-随机数创建数组","2.2 随机数创建数组",[391,97127,97129],{"id":97128},"_221-random语句","2.2.1 random语句",[58,97131,97133],{"className":60,"code":97132,"language":62,"meta":63,"style":63},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[32,97134,97135,97140,97145,97153,97158],{"__ignoreMap":63},[67,97136,97137],{"class":69,"line":70},[67,97138,97139],{"class":2058},"#random.random()\n",[67,97141,97142],{"class":69,"line":191},[67,97143,97144],{"class":2058},"#确定随机种子,就是每次运行结果是相同的\n",[67,97146,97147,97149,97151],{"class":69,"line":202},[67,97148,96366],{"class":73},[67,97150,78],{"class":77},[67,97152,829],{"class":73},[67,97154,97155],{"class":69,"line":641},[67,97156,97157],{"class":73},"np.random.random()\n",[67,97159,97160],{"class":69,"line":655},[67,97161,97162],{"class":2058},"#生成一个随机的数目\n",[19,97164,97165],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97167,97168],{},"可以指定数组形状 size",[19,97170,97171],{},"①生成一维数组",[58,97173,97175],{"className":60,"code":97174,"language":62,"meta":63,"style":63},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[32,97176,97177,97182,97195,97200,97216],{"__ignoreMap":63},[67,97178,97179],{"class":69,"line":70},[67,97180,97181],{"class":2058},"#random.random(size())\n",[67,97183,97184,97187,97189,97191,97193],{"class":69,"line":191},[67,97185,97186],{"class":73},"np.random.random(",[67,97188,33268],{"class":7033},[67,97190,85],{"class":84},[67,97192,2310],{"class":77},[67,97194,829],{"class":73},[67,97196,97197],{"class":69,"line":202},[67,97198,97199],{"class":2058},"#生成一位的五个元素\n",[67,97201,97202,97204,97206,97208,97210,97212,97214],{"class":69,"line":641},[67,97203,2230],{"class":73},[67,97205,85],{"class":84},[67,97207,97186],{"class":73},[67,97209,33268],{"class":7033},[67,97211,85],{"class":84},[67,97213,1047],{"class":77},[67,97215,829],{"class":73},[67,97217,97218,97221],{"class":69,"line":655},[67,97219,97220],{"class":73},"a.shape ",[67,97222,97223],{"class":2058},"#输出数组形状\n",[19,97225,97226],{},"②生成二维数组",[58,97228,97230],{"className":60,"code":97229,"language":62,"meta":63,"style":63},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[32,97231,97232,97236,97258],{"__ignoreMap":63},[67,97233,97234],{"class":69,"line":70},[67,97235,95060],{"class":2058},[67,97237,97238,97240,97242,97244,97246,97248,97250,97252,97254,97256],{"class":69,"line":191},[67,97239,95065],{"class":73},[67,97241,85],{"class":84},[67,97243,97186],{"class":73},[67,97245,33268],{"class":7033},[67,97247,85],{"class":84},[67,97249,854],{"class":73},[67,97251,1047],{"class":77},[67,97253,2369],{"class":73},[67,97255,2310],{"class":77},[67,97257,1050],{"class":73},[67,97259,97260],{"class":69,"line":202},[67,97261,97262],{"class":2058},"#生成四行五列的数组\n",[19,97264,97265],{},"③生成三维数组",[58,97267,97269],{"className":60,"code":97268,"language":62,"meta":63,"style":63},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[32,97270,97271,97276,97303],{"__ignoreMap":63},[67,97272,97273],{"class":69,"line":70},[67,97274,97275],{"class":2058},"#三维数组\n",[67,97277,97278,97281,97283,97285,97287,97289,97291,97293,97295,97297,97299,97301],{"class":69,"line":191},[67,97279,97280],{"class":73},"aaa",[67,97282,85],{"class":84},[67,97284,97186],{"class":73},[67,97286,33268],{"class":7033},[67,97288,85],{"class":84},[67,97290,854],{"class":73},[67,97292,2077],{"class":77},[67,97294,2369],{"class":73},[67,97296,2071],{"class":77},[67,97298,2369],{"class":73},[67,97300,1047],{"class":77},[67,97302,1050],{"class":73},[67,97304,97305],{"class":69,"line":202},[67,97306,97307],{"class":73},"aaa.shape\n",[391,97309,97311],{"id":97310},"_222-randint语句","2.2.2 randint语句",[58,97313,97315],{"className":60,"code":97314,"language":62,"meta":63,"style":63},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[32,97316,97317,97322],{"__ignoreMap":63},[67,97318,97319],{"class":69,"line":70},[67,97320,97321],{"class":2058},"#生成随机的整数 random.randint(low,high,size)\n",[67,97323,97324,97326,97328,97330],{"class":69,"line":191},[67,97325,94873],{"class":73},[67,97327,2310],{"class":77},[67,97329,15512],{"class":73},[67,97331,97332],{"class":2058},"#0~5中的随机一个数\n",[19,97334,97171],{},[58,97336,97338],{"className":60,"code":97337,"language":62,"meta":63,"style":63},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[32,97339,97340,97345,97367],{"__ignoreMap":63},[67,97341,97342],{"class":69,"line":70},[67,97343,97344],{"class":2058},"#一维\n",[67,97346,97347,97349,97351,97353,97355,97357,97359,97361,97363,97365],{"class":69,"line":191},[67,97348,94873],{"class":73},[67,97350,2209],{"class":77},[67,97352,2369],{"class":73},[67,97354,2462],{"class":77},[67,97356,2369],{"class":73},[67,97358,33268],{"class":7033},[67,97360,85],{"class":84},[67,97362,854],{"class":73},[67,97364,2437],{"class":77},[67,97366,1050],{"class":73},[67,97368,97369],{"class":69,"line":202},[67,97370,97371],{"class":2058},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97373,97226],{},[19,97375,97376],{},[3317,97377],{"alt":63,"src":97378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97380,97265],{},[19,97382,97383],{},[3317,97384],{"alt":63,"src":97385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[391,97387,97389],{"id":97388},"_222-rand语句","2.2.2 rand语句",[19,97391,97392],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[58,97394,97396],{"className":60,"code":97395,"language":62,"meta":63,"style":63},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[32,97397,97398,97411,97416],{"__ignoreMap":63},[67,97399,97400,97403,97405,97407,97409],{"class":69,"line":70},[67,97401,97402],{"class":73},"np.random.rand(",[67,97404,2302],{"class":77},[67,97406,2369],{"class":73},[67,97408,2437],{"class":77},[67,97410,829],{"class":73},[67,97412,97413],{"class":69,"line":191},[67,97414,97415],{"class":2058},"#第一个参数100：行数，表示有100个样本\n",[67,97417,97418],{"class":69,"line":202},[67,97419,97420],{"class":2058},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97422,97424],{"id":97423},"_23-arange创建数组","2.3 arange()创建数组",[391,97426,97428],{"id":97427},"_231-函数语句","2.3.1 函数语句",[58,97430,97432],{"className":60,"code":97431,"language":62,"meta":63,"style":63},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[32,97433,97434,97447,97452,97456,97461,97466,97471,97476],{"__ignoreMap":63},[67,97435,97436,97439,97441,97443,97445],{"class":69,"line":70},[67,97437,97438],{"class":73},"numpy.arange([start,] stop[, step], ",[67,97440,95259],{"class":7033},[67,97442,85],{"class":84},[67,97444,810],{"class":77},[67,97446,829],{"class":73},[67,97448,97449],{"class":69,"line":191},[67,97450,97451],{"class":2058},"#参数\n",[67,97453,97454],{"class":69,"line":202},[67,97455,785],{"class":114},[67,97457,97458],{"class":69,"line":641},[67,97459,97460],{"class":114},"start:起始值，可选，默认从 0 开始。\n",[67,97462,97463],{"class":69,"line":655},[67,97464,97465],{"class":114},"stop:结束值（不包含该值）。\n",[67,97467,97468],{"class":69,"line":660},[67,97469,97470],{"class":114},"step:步长，可选，默认是 1。可以为浮点数。\n",[67,97472,97473],{"class":69,"line":665},[67,97474,97475],{"class":114},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[67,97477,97478],{"class":69,"line":677},[67,97479,785],{"class":114},[391,97481,97483],{"id":97482},"_232-实例","2.3.2 实例",[58,97485,97487],{"className":60,"code":97486,"language":62,"meta":63,"style":63},"#创建一维数组\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",[32,97488,97489,97493,97517,97522,97527,97531,97554,97558,97562,97567,97572],{"__ignoreMap":63},[67,97490,97491],{"class":69,"line":70},[67,97492,94864],{"class":2058},[67,97494,97495,97497,97499,97501,97503,97505,97507,97509,97511,97513,97515],{"class":69,"line":191},[67,97496,94761],{"class":73},[67,97498,2209],{"class":77},[67,97500,2369],{"class":73},[67,97502,2714],{"class":77},[67,97504,2369],{"class":73},[67,97506,2209],{"class":77},[67,97508,2369],{"class":73},[67,97510,95259],{"class":7033},[67,97512,85],{"class":84},[67,97514,2006],{"class":77},[67,97516,829],{"class":73},[67,97518,97519],{"class":69,"line":202},[67,97520,97521],{"class":2058},"#输出结果：\n",[67,97523,97524],{"class":69,"line":641},[67,97525,97526],{"class":2058},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[67,97528,97529],{"class":69,"line":655},[67,97530,95706],{"class":2058},[67,97532,97533,97536,97538,97540,97542,97545,97547,97549,97551],{"class":69,"line":660},[67,97534,97535],{"class":73},"np.array([np.arange(",[67,97537,2209],{"class":77},[67,97539,2369],{"class":73},[67,97541,1047],{"class":77},[67,97543,97544],{"class":73},"),np.arange(",[67,97546,1047],{"class":77},[67,97548,2369],{"class":73},[67,97550,2360],{"class":77},[67,97552,97553],{"class":73},")])\n",[67,97555,97556],{"class":69,"line":665},[67,97557,95323],{"class":2058},[67,97559,97560],{"class":69,"line":677},[67,97561,785],{"class":114},[67,97563,97564],{"class":69,"line":683},[67,97565,97566],{"class":114},"array([[1, 2, 3],\n",[67,97568,97569],{"class":69,"line":689},[67,97570,97571],{"class":114},"       [4, 5, 6]])\n",[67,97573,97574],{"class":69,"line":694},[67,97575,785],{"class":114},[14,97577,97579],{"id":97578},"_24-生态分布","2.4 生态分布",[391,97581,97583],{"id":97582},"_241-标准正态分布","2.4.1 标准正态分布",[19,97585,97586],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97588,97589],{},[3317,97590],{"alt":63,"src":97591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[391,97593,97595],{"id":97594},"_242-常规正态分布","2.4.2 常规正态分布",[58,97597,97599],{"className":60,"code":97598,"language":62,"meta":63,"style":63},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[32,97600,97601,97606,97611,97616],{"__ignoreMap":63},[67,97602,97603],{"class":69,"line":70},[67,97604,97605],{"class":73},"random.normal(loc,scale,size)也可以生成正态分布\n",[67,97607,97608],{"class":69,"line":191},[67,97609,97610],{"class":2058},"#loc:期望\n",[67,97612,97613],{"class":69,"line":202},[67,97614,97615],{"class":2058},"#scale:方差\n",[67,97617,97618],{"class":69,"line":641},[67,97619,97620],{"class":2058},"#size:用于确定是几维的数列\n",[19,97622,97623],{},[3317,97624],{"alt":63,"src":97625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97627,97629],{"id":97628},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97631,97632],{},"ndim:秩，维度个数",[19,97634,97635],{},"size:数组元素的个数",[19,97637,97638],{},"shape:数组的形状",[19,97640,97641],{},"dtype:数组元素的类型",[19,97643,97644],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97646,97647],{},"他们都是属性，通过数组.属性的形式来确定",[19,97649,97650],{},"如果需要输出多个可以通过以下方式：",[58,97652,97654],{"className":60,"code":97653,"language":62,"meta":63,"style":63},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[32,97655,97656],{"__ignoreMap":63},[67,97657,97658,97660],{"class":69,"line":70},[67,97659,1626],{"class":77},[67,97661,97662],{"class":73},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97664,97666],{"id":97665},"_26-其他方式创建数组","2.6 其他方式创建数组",[391,97668,97670],{"id":97669},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97672,97673],{},"①创建一维数组",[58,97675,97677],{"className":60,"code":97676,"language":62,"meta":63,"style":63},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[32,97678,97679,97688,97692,97697,97702],{"__ignoreMap":63},[67,97680,97681,97684,97686],{"class":69,"line":70},[67,97682,97683],{"class":73},"np.zeros(",[67,97685,2437],{"class":77},[67,97687,829],{"class":73},[67,97689,97690],{"class":69,"line":191},[67,97691,785],{"class":114},[67,97693,97694],{"class":69,"line":202},[67,97695,97696],{"class":114},"输出结果：\n",[67,97698,97699],{"class":69,"line":641},[67,97700,97701],{"class":114},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[67,97703,97704],{"class":69,"line":655},[67,97705,785],{"class":114},[19,97707,97708],{},"上方代码等价于：",[58,97710,97712],{"className":60,"code":97711,"language":62,"meta":63,"style":63},"np.zeros(shape=(10))#创建10个元素的0数组\n",[32,97713,97714],{"__ignoreMap":63},[67,97715,97716,97718,97721,97723,97725,97727,97729],{"class":69,"line":70},[67,97717,97683],{"class":73},[67,97719,97720],{"class":7033},"shape",[67,97722,85],{"class":84},[67,97724,854],{"class":73},[67,97726,2437],{"class":77},[67,97728,84530],{"class":73},[67,97730,97731],{"class":2058},"#创建10个元素的0数组\n",[19,97733,97734],{},"也可以指定类型",[58,97736,97738],{"className":60,"code":97737,"language":62,"meta":63,"style":63},"#指定类型\nnp.zeros(5,dtype=int)\n",[32,97739,97740,97745],{"__ignoreMap":63},[67,97741,97742],{"class":69,"line":70},[67,97743,97744],{"class":2058},"#指定类型\n",[67,97746,97747,97749,97751,97753,97755,97757,97759],{"class":69,"line":191},[67,97748,97683],{"class":73},[67,97750,2310],{"class":77},[67,97752,2369],{"class":73},[67,97754,95259],{"class":7033},[67,97756,85],{"class":84},[67,97758,2006],{"class":77},[67,97760,829],{"class":73},[19,97762,97763],{},"②创建二维数组",[58,97765,97767],{"className":60,"code":97766,"language":62,"meta":63,"style":63},"np.zeros((3,4),dtype=int)\n",[32,97768,97769],{"__ignoreMap":63},[67,97770,97771,97774,97776,97778,97780,97782,97784,97786,97788],{"class":69,"line":70},[67,97772,97773],{"class":73},"np.zeros((",[67,97775,2071],{"class":77},[67,97777,2369],{"class":73},[67,97779,1047],{"class":77},[67,97781,44024],{"class":73},[67,97783,95259],{"class":7033},[67,97785,85],{"class":84},[67,97787,2006],{"class":77},[67,97789,829],{"class":73},[19,97791,97792],{},"③创建三维数组",[58,97794,97796],{"className":60,"code":97795,"language":62,"meta":63,"style":63},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[32,97797,97798,97803],{"__ignoreMap":63},[67,97799,97800],{"class":69,"line":70},[67,97801,97802],{"class":2058},"#创建三维数组\n",[67,97804,97805,97807,97809,97811,97813,97815,97817,97819,97821,97823,97825],{"class":69,"line":191},[67,97806,97773],{"class":73},[67,97808,2071],{"class":77},[67,97810,2369],{"class":73},[67,97812,1047],{"class":77},[67,97814,2369],{"class":73},[67,97816,2310],{"class":77},[67,97818,44024],{"class":73},[67,97820,95259],{"class":7033},[67,97822,85],{"class":84},[67,97824,2006],{"class":77},[67,97826,829],{"class":73},[19,97828,97829],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[58,97831,97833],{"className":60,"code":97832,"language":62,"meta":63,"style":63},"#使用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",[32,97834,97835,97840,97855,97860,97865,97887],{"__ignoreMap":63},[67,97836,97837],{"class":69,"line":70},[67,97838,97839],{"class":2058},"#使用zeros_like将创建的一维数组变成全0的数组\n",[67,97841,97842,97844,97846,97848,97850,97852],{"class":69,"line":191},[67,97843,2230],{"class":73},[67,97845,85],{"class":84},[67,97847,94761],{"class":73},[67,97849,1047],{"class":77},[67,97851,2420],{"class":73},[67,97853,97854],{"class":2058},"#这个得到的结果：一维数组0，1，2，3\n",[67,97856,97857],{"class":69,"line":202},[67,97858,97859],{"class":73},"np.zeros_like(a)\n",[67,97861,97862],{"class":69,"line":641},[67,97863,97864],{"class":2058},"#使用zeros_like将创建的二维数组变成全0的数组\n",[67,97866,97867,97869,97871,97873,97875,97877,97879,97881,97883,97885],{"class":69,"line":655},[67,97868,95065],{"class":73},[67,97870,85],{"class":84},[67,97872,97186],{"class":73},[67,97874,33268],{"class":7033},[67,97876,85],{"class":84},[67,97878,854],{"class":73},[67,97880,1047],{"class":77},[67,97882,2369],{"class":73},[67,97884,2310],{"class":77},[67,97886,1050],{"class":73},[67,97888,97889],{"class":69,"line":660},[67,97890,97891],{"class":73},"np.zeros_like(aa)\n",[391,97893,97895],{"id":97894},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97897,97898],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[391,97900,97902],{"id":97901},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97904,97905],{},"①empty()用法",[58,97907,97909],{"className":60,"code":97908,"language":62,"meta":63,"style":63},"numpy.empty(shape,dtype=float,order='c')\n",[32,97910,97911],{"__ignoreMap":63},[67,97912,97913,97916,97918,97920,97922,97924,97926,97928,97930],{"class":69,"line":70},[67,97914,97915],{"class":73},"numpy.empty(shape,",[67,97917,95259],{"class":7033},[67,97919,85],{"class":84},[67,97921,2041],{"class":77},[67,97923,2369],{"class":73},[67,97925,97056],{"class":7033},[67,97927,85],{"class":84},[67,97929,77788],{"class":114},[67,97931,829],{"class":73},[19,97933,97934],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97936,97937],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97939,97940],{},[3317,97941],{"alt":63,"src":97942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97944,97945],{},"②empty()用法",[58,97947,97949],{"className":60,"code":97948,"language":62,"meta":63,"style":63},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[32,97950,97951,97972,97984,98005,98010],{"__ignoreMap":63},[67,97952,97953,97955,97957,97960,97962,97964,97966,97968,97970],{"class":69,"line":70},[67,97954,2834],{"class":73},[67,97956,85],{"class":84},[67,97958,97959],{"class":73},"np.empty(",[67,97961,2437],{"class":77},[67,97963,2369],{"class":73},[67,97965,95259],{"class":7033},[67,97967,85],{"class":84},[67,97969,2006],{"class":77},[67,97971,829],{"class":73},[67,97973,97974,97976,97978,97980,97982],{"class":69,"line":191},[67,97975,2809],{"class":73},[67,97977,85],{"class":84},[67,97979,94761],{"class":73},[67,97981,2310],{"class":77},[67,97983,829],{"class":73},[67,97985,97986,97989,97991,97994,97996,97998,98001,98003],{"class":69,"line":202},[67,97987,97988],{"class":73},"np.add(",[67,97990,2077],{"class":77},[67,97992,97993],{"class":73},",x,",[67,97995,94813],{"class":7033},[67,97997,85],{"class":84},[67,97999,98000],{"class":73},"y[:",[67,98002,2310],{"class":77},[67,98004,6476],{"class":73},[67,98006,98007],{"class":69,"line":641},[67,98008,98009],{"class":2058},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[67,98011,98012],{"class":69,"line":655},[67,98013,98014],{"class":73},"y\n",[19,98016,13314],{},[19,98018,98019],{},[3317,98020],{"alt":63,"src":98021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[58,98023,98025],{"className":60,"code":98024,"language":62,"meta":63,"style":63},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[32,98026,98027,98043,98063,98078],{"__ignoreMap":63},[67,98028,98029,98031,98033,98035,98037,98039,98041],{"class":69,"line":70},[67,98030,2809],{"class":73},[67,98032,85],{"class":84},[67,98034,94761],{"class":73},[67,98036,2209],{"class":77},[67,98038,2369],{"class":73},[67,98040,2335],{"class":77},[67,98042,829],{"class":73},[67,98044,98045,98047,98049,98051,98053,98055,98057,98059,98061],{"class":69,"line":191},[67,98046,2834],{"class":73},[67,98048,85],{"class":84},[67,98050,97959],{"class":73},[67,98052,2310],{"class":77},[67,98054,2369],{"class":73},[67,98056,95259],{"class":7033},[67,98058,85],{"class":84},[67,98060,2006],{"class":77},[67,98062,829],{"class":73},[67,98064,98065,98068,98070,98072,98074,98076],{"class":69,"line":202},[67,98066,98067],{"class":73},"np.add(x,",[67,98069,2077],{"class":77},[67,98071,2369],{"class":73},[67,98073,94813],{"class":7033},[67,98075,85],{"class":84},[67,98077,95208],{"class":73},[67,98079,98080],{"class":69,"line":641},[67,98081,98082],{"class":2058},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98084,98085],{},"③empty_like()",[19,98087,98088],{},[2144,98089,98090,98091,98096],{},"创建一个",[2144,98092,98093],{},[2144,98094,98095],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98098,98099,98102],{},[32,98100,98101],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98104,98105],{},[3317,98106],{"alt":63,"src":98107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[391,98109,98111],{"id":98110},"_264-用法","2.6.4 ？？用法",[19,98113,98114],{},"当想查看一个函数的参数时，可以通过？？来实现",[58,98116,98118],{"className":60,"code":98117,"language":62,"meta":63,"style":63},"np.full??\n",[32,98119,98120],{"__ignoreMap":63},[67,98121,98122,98125],{"class":69,"line":70},[67,98123,98124],{"class":73},"np.full",[67,98126,98127],{"class":79163},"??\n",[391,98129,98131],{"id":98130},"_265-full创建数组","2.6.5 full()创建数组",[58,98133,98135],{"className":60,"code":98134,"language":62,"meta":63,"style":63},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[32,98136,98137,98142],{"__ignoreMap":63},[67,98138,98139],{"class":69,"line":70},[67,98140,98141],{"class":73},"full(shape,fill_value)\n",[67,98143,98144],{"class":69,"line":191},[67,98145,98146],{"class":73},"创建全为某个指定值的数组\n",[19,98148,96289],{},[58,98150,98152],{"className":60,"code":98151,"language":62,"meta":63,"style":63},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[32,98153,98154,98159],{"__ignoreMap":63},[67,98155,98156],{"class":69,"line":70},[67,98157,98158],{"class":2058},"#创建一个一维数组,以20进行填充\n",[67,98160,98161,98164,98166,98168,98170],{"class":69,"line":191},[67,98162,98163],{"class":73},"np.full(",[67,98165,2437],{"class":77},[67,98167,2369],{"class":73},[67,98169,2689],{"class":77},[67,98171,829],{"class":73},[19,98173,95050],{},[58,98175,98177],{"className":60,"code":98176,"language":62,"meta":63,"style":63},"#创建二维数组\nnp.full((3,5),11)\n",[32,98178,98179,98183],{"__ignoreMap":63},[67,98180,98181],{"class":69,"line":70},[67,98182,95706],{"class":2058},[67,98184,98185,98188,98190,98192,98194,98196,98198],{"class":69,"line":191},[67,98186,98187],{"class":73},"np.full((",[67,98189,2071],{"class":77},[67,98191,2369],{"class":73},[67,98193,2310],{"class":77},[67,98195,44024],{"class":73},[67,98197,2462],{"class":77},[67,98199,829],{"class":73},[19,98201,98202],{},"③full_like用法",[19,98204,98205],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98207,98208],{},"这里是指定填充而已",[58,98210,98212],{"className":60,"code":98211,"language":62,"meta":63,"style":63},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[32,98213,98214,98219,98243,98248],{"__ignoreMap":63},[67,98215,98216],{"class":69,"line":70},[67,98217,98218],{"class":2058},"#创建一个指定形状数组\n",[67,98220,98221,98223,98225,98227,98229,98231,98233,98235,98237,98239,98241],{"class":69,"line":191},[67,98222,2230],{"class":73},[67,98224,85],{"class":84},[67,98226,94761],{"class":73},[67,98228,2209],{"class":77},[67,98230,2369],{"class":73},[67,98232,2316],{"class":77},[67,98234,94766],{"class":73},[67,98236,1047],{"class":77},[67,98238,2369],{"class":73},[67,98240,2411],{"class":77},[67,98242,829],{"class":73},[67,98244,98245],{"class":69,"line":202},[67,98246,98247],{"class":2058},"#进行指定填充\n",[67,98249,98250,98253,98255],{"class":69,"line":641},[67,98251,98252],{"class":73},"np.full_like(a,",[67,98254,2437],{"class":77},[67,98256,829],{"class":73},[19,98258,13314],{},[19,98260,98261],{},[3317,98262],{"alt":63,"src":98263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[391,98265,98267],{"id":98266},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23794,98269,98271],{"id":98270},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[58,98273,98275],{"className":60,"code":98274,"language":62,"meta":63,"style":63},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[32,98276,98277,98294],{"__ignoreMap":63},[67,98278,98279,98282,98284,98286,98288,98290,98292],{"class":69,"line":70},[67,98280,98281],{"class":73},"np.eye(",[67,98283,1047],{"class":77},[67,98285,2369],{"class":73},[67,98287,95259],{"class":7033},[67,98289,85],{"class":84},[67,98291,2006],{"class":77},[67,98293,829],{"class":73},[67,98295,98296],{"class":69,"line":191},[67,98297,98298],{"class":2058},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23794,98300,98302],{"id":98301},"_2662-法2identity","2.6.6.2 法2：identity()",[58,98304,98306],{"className":60,"code":98305,"language":62,"meta":63,"style":63},"#identity()\nnp.identity(5,dtype=int)\n",[32,98307,98308,98313],{"__ignoreMap":63},[67,98309,98310],{"class":69,"line":70},[67,98311,98312],{"class":2058},"#identity()\n",[67,98314,98315,98318,98320,98322,98324,98326,98328],{"class":69,"line":191},[67,98316,98317],{"class":73},"np.identity(",[67,98319,2310],{"class":77},[67,98321,2369],{"class":73},[67,98323,95259],{"class":7033},[67,98325,85],{"class":84},[67,98327,2006],{"class":77},[67,98329,829],{"class":73},[19,98331,98332],{},"两个函数是有区别的",[19,98334,98335],{},[3317,98336],{"alt":63,"src":98337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98339,98340],{},[3317,98341],{"alt":63,"src":98342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[58,98344,98346],{"className":60,"code":98345,"language":62,"meta":63,"style":63},"# 创建一个 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",[32,98347,98348,98353,98365,98370,98375,98380,98385,98389,98394,98414,98418,98423,98428],{"__ignoreMap":63},[67,98349,98350],{"class":69,"line":70},[67,98351,98352],{"class":2058},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[67,98354,98355,98357,98359,98361,98363],{"class":69,"line":191},[67,98356,98281],{"class":73},[67,98358,2071],{"class":77},[67,98360,1868],{"class":73},[67,98362,1047],{"class":77},[67,98364,829],{"class":73},[67,98366,98367],{"class":69,"line":202},[67,98368,98369],{"class":2058},"# 输出:\n",[67,98371,98372],{"class":69,"line":641},[67,98373,98374],{"class":2058},"# [[1. 0. 0. 0.]\n",[67,98376,98377],{"class":69,"line":655},[67,98378,98379],{"class":2058},"#  [0. 1. 0. 0.]\n",[67,98381,98382],{"class":69,"line":660},[67,98383,98384],{"class":2058},"#  [0. 0. 1. 0.]]\n",[67,98386,98387],{"class":69,"line":665},[67,98388,631],{"emptyLinePlaceholder":630},[67,98390,98391],{"class":69,"line":677},[67,98392,98393],{"class":2058},"# 对角线向上偏移1\n",[67,98395,98396,98398,98400,98402,98404,98406,98408,98410,98412],{"class":69,"line":683},[67,98397,98281],{"class":73},[67,98399,2071],{"class":77},[67,98401,1868],{"class":73},[67,98403,1047],{"class":77},[67,98405,1868],{"class":73},[67,98407,2483],{"class":7033},[67,98409,85],{"class":84},[67,98411,2209],{"class":77},[67,98413,829],{"class":73},[67,98415,98416],{"class":69,"line":689},[67,98417,98369],{"class":2058},[67,98419,98420],{"class":69,"line":694},[67,98421,98422],{"class":2058},"# [[0. 1. 0. 0.]\n",[67,98424,98425],{"class":69,"line":700},[67,98426,98427],{"class":2058},"#  [0. 0. 1. 0.]\n",[67,98429,98430],{"class":69,"line":706},[67,98431,98432],{"class":2058},"#  [0. 0. 0. 1.]]\n",[391,98434,98436],{"id":98435},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[58,98438,98440],{"className":60,"code":98439,"language":62,"meta":63,"style":63},"#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",[32,98441,98442,98447,98451,98456,98461,98466,98471,98476,98481,98486,98491],{"__ignoreMap":63},[67,98443,98444],{"class":69,"line":70},[67,98445,98446],{"class":2058},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[67,98448,98449],{"class":69,"line":191},[67,98450,785],{"class":114},[67,98452,98453],{"class":69,"line":202},[67,98454,98455],{"class":114},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[67,98457,98458],{"class":69,"line":641},[67,98459,98460],{"class":114},"参数介绍：\n",[67,98462,98463],{"class":69,"line":655},[67,98464,98465],{"class":114},"start：序列的起始值\n",[67,98467,98468],{"class":69,"line":660},[67,98469,98470],{"class":114},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[67,98472,98473],{"class":69,"line":665},[67,98474,98475],{"class":114},"num：要生长的等步长的样本数量，默认为50\n",[67,98477,98478],{"class":69,"line":677},[67,98479,98480],{"class":114},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[67,98482,98483],{"class":69,"line":683},[67,98484,98485],{"class":114},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[67,98487,98488],{"class":69,"line":689},[67,98489,98490],{"class":114},"dtype：ndarry的数据类型\n",[67,98492,98493],{"class":69,"line":694},[67,98494,785],{"class":114},[19,98496,98497],{},[3317,98498],{"alt":63,"src":98499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98501,98502],{},"这里num=是可以省略的",[19,98504,98505],{},"也就是下方两行代码结果是一模一样的",[58,98507,98509],{"className":60,"code":98508,"language":62,"meta":63,"style":63},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[32,98510,98511,98528],{"__ignoreMap":63},[67,98512,98513,98516,98518,98520,98522,98524,98526],{"class":69,"line":70},[67,98514,98515],{"class":73},"np.linspace(",[67,98517,2209],{"class":77},[67,98519,2369],{"class":73},[67,98521,2310],{"class":77},[67,98523,2369],{"class":73},[67,98525,2310],{"class":77},[67,98527,829],{"class":73},[67,98529,98530,98532,98534,98536,98538,98540,98542,98544,98546],{"class":69,"line":191},[67,98531,98515],{"class":73},[67,98533,2209],{"class":77},[67,98535,2369],{"class":73},[67,98537,2310],{"class":77},[67,98539,2369],{"class":73},[67,98541,3512],{"class":7033},[67,98543,85],{"class":84},[67,98545,2310],{"class":77},[67,98547,829],{"class":73},[391,98549,98551],{"id":98550},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[58,98553,98555],{"className":60,"code":98554,"language":62,"meta":63,"style":63},"#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",[32,98556,98557,98562,98566,98571,98576,98581,98586,98590,98595,98600,98604],{"__ignoreMap":63},[67,98558,98559],{"class":69,"line":70},[67,98560,98561],{"class":2058},"#logspace函数用于创建一个等比数列，格式如下：\n",[67,98563,98564],{"class":69,"line":191},[67,98565,785],{"class":114},[67,98567,98568],{"class":69,"line":202},[67,98569,98570],{"class":114},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[67,98572,98573],{"class":69,"line":641},[67,98574,98575],{"class":114},"参数为：\n",[67,98577,98578],{"class":69,"line":655},[67,98579,98580],{"class":114},"start:序列的起始位置为：base**start\n",[67,98582,98583],{"class":69,"line":660},[67,98584,98585],{"class":114},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[67,98587,98588],{"class":69,"line":665},[67,98589,98475],{"class":114},[67,98591,98592],{"class":69,"line":677},[67,98593,98594],{"class":114},"endpoint：是否包含 stop 这个值，默认是 True\n",[67,98596,98597],{"class":69,"line":683},[67,98598,98599],{"class":114},"base：对数的底数，默认是 10（常见对数）\n",[67,98601,98602],{"class":69,"line":689},[67,98603,98490],{"class":114},[67,98605,98606],{"class":69,"line":694},[67,98607,785],{"class":114},[19,98609,98610],{},[3317,98611],{"alt":63,"src":98612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98614,98615],{},"logspace()函数中的num参数也是可以不写num=的",[19,98617,98618],{},"endpoint是不可以省略的",[1903,98620,98621],{},"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":63,"searchDepth":191,"depth":191,"links":98623},[98624,98628,98633,98637,98641,98642],{"id":97015,"depth":191,"text":97016,"children":98625},[98626,98627],{"id":97019,"depth":202,"text":97020},{"id":97092,"depth":202,"text":97093},{"id":97124,"depth":191,"text":97125,"children":98629},[98630,98631,98632],{"id":97128,"depth":202,"text":97129},{"id":97310,"depth":202,"text":97311},{"id":97388,"depth":202,"text":97389},{"id":97423,"depth":191,"text":97424,"children":98634},[98635,98636],{"id":97427,"depth":202,"text":97428},{"id":97482,"depth":202,"text":97483},{"id":97578,"depth":191,"text":97579,"children":98638},[98639,98640],{"id":97582,"depth":202,"text":97583},{"id":97594,"depth":202,"text":97595},{"id":97628,"depth":191,"text":97629},{"id":97665,"depth":191,"text":97666,"children":98643},[98644,98645,98646,98647,98648,98649,98650,98651],{"id":97669,"depth":202,"text":97670},{"id":97894,"depth":202,"text":97895},{"id":97901,"depth":202,"text":97902},{"id":98110,"depth":202,"text":98111},{"id":98130,"depth":202,"text":98131},{"id":98266,"depth":202,"text":98267},{"id":98435,"depth":202,"text":98436},{"id":98550,"depth":202,"text":98551},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97007,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98658,"title":98659,"body":98660,"description":25173,"extension":1930,"meta":98753,"navigation":630,"path":98754,"seo":98755,"stem":98756,"__hash__":98757},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98661,"toc":98751},[98662,98665,98668,98671,98674,98677,98680,98683,98686,98689,98692,98695,98697,98700,98703,98708,98711,98714,98748],[10,98663,98659],{"id":98664},"_20魔法命令mprun",[19,98666,98667],{},"逐行分析数据内存的使用情况",[19,98669,98670],{},"语法格式：",[19,98672,98673],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98675,98676],{},"分析结果列如下：",[19,98678,98679],{},"Line行号",[19,98681,98682],{},"Mem usage内存使用大小",[19,98684,98685],{},"increment内存增量",[19,98687,98688],{},"Line content代码内容",[19,98690,98691],{},"补充说明：",[19,98693,98694],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98696,96962],{},[19,98698,98699],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98701,98702],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98704,98705],{},[3317,98706],{"alt":63,"src":98707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98709,98710],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98712,98713],{},"这时候需要重新加载模块",[58,98715,98717],{"className":60,"code":98716,"language":62,"meta":63,"style":63},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[32,98718,98719,98724,98731,98736],{"__ignoreMap":63},[67,98720,98721],{"class":69,"line":70},[67,98722,98723],{"class":2058},"#重新加载模块\n",[67,98725,98726,98728],{"class":69,"line":191},[67,98727,622],{"class":84},[67,98729,98730],{"class":73}," importlib\n",[67,98732,98733],{"class":69,"line":202},[67,98734,98735],{"class":73},"importlib.reload(mprun_test)\n",[67,98737,98738,98740,98743,98745],{"class":69,"line":641},[67,98739,2319],{"class":84},[67,98741,98742],{"class":73},"mprun ",[67,98744,1863],{"class":84},[67,98746,98747],{"class":73},"f mprun_test.fun_test mprun_test.fun_test()\n",[1903,98749,98750],{},"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":63,"searchDepth":191,"depth":191,"links":98752},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98659,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98759,"title":98760,"body":98761,"description":25173,"extension":1930,"meta":98778,"navigation":630,"path":98779,"seo":98780,"stem":98781,"__hash__":98782},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98762,"toc":98776},[98763,98766,98771],[10,98764,98760],{"id":98765},"_3一维数组的索引和切片",[19,98767,98768],{},[3317,98769],{"alt":63,"src":98770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98772,98773],{},[3317,98774],{"alt":63,"src":98775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":63,"searchDepth":191,"depth":191,"links":98777},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98760,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98784,"title":98785,"body":98786,"description":25173,"extension":1930,"meta":99269,"navigation":630,"path":99270,"seo":99271,"stem":99272,"__hash__":99273},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98787,"toc":99267},[98788,98791,98794,98799,98832,98835,98873,98876,98910,98913,99018,99021,99058,99061,99162,99165,99216,99219,99261,99264],[10,98789,98785],{"id":98790},"_4二维数组的索引与切片",[19,98792,98793],{},"①获取指定单个元素",[19,98795,98796],{},[3317,98797],{"alt":63,"src":98798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[58,98800,98802],{"className":60,"code":98801,"language":62,"meta":63,"style":63},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[32,98803,98804,98809,98814,98819],{"__ignoreMap":63},[67,98805,98806],{"class":69,"line":70},[67,98807,98808],{"class":2058},"#获取元素9\n",[67,98810,98811],{"class":69,"line":191},[67,98812,98813],{"class":2058},"#先获取所在行，再获取所在列\n",[67,98815,98816],{"class":69,"line":202},[67,98817,98818],{"class":2058},"#数组[行索引号，列索引号]\n",[67,98820,98821,98824,98826,98828,98830],{"class":69,"line":641},[67,98822,98823],{"class":73},"a[",[67,98825,2209],{"class":77},[67,98827,2369],{"class":73},[67,98829,2077],{"class":77},[67,98831,35015],{"class":73},[19,98833,98834],{},"②获取整行元素",[58,98836,98838],{"className":60,"code":98837,"language":62,"meta":63,"style":63},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[32,98839,98840,98845,98850,98858,98863],{"__ignoreMap":63},[67,98841,98842],{"class":69,"line":70},[67,98843,98844],{"class":2058},"#获取整行 数组[行索引号]\n",[67,98846,98847],{"class":69,"line":191},[67,98848,98849],{"class":2058},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[67,98851,98852,98854,98856],{"class":69,"line":202},[67,98853,98823],{"class":73},[67,98855,2077],{"class":77},[67,98857,35015],{"class":73},[67,98859,98860],{"class":69,"line":641},[67,98861,98862],{"class":2058},"#也可以负索引获取一行\n",[67,98864,98865,98867,98869,98871],{"class":69,"line":655},[67,98866,98823],{"class":73},[67,98868,1863],{"class":84},[67,98870,2209],{"class":77},[67,98872,35015],{"class":73},[19,98874,98875],{},"③获取整列元素",[58,98877,98879],{"className":60,"code":98878,"language":62,"meta":63,"style":63},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[32,98880,98881,98886,98895,98900],{"__ignoreMap":63},[67,98882,98883],{"class":69,"line":70},[67,98884,98885],{"class":2058},"#获取整列 数组名[:,列索引]\n",[67,98887,98888,98891,98893],{"class":69,"line":191},[67,98889,98890],{"class":73},"a[:,",[67,98892,2077],{"class":77},[67,98894,35015],{"class":73},[67,98896,98897],{"class":69,"line":202},[67,98898,98899],{"class":2058},"#也可以负索引获取一列\n",[67,98901,98902,98904,98906,98908],{"class":69,"line":641},[67,98903,98890],{"class":73},[67,98905,1863],{"class":84},[67,98907,2209],{"class":77},[67,98909,35015],{"class":73},[19,98911,98912],{},"④部分行部分列的元素",[58,98914,98916],{"className":60,"code":98915,"language":62,"meta":63,"style":63},"#部分行部分列 数组名[行切片，列切片]\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",[32,98917,98918,98923,98933,98937,98941,98946,98951,98955,98967,98971,98975,98980,98985,98990,98995,98999,99004],{"__ignoreMap":63},[67,98919,98920],{"class":69,"line":70},[67,98921,98922],{"class":2058},"#部分行部分列 数组名[行切片，列切片]\n",[67,98924,98925,98928,98930],{"class":69,"line":191},[67,98926,98927],{"class":73},"a[:",[67,98929,2077],{"class":77},[67,98931,98932],{"class":73},",:]\n",[67,98934,98935],{"class":69,"line":202},[67,98936,95323],{"class":2058},[67,98938,98939],{"class":69,"line":641},[67,98940,95687],{"class":114},[67,98942,98943],{"class":69,"line":655},[67,98944,98945],{"class":114},"array([[ 1,  2,  3,  4,  5,  6],\n",[67,98947,98948],{"class":69,"line":660},[67,98949,98950],{"class":114},"       [ 7,  8,  9, 10, 11, 12]])\n",[67,98952,98953],{"class":69,"line":665},[67,98954,95687],{"class":114},[67,98956,98957,98959,98961,98963,98965],{"class":69,"line":677},[67,98958,98890],{"class":73},[67,98960,2209],{"class":77},[67,98962,2848],{"class":73},[67,98964,1047],{"class":77},[67,98966,35015],{"class":73},[67,98968,98969],{"class":69,"line":683},[67,98970,95323],{"class":2058},[67,98972,98973],{"class":69,"line":689},[67,98974,95687],{"class":114},[67,98976,98977],{"class":69,"line":694},[67,98978,98979],{"class":114},"array([[ 2,  3,  4],\n",[67,98981,98982],{"class":69,"line":700},[67,98983,98984],{"class":114},"       [ 8,  9, 10],\n",[67,98986,98987],{"class":69,"line":706},[67,98988,98989],{"class":114},"       [14, 15, 16],\n",[67,98991,98992],{"class":69,"line":712},[67,98993,98994],{"class":114},"       [20, 21, 22]])\n",[67,98996,98997],{"class":69,"line":717},[67,98998,95687],{"class":114},[67,99000,99001],{"class":69,"line":723},[67,99002,99003],{"class":2058},"#对列行同时进行切片，使用了step参数\n",[67,99005,99006,99009,99011,99014,99016],{"class":69,"line":729},[67,99007,99008],{"class":73},"a[::",[67,99010,2077],{"class":77},[67,99012,99013],{"class":73},",::",[67,99015,2077],{"class":77},[67,99017,35015],{"class":73},[19,99019,99020],{},"⑤同时获取两个元素",[58,99022,99024],{"className":60,"code":99023,"language":62,"meta":63,"style":63},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[32,99025,99026,99031,99036],{"__ignoreMap":63},[67,99027,99028],{"class":69,"line":70},[67,99029,99030],{"class":2058},"#同时获取第三行第二列，第四行第一列\n",[67,99032,99033],{"class":69,"line":191},[67,99034,99035],{"class":2058},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[67,99037,99038,99041,99043,99045,99047,99049,99051,99053,99055],{"class":69,"line":202},[67,99039,99040],{"class":73},"a[(",[67,99042,2077],{"class":77},[67,99044,2369],{"class":73},[67,99046,2071],{"class":77},[67,99048,44015],{"class":73},[67,99050,2209],{"class":77},[67,99052,2369],{"class":73},[67,99054,78],{"class":77},[67,99056,99057],{"class":73},")]\n",[19,99059,99060],{},"⑥切片，对行进行反向获取",[58,99062,99064],{"className":60,"code":99063,"language":62,"meta":63,"style":63},"#切片 对所有行进行反向获取\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",[32,99065,99066,99071,99081,99085,99089,99094,99099,99104,99109,99113,99118,99134,99138,99143,99148,99153,99158],{"__ignoreMap":63},[67,99067,99068],{"class":69,"line":70},[67,99069,99070],{"class":2058},"#切片 对所有行进行反向获取\n",[67,99072,99073,99075,99077,99079],{"class":69,"line":191},[67,99074,99008],{"class":73},[67,99076,1863],{"class":84},[67,99078,2209],{"class":77},[67,99080,35015],{"class":73},[67,99082,99083],{"class":69,"line":202},[67,99084,95323],{"class":2058},[67,99086,99087],{"class":69,"line":641},[67,99088,95687],{"class":114},[67,99090,99091],{"class":69,"line":655},[67,99092,99093],{"class":114},"array([[19, 20, 21, 22, 23, 24],\n",[67,99095,99096],{"class":69,"line":660},[67,99097,99098],{"class":114},"       [13, 14, 15, 16, 17, 18],\n",[67,99100,99101],{"class":69,"line":665},[67,99102,99103],{"class":114},"       [ 7,  8,  9, 10, 11, 12],\n",[67,99105,99106],{"class":69,"line":677},[67,99107,99108],{"class":114},"       [ 1,  2,  3,  4,  5,  6]])\n",[67,99110,99111],{"class":69,"line":683},[67,99112,95687],{"class":114},[67,99114,99115],{"class":69,"line":689},[67,99116,99117],{"class":2058},"#对行列都进行反向切片获取\n",[67,99119,99120,99122,99124,99126,99128,99130,99132],{"class":69,"line":694},[67,99121,99008],{"class":73},[67,99123,1863],{"class":84},[67,99125,2209],{"class":77},[67,99127,99013],{"class":73},[67,99129,1863],{"class":84},[67,99131,2209],{"class":77},[67,99133,35015],{"class":73},[67,99135,99136],{"class":69,"line":700},[67,99137,95687],{"class":114},[67,99139,99140],{"class":69,"line":706},[67,99141,99142],{"class":114},"array([[24, 23, 22, 21, 20, 19],\n",[67,99144,99145],{"class":69,"line":712},[67,99146,99147],{"class":114},"       [18, 17, 16, 15, 14, 13],\n",[67,99149,99150],{"class":69,"line":717},[67,99151,99152],{"class":114},"       [12, 11, 10,  9,  8,  7],\n",[67,99154,99155],{"class":69,"line":723},[67,99156,99157],{"class":114},"       [ 6,  5,  4,  3,  2,  1]])\n",[67,99159,99160],{"class":69,"line":729},[67,99161,95687],{"class":114},[19,99163,99164],{},"⑦修改元素",[58,99166,99168],{"className":60,"code":99167,"language":62,"meta":63,"style":63},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[32,99169,99170,99175,99193,99198],{"__ignoreMap":63},[67,99171,99172],{"class":69,"line":70},[67,99173,99174],{"class":2058},"#获取前两行和前两列\n",[67,99176,99177,99180,99182,99184,99186,99189,99191],{"class":69,"line":191},[67,99178,99179],{"class":73},"sub_a",[67,99181,85],{"class":84},[67,99183,98927],{"class":73},[67,99185,2077],{"class":77},[67,99187,99188],{"class":73},",:",[67,99190,2077],{"class":77},[67,99192,35015],{"class":73},[67,99194,99195],{"class":69,"line":202},[67,99196,99197],{"class":2058},"#修改sub_a第一个元素的值\n",[67,99199,99200,99203,99205,99207,99209,99211,99213],{"class":69,"line":641},[67,99201,99202],{"class":73},"sub_a[",[67,99204,78],{"class":77},[67,99206,2369],{"class":73},[67,99208,78],{"class":77},[67,99210,2928],{"class":73},[67,99212,85],{"class":84},[67,99214,99215],{"class":77},"100\n",[19,99217,99218],{},"⑧数组复制copy()",[58,99220,99222],{"className":60,"code":99221,"language":62,"meta":63,"style":63},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[32,99223,99224,99229,99239,99244],{"__ignoreMap":63},[67,99225,99226],{"class":69,"line":70},[67,99227,99228],{"class":2058},"#数组复制\n",[67,99230,99231,99234,99236],{"class":69,"line":191},[67,99232,99233],{"class":73},"copy_a",[67,99235,85],{"class":84},[67,99237,99238],{"class":73},"np.copy(sub_a)\n",[67,99240,99241],{"class":69,"line":202},[67,99242,99243],{"class":2058},"#修改copy_a后不影响原数组\n",[67,99245,99246,99249,99251,99253,99255,99257,99259],{"class":69,"line":641},[67,99247,99248],{"class":73},"copy_a[",[67,99250,78],{"class":77},[67,99252,2369],{"class":73},[67,99254,78],{"class":77},[67,99256,2928],{"class":73},[67,99258,85],{"class":84},[67,99260,99215],{"class":77},[19,99262,99263],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1903,99265,99266],{},"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":63,"searchDepth":191,"depth":191,"links":99268},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98785,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99275,"title":99276,"body":99277,"description":25173,"extension":1930,"meta":99769,"navigation":630,"path":99770,"seo":99771,"stem":99772,"__hash__":99773},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99278,"toc":99761},[99279,99282,99286,99289,99292,99345,99348,99373,99376,99395,99415,99418,99434,99438,99484,99488,99530,99534,99537,99540,99543,99546,99549,99611,99671,99675,99678,99735,99739,99744,99753,99758],[10,99280,99276],{"id":99281},"_5改变数组的维度",[14,99283,99285],{"id":99284},"_51-使用reshape","5.1 使用reshape()",[19,99287,99288],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99290,99291],{},"①一维数组转换为二维数组",[58,99293,99295],{"className":60,"code":99294,"language":62,"meta":63,"style":63},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[32,99296,99297,99313,99318,99323,99328],{"__ignoreMap":63},[67,99298,99299,99301,99303,99305,99307,99309,99311],{"class":69,"line":70},[67,99300,2230],{"class":73},[67,99302,85],{"class":84},[67,99304,94761],{"class":73},[67,99306,2209],{"class":77},[67,99308,2369],{"class":73},[67,99310,2513],{"class":77},[67,99312,829],{"class":73},[67,99314,99315],{"class":69,"line":191},[67,99316,99317],{"class":2058},"#将一维数组进行转换\n",[67,99319,99320],{"class":69,"line":202},[67,99321,99322],{"class":2058},"#注意点：元素个数不可以变\n",[67,99324,99325],{"class":69,"line":641},[67,99326,99327],{"class":2058},"#转换维度要保持一致，不一致就异常！！！\n",[67,99329,99330,99332,99334,99337,99339,99341,99343],{"class":69,"line":655},[67,99331,95065],{"class":73},[67,99333,85],{"class":84},[67,99335,99336],{"class":73},"a.reshape(",[67,99338,2077],{"class":77},[67,99340,2369],{"class":73},[67,99342,2335],{"class":77},[67,99344,829],{"class":73},[19,99346,99347],{},"②一维数组转换为三维数组",[58,99349,99351],{"className":60,"code":99350,"language":62,"meta":63,"style":63},"aaa=a.reshape(2,3,2)\n",[32,99352,99353],{"__ignoreMap":63},[67,99354,99355,99357,99359,99361,99363,99365,99367,99369,99371],{"class":69,"line":70},[67,99356,97280],{"class":73},[67,99358,85],{"class":84},[67,99360,99336],{"class":73},[67,99362,2077],{"class":77},[67,99364,2369],{"class":73},[67,99366,2071],{"class":77},[67,99368,2369],{"class":73},[67,99370,2077],{"class":77},[67,99372,829],{"class":73},[19,99374,99375],{},"③二维数组转化为一维数组",[58,99377,99379],{"className":60,"code":99378,"language":62,"meta":63,"style":63},"#知道元素个数：\naa.reshape(12)\n",[32,99380,99381,99386],{"__ignoreMap":63},[67,99382,99383],{"class":69,"line":70},[67,99384,99385],{"class":2058},"#知道元素个数：\n",[67,99387,99388,99391,99393],{"class":69,"line":191},[67,99389,99390],{"class":73},"aa.reshape(",[67,99392,2488],{"class":77},[67,99394,829],{"class":73},[58,99396,99398],{"className":60,"code":99397,"language":62,"meta":63,"style":63},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[32,99399,99400,99405],{"__ignoreMap":63},[67,99401,99402],{"class":69,"line":70},[67,99403,99404],{"class":2058},"#不知道元素个数，参数传递-1\n",[67,99406,99407,99409,99411,99413],{"class":69,"line":191},[67,99408,99390],{"class":73},[67,99410,1863],{"class":84},[67,99412,2209],{"class":77},[67,99414,829],{"class":73},[19,99416,99417],{},"④三维数组转换为一维数组",[58,99419,99421],{"className":60,"code":99420,"language":62,"meta":63,"style":63},"aaa.reshape(-1)\n",[32,99422,99423],{"__ignoreMap":63},[67,99424,99425,99428,99430,99432],{"class":69,"line":70},[67,99426,99427],{"class":73},"aaa.reshape(",[67,99429,1863],{"class":84},[67,99431,2209],{"class":77},[67,99433,829],{"class":73},[14,99435,99437],{"id":99436},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[58,99439,99441],{"className":60,"code":99440,"language":62,"meta":63,"style":63},"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",[32,99442,99443,99470,99475,99479],{"__ignoreMap":63},[67,99444,99445,99447,99449,99451,99453,99455,99457,99459,99461,99463,99465,99467],{"class":69,"line":70},[67,99446,95065],{"class":73},[67,99448,85],{"class":84},[67,99450,94761],{"class":73},[67,99452,2209],{"class":77},[67,99454,2369],{"class":73},[67,99456,2513],{"class":77},[67,99458,94766],{"class":73},[67,99460,2077],{"class":77},[67,99462,2369],{"class":73},[67,99464,2335],{"class":77},[67,99466,2420],{"class":73},[67,99468,99469],{"class":2058},"#转换为2行6列的数组\n",[67,99471,99472],{"class":69,"line":191},[67,99473,99474],{"class":73},"aa.revel()\n",[67,99476,99477],{"class":69,"line":202},[67,99478,95323],{"class":2058},[67,99480,99481],{"class":69,"line":641},[67,99482,99483],{"class":2058},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99485,99487],{"id":99486},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[58,99489,99491],{"className":60,"code":99490,"language":62,"meta":63,"style":63},"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",[32,99492,99493,99517,99522,99526],{"__ignoreMap":63},[67,99494,99495,99497,99499,99501,99503,99505,99507,99509,99511,99513,99515],{"class":69,"line":70},[67,99496,95065],{"class":73},[67,99498,85],{"class":84},[67,99500,94761],{"class":73},[67,99502,2209],{"class":77},[67,99504,2369],{"class":73},[67,99506,2513],{"class":77},[67,99508,94766],{"class":73},[67,99510,2077],{"class":77},[67,99512,2369],{"class":73},[67,99514,2335],{"class":77},[67,99516,829],{"class":73},[67,99518,99519],{"class":69,"line":191},[67,99520,99521],{"class":73},"aa.flatten()\n",[67,99523,99524],{"class":69,"line":202},[67,99525,95323],{"class":2058},[67,99527,99528],{"class":69,"line":641},[67,99529,99483],{"class":2058},[14,99531,99533],{"id":99532},"_54-使用resize","5.4 使用resize()",[19,99535,99536],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99538,99539],{},"通过resize方法可以改变数组的维度",[19,99541,99542],{},"#resize修改数组维度",[19,99544,99545],{},"#以元组的形式指定形状",[19,99547,99548],{},"#改变的是原数组",[58,99550,99552],{"className":60,"code":99551,"language":62,"meta":63,"style":63},"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",[32,99553,99554,99570,99590,99603,99607],{"__ignoreMap":63},[67,99555,99556,99558,99560,99562,99564,99566,99568],{"class":69,"line":70},[67,99557,2230],{"class":73},[67,99559,85],{"class":84},[67,99561,94761],{"class":73},[67,99563,2209],{"class":77},[67,99565,2369],{"class":73},[67,99567,2513],{"class":77},[67,99569,829],{"class":73},[67,99571,99572,99575,99577,99579,99581,99583,99585,99587],{"class":69,"line":191},[67,99573,99574],{"class":73},"a.shape",[67,99576,85],{"class":84},[67,99578,854],{"class":73},[67,99580,2077],{"class":77},[67,99582,2369],{"class":73},[67,99584,2335],{"class":77},[67,99586,2420],{"class":73},[67,99588,99589],{"class":2058},"#改变了原数组\n",[67,99591,99592,99594,99596,99599,99601],{"class":69,"line":202},[67,99593,2230],{"class":73},[67,99595,85],{"class":84},[67,99597,99598],{"class":73},"resize((",[67,99600,2488],{"class":77},[67,99602,1050],{"class":73},[67,99604,99605],{"class":69,"line":641},[67,99606,95323],{"class":2058},[67,99608,99609],{"class":69,"line":655},[67,99610,99483],{"class":2058},[58,99612,99614],{"className":60,"code":99613,"language":62,"meta":63,"style":63},"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",[32,99615,99616,99629,99633,99637,99642,99647,99652,99657,99662,99667],{"__ignoreMap":63},[67,99617,99618,99621,99623,99625,99627],{"class":69,"line":70},[67,99619,99620],{"class":73},"a.resize((",[67,99622,2335],{"class":77},[67,99624,2369],{"class":73},[67,99626,2077],{"class":77},[67,99628,1050],{"class":73},[67,99630,99631],{"class":69,"line":191},[67,99632,95323],{"class":2058},[67,99634,99635],{"class":69,"line":202},[67,99636,95687],{"class":114},[67,99638,99639],{"class":69,"line":641},[67,99640,99641],{"class":114},"array([[ 1,  2],\n",[67,99643,99644],{"class":69,"line":655},[67,99645,99646],{"class":114},"       [ 3,  4],\n",[67,99648,99649],{"class":69,"line":660},[67,99650,99651],{"class":114},"       [ 5,  6],\n",[67,99653,99654],{"class":69,"line":665},[67,99655,99656],{"class":114},"       [ 7,  8],\n",[67,99658,99659],{"class":69,"line":677},[67,99660,99661],{"class":114},"       [ 9, 10],\n",[67,99663,99664],{"class":69,"line":683},[67,99665,99666],{"class":114},"       [11, 12]])\n",[67,99668,99669],{"class":69,"line":689},[67,99670,95687],{"class":114},[14,99672,99674],{"id":99673},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99676,99677],{},"改变了原数组",[58,99679,99681],{"className":60,"code":99680,"language":62,"meta":63,"style":63},"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",[32,99682,99683,99699,99715,99719,99723,99727,99731],{"__ignoreMap":63},[67,99684,99685,99687,99689,99691,99693,99695,99697],{"class":69,"line":70},[67,99686,2230],{"class":73},[67,99688,85],{"class":84},[67,99690,94761],{"class":73},[67,99692,2209],{"class":77},[67,99694,2369],{"class":73},[67,99696,2513],{"class":77},[67,99698,829],{"class":73},[67,99700,99701,99703,99705,99707,99709,99711,99713],{"class":69,"line":191},[67,99702,99574],{"class":73},[67,99704,85],{"class":84},[67,99706,854],{"class":73},[67,99708,2077],{"class":77},[67,99710,2369],{"class":73},[67,99712,2335],{"class":77},[67,99714,829],{"class":73},[67,99716,99717],{"class":69,"line":202},[67,99718,95323],{"class":2058},[67,99720,99721],{"class":69,"line":641},[67,99722,95687],{"class":114},[67,99724,99725],{"class":69,"line":655},[67,99726,98945],{"class":114},[67,99728,99729],{"class":69,"line":660},[67,99730,98950],{"class":114},[67,99732,99733],{"class":69,"line":665},[67,99734,95687],{"class":114},[14,99736,99738],{"id":99737},"_56-重要比较","5.6 重要比较：",[19,99740,99741],{},[3317,99742],{"alt":63,"src":99743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99745,99746,99747,99749,99750,99752],{},"口诀：NumPy 函数要么用 ",[32,99748,97720],{},"，要么用 ",[32,99751,33268],{},"，创建结构用 shape，造数据用 size",[19,99754,99755],{},[3317,99756],{"alt":63,"src":99757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1903,99759,99760],{},"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":63,"searchDepth":191,"depth":191,"links":99762},[99763,99764,99765,99766,99767,99768],{"id":99284,"depth":191,"text":99285},{"id":99436,"depth":191,"text":99437},{"id":99486,"depth":191,"text":99487},{"id":99532,"depth":191,"text":99533},{"id":99673,"depth":191,"text":99674},{"id":99737,"depth":191,"text":99738},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99276,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99775,"title":99776,"body":99777,"description":25173,"extension":1930,"meta":100849,"navigation":630,"path":100850,"seo":100851,"stem":100852,"__hash__":100853},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99778,"toc":100843},[99779,99782,99786,99789,99792,99795,99860,99863,99903,99906,99988,99991,99996,100018,100020,100025,100030,100033,100036,100191,100194,100396,100400,100403,100406,100474,100476,100481,100484,100487,100567,100571,100574,100576,100649,100651,100656,100658,100738,100742,100745,100748,100751,100754,100757,100760,100840],[10,99780,99776],{"id":99781},"_6数组的拼接",[14,99783,99785],{"id":99784},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99787,99788],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99790,99791],{},"函数内部传两个数列构成的数列或者元组",[19,99793,99794],{},"①一维数组的拼接",[58,99796,99798],{"className":60,"code":99797,"language":62,"meta":63,"style":63},"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",[32,99799,99800,99820,99840,99845,99850,99855],{"__ignoreMap":63},[67,99801,99802,99804,99806,99808,99810,99812,99814,99816,99818],{"class":69,"line":70},[67,99803,2230],{"class":73},[67,99805,85],{"class":84},[67,99807,94783],{"class":73},[67,99809,2209],{"class":77},[67,99811,2369],{"class":73},[67,99813,2077],{"class":77},[67,99815,2369],{"class":73},[67,99817,2071],{"class":77},[67,99819,6476],{"class":73},[67,99821,99822,99824,99826,99828,99830,99832,99834,99836,99838],{"class":69,"line":191},[67,99823,2255],{"class":73},[67,99825,85],{"class":84},[67,99827,94783],{"class":73},[67,99829,1047],{"class":77},[67,99831,2369],{"class":73},[67,99833,2310],{"class":77},[67,99835,2369],{"class":73},[67,99837,2335],{"class":77},[67,99839,6476],{"class":73},[67,99841,99842],{"class":69,"line":202},[67,99843,99844],{"class":2058},"#调用concatenate进行数组拼接\n",[67,99846,99847],{"class":69,"line":641},[67,99848,99849],{"class":73},"np.concatenate((a,b))\n",[67,99851,99852],{"class":69,"line":655},[67,99853,99854],{"class":2058},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[67,99856,99857],{"class":69,"line":660},[67,99858,99859],{"class":2058},"#np.concatenate([a,b])\n",[19,99861,99862],{},"②一维多个数组拼接",[58,99864,99866],{"className":60,"code":99865,"language":62,"meta":63,"style":63},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[32,99867,99868,99873,99893,99898],{"__ignoreMap":63},[67,99869,99870],{"class":69,"line":70},[67,99871,99872],{"class":2058},"#也可以多个数组进行拼接\n",[67,99874,99875,99877,99879,99881,99883,99885,99887,99889,99891],{"class":69,"line":191},[67,99876,2280],{"class":73},[67,99878,85],{"class":84},[67,99880,94783],{"class":73},[67,99882,2437],{"class":77},[67,99884,2369],{"class":73},[67,99886,2462],{"class":77},[67,99888,2369],{"class":73},[67,99890,2513],{"class":77},[67,99892,6476],{"class":73},[67,99894,99895],{"class":69,"line":202},[67,99896,99897],{"class":73},"c\n",[67,99899,99900],{"class":69,"line":641},[67,99901,99902],{"class":73},"np.concatenate((a,b,c))\n",[19,99904,99905],{},"③二维数组拼接",[58,99907,99909],{"className":60,"code":99908,"language":62,"meta":63,"style":63},"#二维数组使用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",[32,99910,99911,99916,99940,99965,99970,99975],{"__ignoreMap":63},[67,99912,99913],{"class":69,"line":70},[67,99914,99915],{"class":2058},"#二维数组使用concatenate进行拼接\n",[67,99917,99918,99920,99922,99924,99926,99928,99930,99932,99934,99936,99938],{"class":69,"line":191},[67,99919,95065],{"class":73},[67,99921,85],{"class":84},[67,99923,94761],{"class":73},[67,99925,2209],{"class":77},[67,99927,2369],{"class":73},[67,99929,2513],{"class":77},[67,99931,94766],{"class":73},[67,99933,2071],{"class":77},[67,99935,2369],{"class":73},[67,99937,1047],{"class":77},[67,99939,829],{"class":73},[67,99941,99942,99945,99947,99949,99951,99953,99955,99957,99959,99961,99963],{"class":69,"line":202},[67,99943,99944],{"class":73},"bb",[67,99946,85],{"class":84},[67,99948,94761],{"class":73},[67,99950,2328],{"class":77},[67,99952,2369],{"class":73},[67,99954,2631],{"class":77},[67,99956,94766],{"class":73},[67,99958,2071],{"class":77},[67,99960,2369],{"class":73},[67,99962,1047],{"class":77},[67,99964,829],{"class":73},[67,99966,99967],{"class":69,"line":641},[67,99968,99969],{"class":2058},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[67,99971,99972],{"class":69,"line":655},[67,99973,99974],{"class":2058},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[67,99976,99977,99980,99982,99984,99986],{"class":69,"line":660},[67,99978,99979],{"class":73},"np.concatenate((aa,bb),",[67,99981,49282],{"class":7033},[67,99983,85],{"class":84},[67,99985,78],{"class":77},[67,99987,829],{"class":73},[19,99989,99990],{},"结果：",[19,99992,99993],{},[3317,99994],{"alt":63,"src":99995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[58,99997,99999],{"className":60,"code":99998,"language":62,"meta":63,"style":63},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[32,100000,100001,100006],{"__ignoreMap":63},[67,100002,100003],{"class":69,"line":70},[67,100004,100005],{"class":2058},"#指定axis为1进行拼接\n",[67,100007,100008,100010,100012,100014,100016],{"class":69,"line":191},[67,100009,99979],{"class":73},[67,100011,49282],{"class":7033},[67,100013,85],{"class":84},[67,100015,2209],{"class":77},[67,100017,829],{"class":73},[19,100019,99990],{},[19,100021,100022],{},[3317,100023],{"alt":63,"src":100024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100026,100027],{},[2144,100028,100029],{},"二维数组总结：0竖着方向，1横着方向",[19,100031,100032],{},"④三维数组拼接",[19,100034,100035],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[58,100037,100039],{"className":60,"code":100038,"language":62,"meta":63,"style":63},"#两个三行六列\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",[32,100040,100041,100046,100074,100104,100109,100126,100131,100136,100141,100158,100163,100168,100173,100186],{"__ignoreMap":63},[67,100042,100043],{"class":69,"line":70},[67,100044,100045],{"class":2058},"#两个三行六列\n",[67,100047,100048,100050,100052,100054,100056,100058,100060,100062,100064,100066,100068,100070,100072],{"class":69,"line":191},[67,100049,97280],{"class":73},[67,100051,85],{"class":84},[67,100053,94761],{"class":73},[67,100055,2209],{"class":77},[67,100057,2369],{"class":73},[67,100059,2316],{"class":77},[67,100061,94766],{"class":73},[67,100063,2077],{"class":77},[67,100065,2369],{"class":73},[67,100067,2071],{"class":77},[67,100069,2369],{"class":73},[67,100071,2335],{"class":77},[67,100073,829],{"class":73},[67,100075,100076,100079,100081,100083,100085,100087,100090,100092,100094,100096,100098,100100,100102],{"class":69,"line":202},[67,100077,100078],{"class":73},"bbb",[67,100080,85],{"class":84},[67,100082,94761],{"class":73},[67,100084,2328],{"class":77},[67,100086,2369],{"class":73},[67,100088,100089],{"class":77},"137",[67,100091,94766],{"class":73},[67,100093,2077],{"class":77},[67,100095,2369],{"class":73},[67,100097,2071],{"class":77},[67,100099,2369],{"class":73},[67,100101,2335],{"class":77},[67,100103,829],{"class":73},[67,100105,100106],{"class":69,"line":641},[67,100107,100108],{"class":2058},"#axis=0\n",[67,100110,100111,100113,100115,100118,100120,100122,100124],{"class":69,"line":655},[67,100112,2684],{"class":73},[67,100114,85],{"class":84},[67,100116,100117],{"class":73},"np.concatenate((aaa,bbb),",[67,100119,49282],{"class":7033},[67,100121,85],{"class":84},[67,100123,78],{"class":77},[67,100125,829],{"class":73},[67,100127,100128],{"class":69,"line":660},[67,100129,100130],{"class":73},"s.shape\n",[67,100132,100133],{"class":69,"line":665},[67,100134,100135],{"class":2058},"#输出：(4,3,6)\n",[67,100137,100138],{"class":69,"line":677},[67,100139,100140],{"class":2058},"#axis=1\n",[67,100142,100143,100146,100148,100150,100152,100154,100156],{"class":69,"line":683},[67,100144,100145],{"class":73},"ss",[67,100147,85],{"class":84},[67,100149,100117],{"class":73},[67,100151,49282],{"class":7033},[67,100153,85],{"class":84},[67,100155,2209],{"class":77},[67,100157,829],{"class":73},[67,100159,100160],{"class":69,"line":689},[67,100161,100162],{"class":73},"ss.shape\n",[67,100164,100165],{"class":69,"line":694},[67,100166,100167],{"class":2058},"#输出：(2,6,6)\n",[67,100169,100170],{"class":69,"line":700},[67,100171,100172],{"class":2058},"#axis=2\n",[67,100174,100175,100177,100179,100181,100183],{"class":69,"line":706},[67,100176,100117],{"class":73},[67,100178,49282],{"class":7033},[67,100180,85],{"class":84},[67,100182,2077],{"class":77},[67,100184,100185],{"class":73},").shape\n",[67,100187,100188],{"class":69,"line":712},[67,100189,100190],{"class":2058},"#输出：（2，3，12）\n",[19,100192,100193],{},"⑤四维数组拼接",[58,100195,100197],{"className":60,"code":100196,"language":62,"meta":63,"style":63},"#两个三行六列\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",[32,100198,100199,100203,100231,100259,100284,100310,100314,100327,100332,100336,100348,100353,100357,100369,100374,100379,100391],{"__ignoreMap":63},[67,100200,100201],{"class":69,"line":70},[67,100202,100045],{"class":2058},[67,100204,100205,100207,100209,100211,100213,100215,100217,100219,100221,100223,100225,100227,100229],{"class":69,"line":191},[67,100206,97280],{"class":73},[67,100208,85],{"class":84},[67,100210,94761],{"class":73},[67,100212,2209],{"class":77},[67,100214,2369],{"class":73},[67,100216,2316],{"class":77},[67,100218,94766],{"class":73},[67,100220,2077],{"class":77},[67,100222,2369],{"class":73},[67,100224,2071],{"class":77},[67,100226,2369],{"class":73},[67,100228,2335],{"class":77},[67,100230,829],{"class":73},[67,100232,100233,100235,100237,100239,100241,100243,100245,100247,100249,100251,100253,100255,100257],{"class":69,"line":202},[67,100234,100078],{"class":73},[67,100236,85],{"class":84},[67,100238,94761],{"class":73},[67,100240,2328],{"class":77},[67,100242,2369],{"class":73},[67,100244,100089],{"class":77},[67,100246,94766],{"class":73},[67,100248,2077],{"class":77},[67,100250,2369],{"class":73},[67,100252,2071],{"class":77},[67,100254,2369],{"class":73},[67,100256,2335],{"class":77},[67,100258,829],{"class":73},[67,100260,100261,100264,100266,100268,100270,100272,100274,100276,100278,100280,100282],{"class":69,"line":641},[67,100262,100263],{"class":73},"aaaa",[67,100265,85],{"class":84},[67,100267,99427],{"class":73},[67,100269,2077],{"class":77},[67,100271,2369],{"class":73},[67,100273,2071],{"class":77},[67,100275,2369],{"class":73},[67,100277,2071],{"class":77},[67,100279,2369],{"class":73},[67,100281,2077],{"class":77},[67,100283,829],{"class":73},[67,100285,100286,100289,100291,100294,100296,100298,100300,100302,100304,100306,100308],{"class":69,"line":655},[67,100287,100288],{"class":73},"bbbb",[67,100290,85],{"class":84},[67,100292,100293],{"class":73},"bbb.reshape(",[67,100295,2077],{"class":77},[67,100297,2369],{"class":73},[67,100299,2071],{"class":77},[67,100301,2369],{"class":73},[67,100303,2071],{"class":77},[67,100305,2369],{"class":73},[67,100307,2077],{"class":77},[67,100309,829],{"class":73},[67,100311,100312],{"class":69,"line":660},[67,100313,100108],{"class":2058},[67,100315,100316,100319,100321,100323,100325],{"class":69,"line":665},[67,100317,100318],{"class":73},"np.concatenate((aaaa,bbbb),",[67,100320,49282],{"class":7033},[67,100322,85],{"class":84},[67,100324,78],{"class":77},[67,100326,100185],{"class":73},[67,100328,100329],{"class":69,"line":677},[67,100330,100331],{"class":2058},"#结果：（4，3，3，2）\n",[67,100333,100334],{"class":69,"line":683},[67,100335,100140],{"class":2058},[67,100337,100338,100340,100342,100344,100346],{"class":69,"line":689},[67,100339,100318],{"class":73},[67,100341,49282],{"class":7033},[67,100343,85],{"class":84},[67,100345,2209],{"class":77},[67,100347,100185],{"class":73},[67,100349,100350],{"class":69,"line":694},[67,100351,100352],{"class":2058},"#结果：（2，6，3，2）\n",[67,100354,100355],{"class":69,"line":700},[67,100356,100172],{"class":2058},[67,100358,100359,100361,100363,100365,100367],{"class":69,"line":706},[67,100360,100318],{"class":73},[67,100362,49282],{"class":7033},[67,100364,85],{"class":84},[67,100366,2077],{"class":77},[67,100368,100185],{"class":73},[67,100370,100371],{"class":69,"line":712},[67,100372,100373],{"class":2058},"#结果：（2，3，6，2）\n",[67,100375,100376],{"class":69,"line":717},[67,100377,100378],{"class":2058},"#axis=3\n",[67,100380,100381,100383,100385,100387,100389],{"class":69,"line":723},[67,100382,100318],{"class":73},[67,100384,49282],{"class":7033},[67,100386,85],{"class":84},[67,100388,2071],{"class":77},[67,100390,100185],{"class":73},[67,100392,100393],{"class":69,"line":729},[67,100394,100395],{"class":2058},"#结果：（2，3，3，4）\n",[14,100397,100399],{"id":100398},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100401,100402],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100404,100405],{},"①二维数组",[58,100407,100409],{"className":60,"code":100408,"language":62,"meta":63,"style":63},"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",[32,100410,100411,100435,100459,100464,100469],{"__ignoreMap":63},[67,100412,100413,100415,100417,100419,100421,100423,100425,100427,100429,100431,100433],{"class":69,"line":70},[67,100414,95065],{"class":73},[67,100416,85],{"class":84},[67,100418,94761],{"class":73},[67,100420,2209],{"class":77},[67,100422,2369],{"class":73},[67,100424,2513],{"class":77},[67,100426,94766],{"class":73},[67,100428,2071],{"class":77},[67,100430,2369],{"class":73},[67,100432,1047],{"class":77},[67,100434,829],{"class":73},[67,100436,100437,100439,100441,100443,100445,100447,100449,100451,100453,100455,100457],{"class":69,"line":191},[67,100438,99944],{"class":73},[67,100440,85],{"class":84},[67,100442,94761],{"class":73},[67,100444,2328],{"class":77},[67,100446,2369],{"class":73},[67,100448,2631],{"class":77},[67,100450,94766],{"class":73},[67,100452,2071],{"class":77},[67,100454,2369],{"class":73},[67,100456,1047],{"class":77},[67,100458,829],{"class":73},[67,100460,100461],{"class":69,"line":202},[67,100462,100463],{"class":73},"np.hstack((aa,bb))\n",[67,100465,100466],{"class":69,"line":641},[67,100467,100468],{"class":2058},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[67,100470,100471],{"class":69,"line":655},[67,100472,100473],{"class":2058},"#np.hstack([aa,bb])\n",[19,100475,99990],{},[19,100477,100478],{},[3317,100479],{"alt":63,"src":100480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100482,100483],{},"等效于concatenate()函数中axis=1时的情况",[19,100485,100486],{},"②三维数组",[58,100488,100490],{"className":60,"code":100489,"language":62,"meta":63,"style":63},"#两个三行六列\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",[32,100491,100492,100496,100524,100552,100557,100562],{"__ignoreMap":63},[67,100493,100494],{"class":69,"line":70},[67,100495,100045],{"class":2058},[67,100497,100498,100500,100502,100504,100506,100508,100510,100512,100514,100516,100518,100520,100522],{"class":69,"line":191},[67,100499,97280],{"class":73},[67,100501,85],{"class":84},[67,100503,94761],{"class":73},[67,100505,2209],{"class":77},[67,100507,2369],{"class":73},[67,100509,2316],{"class":77},[67,100511,94766],{"class":73},[67,100513,2077],{"class":77},[67,100515,2369],{"class":73},[67,100517,2071],{"class":77},[67,100519,2369],{"class":73},[67,100521,2335],{"class":77},[67,100523,829],{"class":73},[67,100525,100526,100528,100530,100532,100534,100536,100538,100540,100542,100544,100546,100548,100550],{"class":69,"line":202},[67,100527,100078],{"class":73},[67,100529,85],{"class":84},[67,100531,94761],{"class":73},[67,100533,2328],{"class":77},[67,100535,2369],{"class":73},[67,100537,100089],{"class":77},[67,100539,94766],{"class":73},[67,100541,2077],{"class":77},[67,100543,2369],{"class":73},[67,100545,2071],{"class":77},[67,100547,2369],{"class":73},[67,100549,2335],{"class":77},[67,100551,829],{"class":73},[67,100553,100554],{"class":69,"line":641},[67,100555,100556],{"class":2058},"#使用hstack\n",[67,100558,100559],{"class":69,"line":655},[67,100560,100561],{"class":73},"np.hstack((aaa,bbb)).shape\n",[67,100563,100564],{"class":69,"line":660},[67,100565,100566],{"class":2058},"#输出：（2，6，6）\n",[14,100568,100570],{"id":100569},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100572,100573],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100575,100405],{},[58,100577,100579],{"className":60,"code":100578,"language":62,"meta":63,"style":63},"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",[32,100580,100581,100605,100629,100634,100639,100644],{"__ignoreMap":63},[67,100582,100583,100585,100587,100589,100591,100593,100595,100597,100599,100601,100603],{"class":69,"line":70},[67,100584,95065],{"class":73},[67,100586,85],{"class":84},[67,100588,94761],{"class":73},[67,100590,2209],{"class":77},[67,100592,2369],{"class":73},[67,100594,2513],{"class":77},[67,100596,94766],{"class":73},[67,100598,2071],{"class":77},[67,100600,2369],{"class":73},[67,100602,1047],{"class":77},[67,100604,829],{"class":73},[67,100606,100607,100609,100611,100613,100615,100617,100619,100621,100623,100625,100627],{"class":69,"line":191},[67,100608,99944],{"class":73},[67,100610,85],{"class":84},[67,100612,94761],{"class":73},[67,100614,2328],{"class":77},[67,100616,2369],{"class":73},[67,100618,2631],{"class":77},[67,100620,94766],{"class":73},[67,100622,2071],{"class":77},[67,100624,2369],{"class":73},[67,100626,1047],{"class":77},[67,100628,829],{"class":73},[67,100630,100631],{"class":69,"line":202},[67,100632,100633],{"class":2058},"#vstack 垂直方向进行堆叠\n",[67,100635,100636],{"class":69,"line":641},[67,100637,100638],{"class":73},"np.vstack((aa,bb))\n",[67,100640,100641],{"class":69,"line":655},[67,100642,100643],{"class":2058},"#与hstack传的参数类似，等价于：\n",[67,100645,100646],{"class":69,"line":660},[67,100647,100648],{"class":73},"np.vstack([aa,bb])\n",[19,100650,99990],{},[19,100652,100653],{},[3317,100654],{"alt":63,"src":100655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100657,100486],{},[58,100659,100661],{"className":60,"code":100660,"language":62,"meta":63,"style":63},"#两个三行六列\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",[32,100662,100663,100667,100695,100723,100728,100733],{"__ignoreMap":63},[67,100664,100665],{"class":69,"line":70},[67,100666,100045],{"class":2058},[67,100668,100669,100671,100673,100675,100677,100679,100681,100683,100685,100687,100689,100691,100693],{"class":69,"line":191},[67,100670,97280],{"class":73},[67,100672,85],{"class":84},[67,100674,94761],{"class":73},[67,100676,2209],{"class":77},[67,100678,2369],{"class":73},[67,100680,2316],{"class":77},[67,100682,94766],{"class":73},[67,100684,2077],{"class":77},[67,100686,2369],{"class":73},[67,100688,2071],{"class":77},[67,100690,2369],{"class":73},[67,100692,2335],{"class":77},[67,100694,829],{"class":73},[67,100696,100697,100699,100701,100703,100705,100707,100709,100711,100713,100715,100717,100719,100721],{"class":69,"line":202},[67,100698,100078],{"class":73},[67,100700,85],{"class":84},[67,100702,94761],{"class":73},[67,100704,2328],{"class":77},[67,100706,2369],{"class":73},[67,100708,100089],{"class":77},[67,100710,94766],{"class":73},[67,100712,2077],{"class":77},[67,100714,2369],{"class":73},[67,100716,2071],{"class":77},[67,100718,2369],{"class":73},[67,100720,2335],{"class":77},[67,100722,829],{"class":73},[67,100724,100725],{"class":69,"line":641},[67,100726,100727],{"class":2058},"#使用vstack\n",[67,100729,100730],{"class":69,"line":655},[67,100731,100732],{"class":73},"np.vstack((aaa,bbb)).shape\n",[67,100734,100735],{"class":69,"line":660},[67,100736,100737],{"class":2058},"#输出：（4，3，6）\n",[14,100739,100741],{"id":100740},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100743,100744],{},"该方法是三维数组特有的方法",[19,100746,100747],{},"也就是说",[19,100749,100750],{},"一维数组拼接方法用：concatenate()",[19,100752,100753],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100755,100756],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100758,100759],{},"四维数组及多维数组只能用concatenate进行拼接",[58,100761,100763],{"className":60,"code":100762,"language":62,"meta":63,"style":63},"#两个三行六列\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",[32,100764,100765,100769,100797,100825,100830,100835],{"__ignoreMap":63},[67,100766,100767],{"class":69,"line":70},[67,100768,100045],{"class":2058},[67,100770,100771,100773,100775,100777,100779,100781,100783,100785,100787,100789,100791,100793,100795],{"class":69,"line":191},[67,100772,97280],{"class":73},[67,100774,85],{"class":84},[67,100776,94761],{"class":73},[67,100778,2209],{"class":77},[67,100780,2369],{"class":73},[67,100782,2316],{"class":77},[67,100784,94766],{"class":73},[67,100786,2077],{"class":77},[67,100788,2369],{"class":73},[67,100790,2071],{"class":77},[67,100792,2369],{"class":73},[67,100794,2335],{"class":77},[67,100796,829],{"class":73},[67,100798,100799,100801,100803,100805,100807,100809,100811,100813,100815,100817,100819,100821,100823],{"class":69,"line":202},[67,100800,100078],{"class":73},[67,100802,85],{"class":84},[67,100804,94761],{"class":73},[67,100806,2328],{"class":77},[67,100808,2369],{"class":73},[67,100810,100089],{"class":77},[67,100812,94766],{"class":73},[67,100814,2077],{"class":77},[67,100816,2369],{"class":73},[67,100818,2071],{"class":77},[67,100820,2369],{"class":73},[67,100822,2335],{"class":77},[67,100824,829],{"class":73},[67,100826,100827],{"class":69,"line":641},[67,100828,100829],{"class":2058},"#使用dstack\n",[67,100831,100832],{"class":69,"line":655},[67,100833,100834],{"class":73},"np.dstack((aaa,bbb)).shape\n",[67,100836,100837],{"class":69,"line":660},[67,100838,100839],{"class":2058},"#结果：（2，3，12）\n",[1903,100841,100842],{},"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":63,"searchDepth":191,"depth":191,"links":100844},[100845,100846,100847,100848],{"id":99784,"depth":191,"text":99785},{"id":100398,"depth":191,"text":100399},{"id":100569,"depth":191,"text":100570},{"id":100740,"depth":191,"text":100741},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99776,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100855,"title":100856,"body":100857,"description":25173,"extension":1930,"meta":101132,"navigation":630,"path":101133,"seo":101134,"stem":101135,"__hash__":101136},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100858,"toc":101130},[100859,100862,100865,100959,100962,100965,100968,100971,100974,100977,100980,100983,101127],[10,100860,100856],{"id":100861},"_7数组转置",[19,100863,100864],{},"使用transpose()函数",[58,100866,100868],{"className":60,"code":100867,"language":62,"meta":63,"style":63},"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",[32,100869,100870,100880,100904,100909,100914,100919,100924,100932,100936,100940,100945,100950,100955],{"__ignoreMap":63},[67,100871,100872,100874,100876,100878],{"class":69,"line":70},[67,100873,622],{"class":84},[67,100875,646],{"class":73},[67,100877,649],{"class":84},[67,100879,652],{"class":73},[67,100881,100882,100884,100886,100888,100890,100892,100894,100896,100898,100900,100902],{"class":69,"line":191},[67,100883,2230],{"class":73},[67,100885,85],{"class":84},[67,100887,33488],{"class":73},[67,100889,2209],{"class":77},[67,100891,2369],{"class":73},[67,100893,2513],{"class":77},[67,100895,94766],{"class":73},[67,100897,1047],{"class":77},[67,100899,2369],{"class":73},[67,100901,2071],{"class":77},[67,100903,829],{"class":73},[67,100905,100906],{"class":69,"line":202},[67,100907,100908],{"class":2058},"#二维数组转置\n",[67,100910,100911],{"class":69,"line":641},[67,100912,100913],{"class":2058},"#调用transpose()函数\n",[67,100915,100916],{"class":69,"line":655},[67,100917,100918],{"class":73},"a.transpose()\n",[67,100920,100921],{"class":69,"line":660},[67,100922,100923],{"class":2058},"#对于二维数组也可以采用.T来实现\n",[67,100925,100926,100929],{"class":69,"line":665},[67,100927,100928],{"class":73},"a.T",[67,100930,100931],{"class":2058},"#与上述代码一样\n",[67,100933,100934],{"class":69,"line":677},[67,100935,95323],{"class":2058},[67,100937,100938],{"class":69,"line":683},[67,100939,95687],{"class":114},[67,100941,100942],{"class":69,"line":689},[67,100943,100944],{"class":114},"array([[ 1,  4,  7, 10],\n",[67,100946,100947],{"class":69,"line":694},[67,100948,100949],{"class":114},"       [ 2,  5,  8, 11],\n",[67,100951,100952],{"class":69,"line":700},[67,100953,100954],{"class":114},"       [ 3,  6,  9, 12]])\n",[67,100956,100957],{"class":69,"line":706},[67,100958,95687],{"class":114},[19,100960,100961],{},"也可以使用np.transpose()的形式",[19,100963,100964],{},"#多维数组进行转置 np.transpose()",[19,100966,100967],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100969,100970],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100972,100973],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100975,100976],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100978,100979],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100981,100982],{},"四维及以上的数组也是一样的道理",[58,100984,100986],{"className":60,"code":100985,"language":62,"meta":63,"style":63},"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",[32,100987,100988,101016,101021,101026,101031,101049,101054,101086,101091,101096,101101,101122],{"__ignoreMap":63},[67,100989,100990,100992,100994,100996,100998,101000,101002,101004,101006,101008,101010,101012,101014],{"class":69,"line":70},[67,100991,2809],{"class":73},[67,100993,85],{"class":84},[67,100995,94761],{"class":73},[67,100997,2209],{"class":77},[67,100999,2369],{"class":73},[67,101001,2316],{"class":77},[67,101003,94766],{"class":73},[67,101005,2071],{"class":77},[67,101007,2369],{"class":73},[67,101009,2335],{"class":77},[67,101011,2369],{"class":73},[67,101013,2077],{"class":77},[67,101015,829],{"class":73},[67,101017,101018],{"class":69,"line":191},[67,101019,101020],{"class":73},"x.shape\n",[67,101022,101023],{"class":69,"line":202},[67,101024,101025],{"class":2058},"#结果：（3,6,2）\n",[67,101027,101028],{"class":69,"line":641},[67,101029,101030],{"class":2058},"#使用np.transpose()进行转置 变为(2,6,3)\n",[67,101032,101033,101036,101038,101040,101042,101044,101046],{"class":69,"line":655},[67,101034,101035],{"class":73},"np.transpose(x,(",[67,101037,2077],{"class":77},[67,101039,2369],{"class":73},[67,101041,2209],{"class":77},[67,101043,2369],{"class":73},[67,101045,78],{"class":77},[67,101047,101048],{"class":73},")).shape\n",[67,101050,101051],{"class":69,"line":660},[67,101052,101053],{"class":2058},"#结果：(2,6,3)\n",[67,101055,101056,101058,101060,101062,101064,101066,101068,101070,101072,101074,101076,101078,101080,101082,101084],{"class":69,"line":665},[67,101057,100263],{"class":73},[67,101059,85],{"class":84},[67,101061,94761],{"class":73},[67,101063,2209],{"class":77},[67,101065,2369],{"class":73},[67,101067,2316],{"class":77},[67,101069,94766],{"class":73},[67,101071,2071],{"class":77},[67,101073,2369],{"class":73},[67,101075,2077],{"class":77},[67,101077,2369],{"class":73},[67,101079,2209],{"class":77},[67,101081,2369],{"class":73},[67,101083,2335],{"class":77},[67,101085,829],{"class":73},[67,101087,101088],{"class":69,"line":677},[67,101089,101090],{"class":73},"aaaa.shape\n",[67,101092,101093],{"class":69,"line":683},[67,101094,101095],{"class":2058},"#结果：（3，2，1，6）\n",[67,101097,101098],{"class":69,"line":689},[67,101099,101100],{"class":2058},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[67,101102,101103,101106,101108,101110,101112,101114,101116,101118,101120],{"class":69,"line":694},[67,101104,101105],{"class":73},"np.transpose(aaaa,(",[67,101107,2209],{"class":77},[67,101109,2369],{"class":73},[67,101111,2077],{"class":77},[67,101113,2369],{"class":73},[67,101115,78],{"class":77},[67,101117,2369],{"class":73},[67,101119,2071],{"class":77},[67,101121,101048],{"class":73},[67,101123,101124],{"class":69,"line":700},[67,101125,101126],{"class":2058},"#结果：(2,1,3,6)\n",[1903,101128,101129],{},"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":63,"searchDepth":191,"depth":191,"links":101131},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100856,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101138,"title":101139,"body":101140,"description":25173,"extension":1930,"meta":101874,"navigation":630,"path":101875,"seo":101876,"stem":101877,"__hash__":101878},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101141,"toc":101872},[101142,101145,101148,101151,101154,101157,101160,101163,101166,101275,101278,101281,101869],[10,101143,101139],{"id":101144},"_8数组分割",[19,101146,101147],{},"split分割",[19,101149,101150],{},"numpy.split(ary,indics_or_sections,axis)",[19,101152,101153],{},"解释：",[19,101155,101156],{},"ary:被分割的数组",[19,101158,101159],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101161,101162],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101164,101165],{},"①一维数组的分割",[58,101167,101169],{"className":60,"code":101168,"language":62,"meta":63,"style":63},"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",[32,101170,101171,101187,101192,101201,101205,101210,101218,101222,101227,101232,101245,101249,101254,101266,101270],{"__ignoreMap":63},[67,101172,101173,101175,101177,101179,101181,101183,101185],{"class":69,"line":70},[67,101174,2230],{"class":73},[67,101176,85],{"class":84},[67,101178,94761],{"class":73},[67,101180,2209],{"class":77},[67,101182,2369],{"class":73},[67,101184,2411],{"class":77},[67,101186,829],{"class":73},[67,101188,101189],{"class":69,"line":191},[67,101190,101191],{"class":2058},"#如果传入整数，必须能够平分，否则会报错\n",[67,101193,101194,101197,101199],{"class":69,"line":202},[67,101195,101196],{"class":73},"np.split(a,",[67,101198,2077],{"class":77},[67,101200,829],{"class":73},[67,101202,101203],{"class":69,"line":641},[67,101204,95323],{"class":2058},[67,101206,101207],{"class":69,"line":655},[67,101208,101209],{"class":2058},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[67,101211,101212,101214,101216],{"class":69,"line":660},[67,101213,101196],{"class":73},[67,101215,1047],{"class":77},[67,101217,829],{"class":73},[67,101219,101220],{"class":69,"line":665},[67,101221,95323],{"class":2058},[67,101223,101224],{"class":69,"line":677},[67,101225,101226],{"class":2058},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[67,101228,101229],{"class":69,"line":683},[67,101230,101231],{"class":2058},"#传入数组\n",[67,101233,101234,101237,101239,101241,101243],{"class":69,"line":689},[67,101235,101236],{"class":73},"np.split(a,[",[67,101238,2071],{"class":77},[67,101240,2369],{"class":73},[67,101242,2310],{"class":77},[67,101244,6476],{"class":73},[67,101246,101247],{"class":69,"line":694},[67,101248,95323],{"class":2058},[67,101250,101251],{"class":69,"line":700},[67,101252,101253],{"class":2058},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[67,101255,101256,101258,101260,101262,101264],{"class":69,"line":706},[67,101257,101236],{"class":73},[67,101259,2310],{"class":77},[67,101261,2369],{"class":73},[67,101263,2360],{"class":77},[67,101265,6476],{"class":73},[67,101267,101268],{"class":69,"line":712},[67,101269,95323],{"class":2058},[67,101271,101272],{"class":69,"line":717},[67,101273,101274],{"class":2058},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101276,101277],{},"②二维数组的分割",[19,101279,101280],{},"使用split()",[58,101282,101284],{"className":60,"code":101283,"language":62,"meta":63,"style":63},"#二维数组分割\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",[32,101285,101286,101291,101315,101320,101329,101333,101337,101342,101347,101352,101357,101362,101367,101372,101376,101389,101393,101397,101401,101405,101409,101414,101419,101424,101428,101433,101449,101453,101457,101462,101467,101472,101477,101482,101487,101492,101497,101502,101507,101512,101517,101522,101527,101532,101537,101542,101547,101551,101555,101575,101579,101583,101588,101593,101598,101603,101608,101613,101618,101623,101628,101633,101638,101643,101648,101653,101658,101663,101668,101673,101677,101682,101691,101695,101699,101703,101707,101711,101715,101719,101723,101727,101736,101740,101744,101748,101752,101756,101760,101764,101768,101772,101776,101780,101784,101788,101792,101796,101800,101804,101808,101812,101816,101820,101833,101837,101841,101845,101849,101853,101857,101861,101865],{"__ignoreMap":63},[67,101287,101288],{"class":69,"line":70},[67,101289,101290],{"class":2058},"#二维数组分割\n",[67,101292,101293,101295,101297,101299,101301,101303,101305,101307,101309,101311,101313],{"class":69,"line":191},[67,101294,95065],{"class":73},[67,101296,85],{"class":84},[67,101298,94761],{"class":73},[67,101300,2209],{"class":77},[67,101302,2369],{"class":73},[67,101304,2316],{"class":77},[67,101306,94766],{"class":73},[67,101308,2335],{"class":77},[67,101310,2369],{"class":73},[67,101312,2335],{"class":77},[67,101314,829],{"class":73},[67,101316,101317],{"class":69,"line":202},[67,101318,101319],{"class":2058},"#默认axis=0  传入整数平均分,按行来的\n",[67,101321,101322,101325,101327],{"class":69,"line":641},[67,101323,101324],{"class":73},"np.split(aa,",[67,101326,2071],{"class":77},[67,101328,829],{"class":73},[67,101330,101331],{"class":69,"line":655},[67,101332,97521],{"class":2058},[67,101334,101335],{"class":69,"line":660},[67,101336,95687],{"class":114},[67,101338,101339],{"class":69,"line":665},[67,101340,101341],{"class":114},"[array([[ 1,  2,  3,  4,  5,  6],\n",[67,101343,101344],{"class":69,"line":677},[67,101345,101346],{"class":114},"        [ 7,  8,  9, 10, 11, 12]]),\n",[67,101348,101349],{"class":69,"line":683},[67,101350,101351],{"class":114}," array([[13, 14, 15, 16, 17, 18],\n",[67,101353,101354],{"class":69,"line":689},[67,101355,101356],{"class":114},"        [19, 20, 21, 22, 23, 24]]),\n",[67,101358,101359],{"class":69,"line":694},[67,101360,101361],{"class":114}," array([[25, 26, 27, 28, 29, 30],\n",[67,101363,101364],{"class":69,"line":700},[67,101365,101366],{"class":114},"        [31, 32, 33, 34, 35, 36]])]\n",[67,101368,101369],{"class":69,"line":706},[67,101370,101371],{"class":114}," '''\n",[67,101373,101374],{"class":69,"line":712},[67,101375,101231],{"class":2058},[67,101377,101378,101381,101383,101385,101387],{"class":69,"line":717},[67,101379,101380],{"class":73},"np.split(aa,[",[67,101382,2077],{"class":77},[67,101384,2369],{"class":73},[67,101386,2310],{"class":77},[67,101388,6476],{"class":73},[67,101390,101391],{"class":69,"line":723},[67,101392,97521],{"class":2058},[67,101394,101395],{"class":69,"line":729},[67,101396,95687],{"class":114},[67,101398,101399],{"class":69,"line":735},[67,101400,101341],{"class":114},[67,101402,101403],{"class":69,"line":741},[67,101404,101346],{"class":114},[67,101406,101407],{"class":69,"line":747},[67,101408,101351],{"class":114},[67,101410,101411],{"class":69,"line":753},[67,101412,101413],{"class":114},"        [19, 20, 21, 22, 23, 24],\n",[67,101415,101416],{"class":69,"line":758},[67,101417,101418],{"class":114},"        [25, 26, 27, 28, 29, 30]]),\n",[67,101420,101421],{"class":69,"line":764},[67,101422,101423],{"class":114}," array([[31, 32, 33, 34, 35, 36]])]\n",[67,101425,101426],{"class":69,"line":770},[67,101427,95687],{"class":114},[67,101429,101430],{"class":69,"line":776},[67,101431,101432],{"class":2058},"#axis=1 按照列来分\n",[67,101434,101435,101437,101439,101441,101443,101445,101447],{"class":69,"line":782},[67,101436,101324],{"class":73},[67,101438,2071],{"class":77},[67,101440,2369],{"class":73},[67,101442,49282],{"class":7033},[67,101444,85],{"class":84},[67,101446,2209],{"class":77},[67,101448,829],{"class":73},[67,101450,101451],{"class":69,"line":788},[67,101452,97521],{"class":2058},[67,101454,101455],{"class":69,"line":793},[67,101456,95687],{"class":114},[67,101458,101459],{"class":69,"line":798},[67,101460,101461],{"class":114},"[array([[ 1,  2],\n",[67,101463,101464],{"class":69,"line":816},[67,101465,101466],{"class":114},"        [ 7,  8],\n",[67,101468,101469],{"class":69,"line":832},[67,101470,101471],{"class":114},"        [13, 14],\n",[67,101473,101474],{"class":69,"line":843},[67,101475,101476],{"class":114},"        [19, 20],\n",[67,101478,101479],{"class":69,"line":848},[67,101480,101481],{"class":114},"        [25, 26],\n",[67,101483,101484],{"class":69,"line":863},[67,101485,101486],{"class":114},"        [31, 32]]),\n",[67,101488,101489],{"class":69,"line":876},[67,101490,101491],{"class":114}," array([[ 3,  4],\n",[67,101493,101494],{"class":69,"line":889},[67,101495,101496],{"class":114},"        [ 9, 10],\n",[67,101498,101499],{"class":69,"line":894},[67,101500,101501],{"class":114},"        [15, 16],\n",[67,101503,101504],{"class":69,"line":911},[67,101505,101506],{"class":114},"        [21, 22],\n",[67,101508,101509],{"class":69,"line":927},[67,101510,101511],{"class":114},"        [27, 28],\n",[67,101513,101514],{"class":69,"line":932},[67,101515,101516],{"class":114},"        [33, 34]]),\n",[67,101518,101519],{"class":69,"line":955},[67,101520,101521],{"class":114}," array([[ 5,  6],\n",[67,101523,101524],{"class":69,"line":971},[67,101525,101526],{"class":114},"        [11, 12],\n",[67,101528,101529],{"class":69,"line":1010},[67,101530,101531],{"class":114},"        [17, 18],\n",[67,101533,101534],{"class":69,"line":1016},[67,101535,101536],{"class":114},"        [23, 24],\n",[67,101538,101539],{"class":69,"line":1021},[67,101540,101541],{"class":114},"        [29, 30],\n",[67,101543,101544],{"class":69,"line":1034},[67,101545,101546],{"class":114},"        [35, 36]])]\n",[67,101548,101549],{"class":69,"line":1053},[67,101550,101371],{"class":114},[67,101552,101553],{"class":69,"line":1070},[67,101554,101231],{"class":2058},[67,101556,101557,101559,101561,101563,101565,101567,101569,101571,101573],{"class":69,"line":1083},[67,101558,101380],{"class":73},[67,101560,2209],{"class":77},[67,101562,2369],{"class":73},[67,101564,2077],{"class":77},[67,101566,43377],{"class":73},[67,101568,49282],{"class":7033},[67,101570,85],{"class":84},[67,101572,2209],{"class":77},[67,101574,829],{"class":73},[67,101576,101577],{"class":69,"line":1088},[67,101578,95323],{"class":2058},[67,101580,101581],{"class":69,"line":1093},[67,101582,95687],{"class":114},[67,101584,101585],{"class":69,"line":1110},[67,101586,101587],{"class":114},"[array([[ 1],\n",[67,101589,101590],{"class":69,"line":11603},[67,101591,101592],{"class":114},"        [ 7],\n",[67,101594,101595],{"class":69,"line":11612},[67,101596,101597],{"class":114},"        [13],\n",[67,101599,101600],{"class":69,"line":11617},[67,101601,101602],{"class":114},"        [19],\n",[67,101604,101605],{"class":69,"line":11623},[67,101606,101607],{"class":114},"        [25],\n",[67,101609,101610],{"class":69,"line":11644},[67,101611,101612],{"class":114},"        [31]]),\n",[67,101614,101615],{"class":69,"line":11650},[67,101616,101617],{"class":114}," array([[ 2],\n",[67,101619,101620],{"class":69,"line":11664},[67,101621,101622],{"class":114},"        [ 8],\n",[67,101624,101625],{"class":69,"line":11670},[67,101626,101627],{"class":114},"        [14],\n",[67,101629,101630],{"class":69,"line":11697},[67,101631,101632],{"class":114},"        [20],\n",[67,101634,101635],{"class":69,"line":11706},[67,101636,101637],{"class":114},"        [26],\n",[67,101639,101640],{"class":69,"line":11712},[67,101641,101642],{"class":114},"        [32]]),\n",[67,101644,101645],{"class":69,"line":11720},[67,101646,101647],{"class":114}," array([[ 3,  4,  5,  6],\n",[67,101649,101650],{"class":69,"line":11725},[67,101651,101652],{"class":114},"        [ 9, 10, 11, 12],\n",[67,101654,101655],{"class":69,"line":18401},[67,101656,101657],{"class":114},"        [15, 16, 17, 18],\n",[67,101659,101660],{"class":69,"line":18407},[67,101661,101662],{"class":114},"        [21, 22, 23, 24],\n",[67,101664,101665],{"class":69,"line":18430},[67,101666,101667],{"class":114},"        [27, 28, 29, 30],\n",[67,101669,101670],{"class":69,"line":18436},[67,101671,101672],{"class":114},"        [33, 34, 35, 36]])]\n",[67,101674,101675],{"class":69,"line":18459},[67,101676,95687],{"class":114},[67,101678,101679],{"class":69,"line":18473},[67,101680,101681],{"class":2058},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[67,101683,101684,101687,101689],{"class":69,"line":18493},[67,101685,101686],{"class":73},"np.vsplit(aa,",[67,101688,2071],{"class":77},[67,101690,829],{"class":73},[67,101692,101693],{"class":69,"line":18499},[67,101694,95323],{"class":2058},[67,101696,101697],{"class":69,"line":18510},[67,101698,95687],{"class":114},[67,101700,101701],{"class":69,"line":18533},[67,101702,101341],{"class":114},[67,101704,101705],{"class":69,"line":18555},[67,101706,101346],{"class":114},[67,101708,101709],{"class":69,"line":18560},[67,101710,101351],{"class":114},[67,101712,101713],{"class":69,"line":18566},[67,101714,101356],{"class":114},[67,101716,101717],{"class":69,"line":18580},[67,101718,101361],{"class":114},[67,101720,101721],{"class":69,"line":18593},[67,101722,101366],{"class":114},[67,101724,101725],{"class":69,"line":18598},[67,101726,95687],{"class":114},[67,101728,101729,101732,101734],{"class":69,"line":18612},[67,101730,101731],{"class":73},"np.hsplit(aa,",[67,101733,2071],{"class":77},[67,101735,829],{"class":73},[67,101737,101738],{"class":69,"line":18617},[67,101739,95323],{"class":2058},[67,101741,101742],{"class":69,"line":18623},[67,101743,95687],{"class":114},[67,101745,101746],{"class":69,"line":18628},[67,101747,101461],{"class":114},[67,101749,101750],{"class":69,"line":18642},[67,101751,101466],{"class":114},[67,101753,101754],{"class":69,"line":18647},[67,101755,101471],{"class":114},[67,101757,101758],{"class":69,"line":18652},[67,101759,101476],{"class":114},[67,101761,101762],{"class":69,"line":18666},[67,101763,101481],{"class":114},[67,101765,101766],{"class":69,"line":18678},[67,101767,101486],{"class":114},[67,101769,101770],{"class":69,"line":18683},[67,101771,101491],{"class":114},[67,101773,101774],{"class":69,"line":18696},[67,101775,101496],{"class":114},[67,101777,101778],{"class":69,"line":18701},[67,101779,101501],{"class":114},[67,101781,101782],{"class":69,"line":18706},[67,101783,101506],{"class":114},[67,101785,101786],{"class":69,"line":18711},[67,101787,101511],{"class":114},[67,101789,101790],{"class":69,"line":18724},[67,101791,101516],{"class":114},[67,101793,101794],{"class":69,"line":18729},[67,101795,101521],{"class":114},[67,101797,101798],{"class":69,"line":34402},[67,101799,101526],{"class":114},[67,101801,101802],{"class":69,"line":34408},[67,101803,101531],{"class":114},[67,101805,101806],{"class":69,"line":34414},[67,101807,101536],{"class":114},[67,101809,101810],{"class":69,"line":34420},[67,101811,101541],{"class":114},[67,101813,101814],{"class":69,"line":34426},[67,101815,101546],{"class":114},[67,101817,101818],{"class":69,"line":34437},[67,101819,95687],{"class":114},[67,101821,101822,101825,101827,101829,101831],{"class":69,"line":34443},[67,101823,101824],{"class":73},"np.vsplit(aa,[",[67,101826,2077],{"class":77},[67,101828,2369],{"class":73},[67,101830,2310],{"class":77},[67,101832,6476],{"class":73},[67,101834,101835],{"class":69,"line":34463},[67,101836,95323],{"class":2058},[67,101838,101839],{"class":69,"line":34469},[67,101840,95687],{"class":114},[67,101842,101843],{"class":69,"line":34480},[67,101844,101341],{"class":114},[67,101846,101847],{"class":69,"line":34486},[67,101848,101346],{"class":114},[67,101850,101851],{"class":69,"line":34492},[67,101852,101351],{"class":114},[67,101854,101855],{"class":69,"line":34498},[67,101856,101413],{"class":114},[67,101858,101859],{"class":69,"line":34504},[67,101860,101418],{"class":114},[67,101862,101863],{"class":69,"line":34510},[67,101864,101423],{"class":114},[67,101866,101867],{"class":69,"line":34516},[67,101868,101371],{"class":114},[1903,101870,101871],{},"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":63,"searchDepth":191,"depth":191,"links":101873},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101139,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101880,"title":101881,"body":101882,"description":25173,"extension":1930,"meta":102376,"navigation":630,"path":102377,"seo":102378,"stem":102379,"__hash__":102380},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101883,"toc":102367},[101884,101887,101890,101915,101919,101978,102030,102034,102036,102072,102126,102128,102166,102237,102241,102246,102250,102253,102286,102289,102293,102296,102299,102302,102305,102310,102314,102317,102320,102323,102326,102331,102335,102340,102343,102364],[10,101885,101881],{"id":101886},"_9数学函数",[19,101888,101889],{},"补充回顾：python的列表推导式",[58,101891,101893],{"className":60,"code":101892,"language":62,"meta":63,"style":63},"[1\u002Fi for i in a]\n",[32,101894,101895],{"__ignoreMap":63},[67,101896,101897,101899,101901,101903,101906,101908,101910,101912],{"class":69,"line":70},[67,101898,2879],{"class":73},[67,101900,2209],{"class":77},[67,101902,2573],{"class":84},[67,101904,101905],{"class":73},"i ",[67,101907,1512],{"class":84},[67,101909,11244],{"class":73},[67,101911,941],{"class":84},[67,101913,101914],{"class":73}," a]\n",[14,101916,101918],{"id":101917},"_91-求倒数","9.1 求倒数",[58,101920,101922],{"className":60,"code":101921,"language":62,"meta":63,"style":63},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[32,101923,101924,101929,101957,101969],{"__ignoreMap":63},[67,101925,101926],{"class":69,"line":70},[67,101927,101928],{"class":2058},"#数组求倒数\n",[67,101930,101931,101933,101935,101937,101939,101941,101943,101945,101947,101949,101951,101953,101955],{"class":69,"line":191},[67,101932,2230],{"class":73},[67,101934,85],{"class":84},[67,101936,2879],{"class":73},[67,101938,2209],{"class":77},[67,101940,2369],{"class":73},[67,101942,2077],{"class":77},[67,101944,2369],{"class":73},[67,101946,2071],{"class":77},[67,101948,2369],{"class":73},[67,101950,1047],{"class":77},[67,101952,2369],{"class":73},[67,101954,2310],{"class":77},[67,101956,35015],{"class":73},[67,101958,101959,101961,101963,101966],{"class":69,"line":202},[67,101960,2255],{"class":73},[67,101962,85],{"class":84},[67,101964,101965],{"class":73},"np.array(a)",[67,101967,101968],{"class":2058},"#将列表转换为数组\n",[67,101970,101971,101973,101975],{"class":69,"line":641},[67,101972,2209],{"class":77},[67,101974,2573],{"class":84},[67,101976,101977],{"class":73},"b\n",[58,101979,101981],{"className":60,"code":101980,"language":62,"meta":63,"style":63},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[32,101982,101983,102011,102020,102025],{"__ignoreMap":63},[67,101984,101985,101987,101989,101991,101993,101995,101997,101999,102001,102003,102005,102007,102009],{"class":69,"line":70},[67,101986,2230],{"class":73},[67,101988,85],{"class":84},[67,101990,2879],{"class":73},[67,101992,2209],{"class":77},[67,101994,2369],{"class":73},[67,101996,2077],{"class":77},[67,101998,2369],{"class":73},[67,102000,2071],{"class":77},[67,102002,2369],{"class":73},[67,102004,1047],{"class":77},[67,102006,2369],{"class":73},[67,102008,2310],{"class":77},[67,102010,35015],{"class":73},[67,102012,102013,102015,102017],{"class":69,"line":191},[67,102014,2255],{"class":73},[67,102016,85],{"class":84},[67,102018,102019],{"class":73},"np.array(a)\n",[67,102021,102022],{"class":69,"line":202},[67,102023,102024],{"class":2058},"#调用numpy中的函数reciprocal()\n",[67,102026,102027],{"class":69,"line":641},[67,102028,102029],{"class":73},"np.reciprocal(b)\n",[14,102031,102033],{"id":102032},"_92-求平方","9.2 求平方",[19,102035,96289],{},[58,102037,102039],{"className":60,"code":102038,"language":62,"meta":63,"style":63},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[32,102040,102041,102046,102051,102067],{"__ignoreMap":63},[67,102042,102043],{"class":69,"line":70},[67,102044,102045],{"class":2058},"#square()，求平方\n",[67,102047,102048],{"class":69,"line":191},[67,102049,102050],{"class":2058},"#一维数组\n",[67,102052,102053,102055,102057,102059,102061,102063,102065],{"class":69,"line":202},[67,102054,2230],{"class":73},[67,102056,85],{"class":84},[67,102058,94761],{"class":73},[67,102060,2209],{"class":77},[67,102062,2369],{"class":73},[67,102064,2437],{"class":77},[67,102066,829],{"class":73},[67,102068,102069],{"class":69,"line":641},[67,102070,102071],{"class":73},"np.square(a)\n",[58,102073,102075],{"className":60,"code":102074,"language":62,"meta":63,"style":63},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[32,102076,102077,102082,102087,102108],{"__ignoreMap":63},[67,102078,102079],{"class":69,"line":70},[67,102080,102081],{"class":2058},"#或者通过循环遍历的形式来计算\n",[67,102083,102084],{"class":69,"line":191},[67,102085,102086],{"class":2058},"#这是一个列表\n",[67,102088,102089,102092,102094,102096,102098,102100,102102,102105],{"class":69,"line":202},[67,102090,102091],{"class":73},"[i",[67,102093,965],{"class":84},[67,102095,101905],{"class":73},[67,102097,1512],{"class":84},[67,102099,11244],{"class":73},[67,102101,941],{"class":84},[67,102103,102104],{"class":73}," a]",[67,102106,102107],{"class":2058},"#这个求完之后在数列当中\n",[67,102109,102110,102113,102115,102117,102119,102121,102123],{"class":69,"line":641},[67,102111,102112],{"class":73},"np.array([i",[67,102114,965],{"class":84},[67,102116,101905],{"class":73},[67,102118,1512],{"class":84},[67,102120,11244],{"class":73},[67,102122,941],{"class":84},[67,102124,102125],{"class":73}," a])\n",[19,102127,95050],{},[58,102129,102131],{"className":60,"code":102130,"language":62,"meta":63,"style":63},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[32,102132,102133,102137,102161],{"__ignoreMap":63},[67,102134,102135],{"class":69,"line":70},[67,102136,95060],{"class":2058},[67,102138,102139,102141,102143,102145,102147,102149,102151,102153,102155,102157,102159],{"class":69,"line":191},[67,102140,95065],{"class":73},[67,102142,85],{"class":84},[67,102144,94761],{"class":73},[67,102146,2209],{"class":77},[67,102148,2369],{"class":73},[67,102150,2513],{"class":77},[67,102152,94766],{"class":73},[67,102154,1047],{"class":77},[67,102156,2369],{"class":73},[67,102158,2071],{"class":77},[67,102160,829],{"class":73},[67,102162,102163],{"class":69,"line":202},[67,102164,102165],{"class":73},"np.square(aa)\n",[58,102167,102169],{"className":60,"code":102168,"language":62,"meta":63,"style":63},"#传统的方式\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",[32,102170,102171,102176,102185,102201,102217,102232],{"__ignoreMap":63},[67,102172,102173],{"class":69,"line":70},[67,102174,102175],{"class":2058},"#传统的方式\n",[67,102177,102178,102180,102182],{"class":69,"line":191},[67,102179,99944],{"class":73},[67,102181,85],{"class":84},[67,102183,102184],{"class":73},"np.empty_like(aa)\n",[67,102186,102187,102189,102191,102193,102195,102197,102199],{"class":69,"line":202},[67,102188,1512],{"class":84},[67,102190,11244],{"class":73},[67,102192,941],{"class":84},[67,102194,944],{"class":77},[67,102196,854],{"class":73},[67,102198,1047],{"class":77},[67,102200,952],{"class":73},[67,102202,102203,102205,102207,102209,102211,102213,102215],{"class":69,"line":641},[67,102204,935],{"class":84},[67,102206,11306],{"class":73},[67,102208,941],{"class":84},[67,102210,944],{"class":77},[67,102212,854],{"class":73},[67,102214,2071],{"class":77},[67,102216,952],{"class":73},[67,102218,102219,102222,102224,102227,102229],{"class":69,"line":655},[67,102220,102221],{"class":73},"        bb[i,j]",[67,102223,85],{"class":84},[67,102225,102226],{"class":73},"aa[i,j]",[67,102228,965],{"class":84},[67,102230,102231],{"class":73},"aa[i,j]\n",[67,102233,102234],{"class":69,"line":660},[67,102235,102236],{"class":73},"bb\n",[14,102238,102240],{"id":102239},"_93-求各元素的符号","9.3 求各元素的符号",[19,102242,102243],{},[3317,102244],{"alt":63,"src":102245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102247,102249],{"id":102248},"_94-modf函数","9.4 modf函数",[19,102251,102252],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[58,102254,102256],{"className":60,"code":102255,"language":62,"meta":63,"style":63},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[32,102257,102258,102281],{"__ignoreMap":63},[67,102259,102260,102262,102264,102266,102268,102270,102272,102274,102276,102279],{"class":69,"line":70},[67,102261,2230],{"class":73},[67,102263,85],{"class":84},[67,102265,94761],{"class":73},[67,102267,1863],{"class":84},[67,102269,2437],{"class":77},[67,102271,2369],{"class":73},[67,102273,2437],{"class":77},[67,102275,2369],{"class":73},[67,102277,102278],{"class":77},"0.3",[67,102280,829],{"class":73},[67,102282,102283],{"class":69,"line":191},[67,102284,102285],{"class":73},"np.modf(a)\n",[19,102287,102288],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102290,102292],{"id":102291},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102294,102295],{},"np.cell()",[19,102297,102298],{},"np.floor()",[19,102300,102301],{},"np.rint()",[19,102303,102304],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102306,102307],{},[3317,102308],{"alt":63,"src":102309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102311,102313],{"id":102312},"_96-around函数","9.6 around()函数",[19,102315,102316],{},"around()函数也可以实现对数的小数位数进行操作",[19,102318,102319],{},"其中的参数：",[19,102321,102322],{},"1.要传的数组",[19,102324,102325],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102327,102328],{},[3317,102329],{"alt":63,"src":102330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102332,102334],{"id":102333},"_97-三角函数","9.7 三角函数",[19,102336,102337],{},[3317,102338],{"alt":63,"src":102339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102341,102342],{},"引入图像模块非常重要",[58,102344,102346],{"className":60,"code":102345,"language":62,"meta":63,"style":63},"from matplotlib import pyplot as plt\n",[32,102347,102348],{"__ignoreMap":63},[67,102349,102350,102352,102355,102357,102360,102362],{"class":69,"line":70},[67,102351,32515],{"class":84},[67,102353,102354],{"class":73}," matplotlib ",[67,102356,622],{"class":84},[67,102358,102359],{"class":73}," pyplot ",[67,102361,649],{"class":84},[67,102363,33209],{"class":73},[1903,102365,102366],{},"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":63,"searchDepth":191,"depth":191,"links":102368},[102369,102370,102371,102372,102373,102374,102375],{"id":101917,"depth":191,"text":101918},{"id":102032,"depth":191,"text":102033},{"id":102239,"depth":191,"text":102240},{"id":102248,"depth":191,"text":102249},{"id":102291,"depth":191,"text":102292},{"id":102312,"depth":191,"text":102313},{"id":102333,"depth":191,"text":102334},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101881,"description":25173},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102382,"title":102383,"body":102384,"description":25173,"extension":1930,"meta":102388,"navigation":630,"path":102389,"seo":102390,"stem":102391,"__hash__":102392},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102385,"toc":102386},[],{"title":63,"searchDepth":191,"depth":191,"links":102387},[],{"category":52188},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102383,"description":25173},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102394,"title":102395,"body":102396,"description":63,"extension":1930,"meta":104336,"navigation":630,"path":104337,"seo":104338,"stem":104339,"__hash__":104340},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102397,"toc":104312},[102398,102401,102403,102406,102409,102415,102418,102441,102444,102478,102481,102521,102523,102525,102616,102619,102663,102666,102680,102683,102697,102700,102703,102744,102746,102782,102784,102787,102793,102798,102816,102820,102823,102886,102889,102907,102911,102914,102943,102953,102959,102963,102966,102972,102983,102985,102988,103017,103020,103277,103279,103282,103293,103296,103299,103321,103328,103331,103349,103352,103355,103369,103377,103379,103405,103411,103413,103416,103426,103438,103458,103467,103487,103497,103521,103534,103548,103553,103594,103611,103636,103648,103668,103674,103718,103737,103754,103767,103783,103790,103802,103811,103846,103866,103891,103904,103928,103943,103968,103971,103992,104001,104003,104014,104016,104019,104025,104037,104044,104046,104049,104061,104064,104078,104081,104091,104101,104104,104142,104145,104147,104153,104156,104170,104174,104177,104209,104213,104216,104239,104247,104250,104256,104262,104265,104267,104295,104297,104300,104306,104309],[10,102399,102395],{"id":102400},"_1环境安装与第一个-mujoco-程序",[14,102402,17],{"id":16},[19,102404,102405],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102407,102408],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[58,102410,102413],{"className":102411,"code":102412,"language":603,"meta":63},[601],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[32,102414,102412],{"__ignoreMap":63},[19,102416,102417],{},"需要掌握:",[26,102419,102420,102423,102426,102431,102436],{},[29,102421,102422],{},"Fedora 44 下 MuJoCo 的系统依赖",[29,102424,102425],{},"Python 虚拟环境创建",[29,102427,102428],{},[32,102429,102430],{},"mujoco.MjModel",[29,102432,102433],{},[32,102434,102435],{},"mujoco.MjData",[29,102437,102438],{},[32,102439,102440],{},"mujoco.mj_step(model, data)",[19,102442,102443],{},"MuJoCo 中最重要的两个对象:",[399,102445,102446,102456],{},[402,102447,102448],{},[405,102449,102450,102453],{},[408,102451,102452],{"align":410},"对象",[408,102454,102455],{"align":410},"含义",[419,102457,102458,102468],{},[405,102459,102460,102465],{},[424,102461,102462],{"align":410},[32,102463,102464],{},"MjModel",[424,102466,102467],{"align":410},"模型结构，来自 XML，基本不随时间变化",[405,102469,102470,102475],{},[424,102471,102472],{"align":410},[32,102473,102474],{},"MjData",[424,102476,102477],{"align":410},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102479,102480],{},"可以先用一个类比理解：",[399,102482,102483,102492],{},[402,102484,102485],{},[405,102486,102487,102489],{},[408,102488,417],{"align":410},[408,102490,102491],{"align":410},"MuJoCo 对象",[419,102493,102494,102503,102512],{},[405,102495,102496,102499],{},[424,102497,102498],{"align":410},"游戏地图和角色配置",[424,102500,102501],{"align":410},[32,102502,102464],{},[405,102504,102505,102508],{},[424,102506,102507],{"align":410},"游戏运行到当前帧的状态",[424,102509,102510],{"align":410},[32,102511,102474],{},[405,102513,102514,102517],{},[424,102515,102516],{"align":410},"前进一帧",[424,102518,102519],{"align":410},[32,102520,102440],{},[14,102522,95],{"id":94},[19,102524,98],{},[58,102526,102528],{"className":101,"code":102527,"language":103,"meta":63,"style":63},"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",[32,102529,102530,102542,102554,102566,102576,102586,102605],{"__ignoreMap":63},[67,102531,102532,102534,102536,102538,102540],{"class":69,"line":70},[67,102533,111],{"class":110},[67,102535,115],{"class":114},[67,102537,118],{"class":114},[67,102539,121],{"class":77},[67,102541,26470],{"class":77},[67,102543,102544,102547,102549,102552],{"class":69,"line":191},[67,102545,102546],{"class":114},"  python3",[67,102548,127],{"class":114},[67,102550,102551],{"class":114}," python3-virtualenv",[67,102553,26470],{"class":77},[67,102555,102556,102559,102562,102564],{"class":69,"line":202},[67,102557,102558],{"class":114},"  mesa-libGL",[67,102560,102561],{"class":114}," mesa-libGLU",[67,102563,133],{"class":114},[67,102565,26470],{"class":77},[67,102567,102568,102571,102574],{"class":69,"line":641},[67,102569,102570],{"class":114},"  libglvnd-glx",[67,102572,102573],{"class":114}," libglvnd-opengl",[67,102575,26470],{"class":77},[67,102577,102578,102581,102584],{"class":69,"line":655},[67,102579,102580],{"class":114},"  glfw",[67,102582,102583],{"class":114}," glfw-devel",[67,102585,26470],{"class":77},[67,102587,102588,102591,102594,102597,102600,102603],{"class":69,"line":660},[67,102589,102590],{"class":114},"  libX11",[67,102592,102593],{"class":114}," libXcursor",[67,102595,102596],{"class":114}," libXi",[67,102598,102599],{"class":114}," libXinerama",[67,102601,102602],{"class":114}," libXrandr",[67,102604,26470],{"class":77},[67,102606,102607,102610,102613],{"class":69,"line":665},[67,102608,102609],{"class":114},"  gcc",[67,102611,102612],{"class":114}," gcc-c++",[67,102614,102615],{"class":114}," make\n",[19,102617,102618],{},"创建 Python 环境:",[58,102620,102622],{"className":101,"code":102621,"language":103,"meta":63,"style":63},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[32,102623,102624,102638,102646],{"__ignoreMap":63},[67,102625,102626,102629,102632,102635],{"class":69,"line":70},[67,102627,102628],{"class":110},"python3",[67,102630,102631],{"class":77}," -m",[67,102633,102634],{"class":114}," venv",[67,102636,102637],{"class":114}," .venv\n",[67,102639,102640,102643],{"class":69,"line":191},[67,102641,102642],{"class":77},"source",[67,102644,102645],{"class":114}," .venv\u002Fbin\u002Factivate\n",[67,102647,102648,102650,102652,102655,102657,102660],{"class":69,"line":202},[67,102649,62],{"class":110},[67,102651,102631],{"class":77},[67,102653,102654],{"class":114}," pip",[67,102656,118],{"class":114},[67,102658,102659],{"class":77}," --upgrade",[67,102661,102662],{"class":114}," pip\n",[19,102664,102665],{},"pip 安装:",[58,102667,102668],{"className":101,"code":142,"language":103,"meta":63,"style":63},[32,102669,102670],{"__ignoreMap":63},[67,102671,102672,102674,102676,102678],{"class":69,"line":70},[67,102673,149],{"class":110},[67,102675,118],{"class":114},[67,102677,154],{"class":114},[67,102679,157],{"class":114},[19,102681,102682],{},"安装完成后，先做最小检查：",[58,102684,102686],{"className":101,"code":102685,"language":103,"meta":63,"style":63},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[32,102687,102688],{"__ignoreMap":63},[67,102689,102690,102692,102694],{"class":69,"line":70},[67,102691,62],{"class":110},[67,102693,32141],{"class":77},[67,102695,102696],{"class":114}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102698,102699],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102701,102702],{},"conda 安装:",[58,102704,102706],{"className":101,"code":102705,"language":103,"meta":63,"style":63},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[32,102707,102708,102725,102734],{"__ignoreMap":63},[67,102709,102710,102712,102714,102716,102719,102721,102723],{"class":69,"line":70},[67,102711,170],{"class":110},[67,102713,173],{"class":114},[67,102715,176],{"class":77},[67,102717,102718],{"class":114}," mujoco-study",[67,102720,182],{"class":114},[67,102722,185],{"class":77},[67,102724,188],{"class":77},[67,102726,102727,102729,102731],{"class":69,"line":191},[67,102728,170],{"class":110},[67,102730,196],{"class":114},[67,102732,102733],{"class":114}," mujoco-study\n",[67,102735,102736,102738,102740,102742],{"class":69,"line":202},[67,102737,149],{"class":110},[67,102739,118],{"class":114},[67,102741,154],{"class":114},[67,102743,157],{"class":114},[19,102745,213],{},[26,102747,102748,102754,102763,102772],{},[29,102749,102750,102751,230],{},"不要安装 ",[32,102752,102753],{},"mujoco-py",[29,102755,102756,102757,1264,102759,102762],{},"如果旧项目里同时安装了 ",[32,102758,102753],{},[32,102760,102761],{},"mujoco","，建议新建干净虚拟环境。",[29,102764,102765,102768,102769,230],{},[32,102766,102767],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[32,102770,102771],{},"~\u002F.mujoco\u002Fmujoco210",[29,102773,102774,102775,84298,102778,102781],{},"离屏渲染可能涉及 OpenGL 后端，",[32,102776,102777],{},"MUJOCO_GL=egl",[32,102779,102780],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102783,244],{"id":243},[19,102785,102786],{},"MuJoCo 的基本执行流程:",[58,102788,102791],{"className":102789,"code":102790,"language":603,"meta":63},[601],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[32,102792,102790],{"__ignoreMap":63},[19,102794,102795,102797],{},[32,102796,102464],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102799,102800,102802,102803,2204,102806,2204,102808,2204,102811,2204,102813,230],{},[32,102801,102474],{}," 存放仿真运行时状态，例如 ",[32,102804,102805],{},"data.time",[32,102807,1642],{},[32,102809,102810],{},"data.qvel",[32,102812,45],{},[32,102814,102815],{},"data.xpos",[391,102817,102819],{"id":102818},"xml-是什么","XML 是什么",[19,102821,102822],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[58,102824,102826],{"className":250,"code":102825,"language":252,"meta":63,"style":63},"\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",[32,102827,102828,102850,102878],{"__ignoreMap":63},[67,102829,102830,102832,102834,102836,102838,102840,102843,102845,102848],{"class":69,"line":70},[67,102831,259],{"class":73},[67,102833,53565],{"class":262},[67,102835,266],{"class":110},[67,102837,85],{"class":73},[67,102839,55253],{"class":114},[67,102841,102842],{"class":110}," pos",[67,102844,85],{"class":73},[67,102846,102847],{"class":114},"\"0 0 1\"",[67,102849,323],{"class":73},[67,102851,102852,102854,102856,102858,102860,102863,102865,102867,102869,102871,102873,102876],{"class":69,"line":191},[67,102853,328],{"class":73},[67,102855,1352],{"class":262},[67,102857,266],{"class":110},[67,102859,85],{"class":73},[67,102861,102862],{"class":114},"\"box_geom\"",[67,102864,274],{"class":110},[67,102866,85],{"class":73},[67,102868,55253],{"class":114},[67,102870,1377],{"class":110},[67,102872,85],{"class":73},[67,102874,102875],{"class":114},"\"0.1 0.1 0.1\"",[67,102877,289],{"class":73},[67,102879,102880,102882,102884],{"class":69,"line":202},[67,102881,376],{"class":73},[67,102883,53565],{"class":262},[67,102885,323],{"class":73},[19,102887,102888],{},"这段意思是：",[26,102890,102891,102897,102904],{},[29,102892,102893,102894,102896],{},"创建一个叫 ",[32,102895,55476],{}," 的刚体。",[29,102898,102899,102900,102903],{},"它初始放在 ",[32,102901,102902],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[29,102905,102906],{},"它里面有一个盒子形状的几何体。",[391,102908,102910],{"id":102909},"timestep-是什么","timestep 是什么",[19,102912,102913],{},"XML 里的：",[58,102915,102917],{"className":250,"code":102916,"language":252,"meta":63,"style":63},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[32,102918,102919],{"__ignoreMap":63},[67,102920,102921,102923,102925,102928,102930,102933,102936,102938,102941],{"class":69,"line":70},[67,102922,259],{"class":73},[67,102924,70926],{"class":262},[67,102926,102927],{"class":110}," timestep",[67,102929,85],{"class":73},[67,102931,102932],{"class":114},"\"0.01\"",[67,102934,102935],{"class":110}," gravity",[67,102937,85],{"class":73},[67,102939,102940],{"class":114},"\"0 0 -9.81\"",[67,102942,289],{"class":73},[19,102944,102945,102946,102949,102950,102952],{},"表示每调用一次 ",[32,102947,102948],{},"mj_step","，仿真时间前进 ",[32,102951,40754],{}," 秒。循环 100 次，大约就是 1 秒：",[58,102954,102957],{"className":102955,"code":102956,"language":603,"meta":63},[601],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[32,102958,102956],{"__ignoreMap":63},[391,102960,102962],{"id":102961},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102964,102965],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[58,102967,102970],{"className":102968,"code":102969,"language":603,"meta":63},[601],"x y z qw qx qy qz\n",[32,102971,102969],{"__ignoreMap":63},[19,102973,102974,102975,102978,102979,102982],{},"表示一个自由刚体的位置和姿态。其中 ",[32,102976,102977],{},"x y z"," 是位置，",[32,102980,102981],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102984,612],{"id":611},[19,102986,102987],{},"新建文件:",[58,102989,102991],{"className":101,"code":102990,"language":103,"meta":63,"style":63},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[32,102992,102993,103003,103010],{"__ignoreMap":63},[67,102994,102995,102998,103000],{"class":69,"line":70},[67,102996,102997],{"class":110},"mkdir",[67,102999,31000],{"class":77},[67,103001,103002],{"class":114}," mujoco_tutorial\n",[67,103004,103005,103008],{"class":69,"line":191},[67,103006,103007],{"class":77},"cd",[67,103009,103002],{"class":114},[67,103011,103012,103014],{"class":69,"line":202},[67,103013,1126],{"class":110},[67,103015,103016],{"class":114}," ch1_first_sim.py\n",[19,103018,103019],{},"写入:",[58,103021,103023],{"className":60,"code":103022,"language":62,"meta":63,"style":63},"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",[32,103024,103025,103031,103035,103039,103047,103052,103057,103061,103065,103070,103074,103079,103084,103089,103093,103097,103101,103105,103109,103113,103125,103137,103145,103149,103159,103169,103179,103190,103202,103206,103223,103227,103231,103242,103253,103257,103261,103273],{"__ignoreMap":63},[67,103026,103027,103029],{"class":69,"line":70},[67,103028,622],{"class":84},[67,103030,638],{"class":73},[67,103032,103033],{"class":69,"line":191},[67,103034,631],{"emptyLinePlaceholder":630},[67,103036,103037],{"class":69,"line":202},[67,103038,631],{"emptyLinePlaceholder":630},[67,103040,103041,103043,103045],{"class":69,"line":641},[67,103042,668],{"class":77},[67,103044,671],{"class":84},[67,103046,674],{"class":114},[67,103048,103049],{"class":69,"line":655},[67,103050,103051],{"class":114},"\u003Cmujoco model=\"first_sim\">\n",[67,103053,103054],{"class":69,"line":660},[67,103055,103056],{"class":114},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[67,103058,103059],{"class":69,"line":665},[67,103060,631],{"emptyLinePlaceholder":630},[67,103062,103063],{"class":69,"line":677},[67,103064,697],{"class":114},[67,103066,103067],{"class":69,"line":683},[67,103068,103069],{"class":114},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[67,103071,103072],{"class":69,"line":689},[67,103073,631],{"emptyLinePlaceholder":630},[67,103075,103076],{"class":69,"line":694},[67,103077,103078],{"class":114},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[67,103080,103081],{"class":69,"line":700},[67,103082,103083],{"class":114},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[67,103085,103086],{"class":69,"line":706},[67,103087,103088],{"class":114},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[67,103090,103091],{"class":69,"line":712},[67,103092,744],{"class":114},[67,103094,103095],{"class":69,"line":717},[67,103096,750],{"class":114},[67,103098,103099],{"class":69,"line":723},[67,103100,779],{"class":114},[67,103102,103103],{"class":69,"line":729},[67,103104,785],{"class":114},[67,103106,103107],{"class":69,"line":735},[67,103108,631],{"emptyLinePlaceholder":630},[67,103110,103111],{"class":69,"line":741},[67,103112,631],{"emptyLinePlaceholder":630},[67,103114,103115,103117,103119,103121,103123],{"class":69,"line":747},[67,103116,801],{"class":84},[67,103118,804],{"class":110},[67,103120,807],{"class":73},[67,103122,810],{"class":77},[67,103124,813],{"class":73},[67,103126,103127,103129,103131,103133,103135],{"class":69,"line":753},[67,103128,819],{"class":73},[67,103130,85],{"class":84},[67,103132,824],{"class":73},[67,103134,668],{"class":77},[67,103136,829],{"class":73},[67,103138,103139,103141,103143],{"class":69,"line":758},[67,103140,835],{"class":73},[67,103142,85],{"class":84},[67,103144,840],{"class":73},[67,103146,103147],{"class":69,"line":764},[67,103148,631],{"emptyLinePlaceholder":630},[67,103150,103151,103153,103155,103157],{"class":69,"line":770},[67,103152,851],{"class":77},[67,103154,854],{"class":73},[67,103156,857],{"class":114},[67,103158,860],{"class":73},[67,103160,103161,103163,103165,103167],{"class":69,"line":776},[67,103162,851],{"class":77},[67,103164,854],{"class":73},[67,103166,870],{"class":114},[67,103168,873],{"class":73},[67,103170,103171,103173,103175,103177],{"class":69,"line":782},[67,103172,851],{"class":77},[67,103174,854],{"class":73},[67,103176,883],{"class":114},[67,103178,886],{"class":73},[67,103180,103181,103183,103185,103188],{"class":69,"line":788},[67,103182,851],{"class":77},[67,103184,854],{"class":73},[67,103186,103187],{"class":114},"\"initial time:\"",[67,103189,1031],{"class":73},[67,103191,103192,103194,103196,103199],{"class":69,"line":793},[67,103193,851],{"class":77},[67,103195,854],{"class":73},[67,103197,103198],{"class":114},"\"initial qpos:\"",[67,103200,103201],{"class":73},", data.qpos.copy())\n",[67,103203,103204],{"class":69,"line":798},[67,103205,631],{"emptyLinePlaceholder":630},[67,103207,103208,103210,103213,103215,103217,103219,103221],{"class":69,"line":816},[67,103209,935],{"class":84},[67,103211,103212],{"class":73}," _ ",[67,103214,941],{"class":84},[67,103216,944],{"class":77},[67,103218,854],{"class":73},[67,103220,2302],{"class":77},[67,103222,952],{"class":73},[67,103224,103225],{"class":69,"line":832},[67,103226,1013],{"class":73},[67,103228,103229],{"class":69,"line":843},[67,103230,631],{"emptyLinePlaceholder":630},[67,103232,103233,103235,103237,103240],{"class":69,"line":848},[67,103234,851],{"class":77},[67,103236,854],{"class":73},[67,103238,103239],{"class":114},"\"final time:\"",[67,103241,1031],{"class":73},[67,103243,103244,103246,103248,103251],{"class":69,"line":863},[67,103245,851],{"class":77},[67,103247,854],{"class":73},[67,103249,103250],{"class":114},"\"final qpos:\"",[67,103252,103201],{"class":73},[67,103254,103255],{"class":69,"line":876},[67,103256,631],{"emptyLinePlaceholder":630},[67,103258,103259],{"class":69,"line":889},[67,103260,631],{"emptyLinePlaceholder":630},[67,103262,103263,103265,103267,103269,103271],{"class":69,"line":894},[67,103264,1096],{"class":84},[67,103266,1099],{"class":77},[67,103268,1102],{"class":84},[67,103270,1105],{"class":114},[67,103272,813],{"class":73},[67,103274,103275],{"class":69,"line":911},[67,103276,1113],{"class":73},[391,103278,1146],{"id":1146},[19,103280,103281],{},"导入库：",[58,103283,103285],{"className":60,"code":103284,"language":62,"meta":63,"style":63},"import mujoco\n",[32,103286,103287],{"__ignoreMap":63},[67,103288,103289,103291],{"class":69,"line":70},[67,103290,622],{"class":84},[67,103292,638],{"class":73},[19,103294,103295],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103297,103298],{},"定义 XML：",[58,103300,103302],{"className":60,"code":103301,"language":62,"meta":63,"style":63},"XML = \"\"\"\n...\n\"\"\"\n",[32,103303,103304,103312,103317],{"__ignoreMap":63},[67,103305,103306,103308,103310],{"class":69,"line":70},[67,103307,668],{"class":77},[67,103309,671],{"class":84},[67,103311,674],{"class":114},[67,103313,103314],{"class":69,"line":191},[67,103315,103316],{"class":114},"...\n",[67,103318,103319],{"class":69,"line":202},[67,103320,785],{"class":114},[19,103322,103323,103324,103327],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[32,103325,103326],{},"freejoint"," 的方块。",[19,103329,103330],{},"编译模型：",[58,103332,103334],{"className":60,"code":103333,"language":62,"meta":63,"style":63},"model = mujoco.MjModel.from_xml_string(XML)\n",[32,103335,103336],{"__ignoreMap":63},[67,103337,103338,103341,103343,103345,103347],{"class":69,"line":70},[67,103339,103340],{"class":73},"model ",[67,103342,85],{"class":84},[67,103344,824],{"class":73},[67,103346,668],{"class":77},[67,103348,829],{"class":73},[19,103350,103351],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103353,103354],{},"创建数据：",[58,103356,103358],{"className":60,"code":103357,"language":62,"meta":63,"style":63},"data = mujoco.MjData(model)\n",[32,103359,103360],{"__ignoreMap":63},[67,103361,103362,103365,103367],{"class":69,"line":70},[67,103363,103364],{"class":73},"data ",[67,103366,85],{"class":84},[67,103368,840],{"class":73},[19,103370,103371,103373,103374,103376],{},[32,103372,35170],{}," 会保存仿真当前状态。刚创建时，时间是 ",[32,103375,78],{},"，方块还在初始位置。",[19,103378,1231],{},[58,103380,103382],{"className":60,"code":103381,"language":62,"meta":63,"style":63},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[32,103383,103384,103400],{"__ignoreMap":63},[67,103385,103386,103388,103390,103392,103394,103396,103398],{"class":69,"line":70},[67,103387,1512],{"class":84},[67,103389,103212],{"class":73},[67,103391,941],{"class":84},[67,103393,944],{"class":77},[67,103395,854],{"class":73},[67,103397,2302],{"class":77},[67,103399,952],{"class":73},[67,103401,103402],{"class":69,"line":191},[67,103403,103404],{"class":73},"    mujoco.mj_step(model, data)\n",[19,103406,103407,103408,103410],{},"每次 ",[32,103409,102948],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[391,103412,1246],{"id":1246},[19,103414,103415],{},"下面把完整代码按新手视角拆开讲。",[58,103417,103418],{"className":60,"code":103284,"language":62,"meta":63,"style":63},[32,103419,103420],{"__ignoreMap":63},[67,103421,103422,103424],{"class":69,"line":70},[67,103423,622],{"class":84},[67,103425,638],{"class":73},[19,103427,103428,103430,103431,2204,103433,2204,103435,230],{},[32,103429,622],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[32,103432,102430],{},[32,103434,102435],{},[32,103436,103437],{},"mujoco.mj_step",[58,103439,103440],{"className":60,"code":103301,"language":62,"meta":63,"style":63},[32,103441,103442,103450,103454],{"__ignoreMap":63},[67,103443,103444,103446,103448],{"class":69,"line":70},[67,103445,668],{"class":77},[67,103447,671],{"class":84},[67,103449,674],{"class":114},[67,103451,103452],{"class":69,"line":191},[67,103453,103316],{"class":114},[67,103455,103456],{"class":69,"line":202},[67,103457,785],{"class":114},[19,103459,103460,103462,103463,103466],{},[32,103461,668],{}," 是一个变量名。右边的三引号 ",[32,103464,103465],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[58,103468,103469],{"className":250,"code":103051,"language":252,"meta":63,"style":63},[32,103470,103471],{"__ignoreMap":63},[67,103472,103473,103475,103477,103480,103482,103485],{"class":69,"line":70},[67,103474,259],{"class":73},[67,103476,102761],{"class":262},[67,103478,103479],{"class":110}," model",[67,103481,85],{"class":73},[67,103483,103484],{"class":114},"\"first_sim\"",[67,103486,323],{"class":73},[19,103488,103489,103490,103493,103494,230],{},"这是 XML 的根标签。",[32,103491,103492],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[32,103495,103496],{},"first_sim",[58,103498,103499],{"className":250,"code":102916,"language":252,"meta":63,"style":63},[32,103500,103501],{"__ignoreMap":63},[67,103502,103503,103505,103507,103509,103511,103513,103515,103517,103519],{"class":69,"line":70},[67,103504,259],{"class":73},[67,103506,70926],{"class":262},[67,103508,102927],{"class":110},[67,103510,85],{"class":73},[67,103512,102932],{"class":114},[67,103514,102935],{"class":110},[67,103516,85],{"class":73},[67,103518,102940],{"class":114},[67,103520,289],{"class":73},[19,103522,103523,103525,103526,103529,103530,103533],{},[32,103524,70926],{}," 用来设置仿真参数。",[32,103527,103528],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[32,103531,103532],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[58,103535,103537],{"className":250,"code":103536,"language":252,"meta":63,"style":63},"\u003Cworldbody>\n",[32,103538,103539],{"__ignoreMap":63},[67,103540,103541,103543,103546],{"class":69,"line":70},[67,103542,259],{"class":73},[67,103544,103545],{"class":262},"worldbody",[67,103547,323],{"class":73},[19,103549,103550,103552],{},[32,103551,103545],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[58,103554,103556],{"className":250,"code":103555,"language":252,"meta":63,"style":63},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[32,103557,103558],{"__ignoreMap":63},[67,103559,103560,103562,103564,103566,103568,103571,103573,103575,103578,103580,103582,103585,103587,103589,103592],{"class":69,"line":70},[67,103561,259],{"class":73},[67,103563,1352],{"class":262},[67,103565,266],{"class":110},[67,103567,85],{"class":73},[67,103569,103570],{"class":114},"\"floor\"",[67,103572,274],{"class":110},[67,103574,85],{"class":73},[67,103576,103577],{"class":114},"\"plane\"",[67,103579,1377],{"class":110},[67,103581,85],{"class":73},[67,103583,103584],{"class":114},"\"2 2 0.1\"",[67,103586,80527],{"class":110},[67,103588,85],{"class":73},[67,103590,103591],{"class":114},"\"0.8 0.8 0.8 1\"",[67,103593,289],{"class":73},[19,103595,103596,103597,103599,103600,103603,103604,103607,103608,103610],{},"这行创建地面。",[32,103598,1352],{}," 是几何体。",[32,103601,103602],{},"name=\"floor\""," 是名字。",[32,103605,103606],{},"type=\"plane\""," 表示平面。",[32,103609,56871],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[58,103612,103614],{"className":250,"code":103613,"language":252,"meta":63,"style":63},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[32,103615,103616],{"__ignoreMap":63},[67,103617,103618,103620,103622,103624,103626,103628,103630,103632,103634],{"class":69,"line":70},[67,103619,259],{"class":73},[67,103621,53565],{"class":262},[67,103623,266],{"class":110},[67,103625,85],{"class":73},[67,103627,55253],{"class":114},[67,103629,102842],{"class":110},[67,103631,85],{"class":73},[67,103633,102847],{"class":114},[67,103635,323],{"class":73},[19,103637,103638,103639,230,103641,103644,103645,103647],{},"这行创建一个刚体，名字叫 ",[32,103640,55476],{},[32,103642,103643],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[32,103646,102902],{},"，也就是离地面 1 米高。",[58,103649,103651],{"className":250,"code":103650,"language":252,"meta":63,"style":63},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[32,103652,103653],{"__ignoreMap":63},[67,103654,103655,103657,103659,103661,103663,103666],{"class":69,"line":70},[67,103656,259],{"class":73},[67,103658,103326],{"class":262},[67,103660,266],{"class":110},[67,103662,85],{"class":73},[67,103664,103665],{"class":114},"\"box_free\"",[67,103667,289],{"class":73},[19,103669,103670,103671,103673],{},"这行很重要。",[32,103672,103326],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[58,103675,103677],{"className":250,"code":103676,"language":252,"meta":63,"style":63},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[32,103678,103679],{"__ignoreMap":63},[67,103680,103681,103683,103685,103687,103689,103691,103693,103695,103697,103699,103701,103703,103705,103707,103709,103711,103713,103716],{"class":69,"line":70},[67,103682,259],{"class":73},[67,103684,1352],{"class":262},[67,103686,266],{"class":110},[67,103688,85],{"class":73},[67,103690,102862],{"class":114},[67,103692,274],{"class":110},[67,103694,85],{"class":73},[67,103696,55253],{"class":114},[67,103698,1377],{"class":110},[67,103700,85],{"class":73},[67,103702,102875],{"class":114},[67,103704,1385],{"class":110},[67,103706,85],{"class":73},[67,103708,353],{"class":114},[67,103710,80527],{"class":110},[67,103712,85],{"class":73},[67,103714,103715],{"class":114},"\"1 0 0 1\"",[67,103717,289],{"class":73},[19,103719,103720,103721,103724,103725,103728,103729,103732,103733,103736],{},"这行给 box body 添加一个盒子形状。",[32,103722,103723],{},"type=\"box\""," 表示形状是盒子。",[32,103726,103727],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[32,103730,103731],{},"mass=\"1\""," 表示质量是 1。",[32,103734,103735],{},"rgba=\"1 0 0 1\""," 表示红色。",[58,103738,103740],{"className":60,"code":103739,"language":62,"meta":63,"style":63},"def main() -> None:\n",[32,103741,103742],{"__ignoreMap":63},[67,103743,103744,103746,103748,103750,103752],{"class":69,"line":70},[67,103745,801],{"class":84},[67,103747,804],{"class":110},[67,103749,807],{"class":73},[67,103751,810],{"class":77},[67,103753,813],{"class":73},[19,103755,103756,103758,103759,103762,103763,103766],{},[32,103757,801],{}," 用来定义函数。这里定义了一个叫 ",[32,103760,103761],{},"main"," 的函数。",[32,103764,103765],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[58,103768,103769],{"className":60,"code":103333,"language":62,"meta":63,"style":63},[32,103770,103771],{"__ignoreMap":63},[67,103772,103773,103775,103777,103779,103781],{"class":69,"line":70},[67,103774,103340],{"class":73},[67,103776,85],{"class":84},[67,103778,824],{"class":73},[67,103780,668],{"class":77},[67,103782,829],{"class":73},[19,103784,103785,103786,103789],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[32,103787,103788],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[58,103791,103792],{"className":60,"code":103357,"language":62,"meta":63,"style":63},[32,103793,103794],{"__ignoreMap":63},[67,103795,103796,103798,103800],{"class":69,"line":70},[67,103797,103364],{"class":73},[67,103799,85],{"class":84},[67,103801,840],{"class":73},[19,103803,103804,103805,103807,103808,103810],{},"这行创建仿真数据。",[32,103806,35170],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[32,103809,35170],{}," 都会变化。",[58,103812,103814],{"className":60,"code":103813,"language":62,"meta":63,"style":63},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[32,103815,103816,103826,103836],{"__ignoreMap":63},[67,103817,103818,103820,103822,103824],{"class":69,"line":70},[67,103819,1626],{"class":77},[67,103821,854],{"class":73},[67,103823,857],{"class":114},[67,103825,860],{"class":73},[67,103827,103828,103830,103832,103834],{"class":69,"line":191},[67,103829,1626],{"class":77},[67,103831,854],{"class":73},[67,103833,870],{"class":114},[67,103835,873],{"class":73},[67,103837,103838,103840,103842,103844],{"class":69,"line":202},[67,103839,1626],{"class":77},[67,103841,854],{"class":73},[67,103843,883],{"class":114},[67,103845,886],{"class":73},[19,103847,103848,103850,103851,103854,103855,103858,103859,103861,103862,103865],{},[32,103849,1626],{}," 用来输出信息。",[32,103852,103853],{},"model.nq"," 是位置变量数量，",[32,103856,103857],{},"model.nv"," 是速度变量数量，",[32,103860,229],{}," 是控制输入数量。这个例子没有电机，所以 ",[32,103863,103864],{},"nu"," 是 0。",[58,103867,103869],{"className":60,"code":103868,"language":62,"meta":63,"style":63},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[32,103870,103871,103881],{"__ignoreMap":63},[67,103872,103873,103875,103877,103879],{"class":69,"line":70},[67,103874,1626],{"class":77},[67,103876,854],{"class":73},[67,103878,103187],{"class":114},[67,103880,1031],{"class":73},[67,103882,103883,103885,103887,103889],{"class":69,"line":191},[67,103884,1626],{"class":77},[67,103886,854],{"class":73},[67,103888,103198],{"class":114},[67,103890,103201],{"class":73},[19,103892,103893,103894,103896,103897,103899,103900,103903],{},"这里打印初始时间和初始位置。",[32,103895,102805],{}," 一开始是 0。",[32,103898,1642],{}," 是位置数组。",[32,103901,103902],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[58,103905,103906],{"className":60,"code":103381,"language":62,"meta":63,"style":63},[32,103907,103908,103924],{"__ignoreMap":63},[67,103909,103910,103912,103914,103916,103918,103920,103922],{"class":69,"line":70},[67,103911,1512],{"class":84},[67,103913,103212],{"class":73},[67,103915,941],{"class":84},[67,103917,944],{"class":77},[67,103919,854],{"class":73},[67,103921,2302],{"class":77},[67,103923,952],{"class":73},[67,103925,103926],{"class":69,"line":191},[67,103927,103404],{"class":73},[19,103929,103930,103932,103933,103936,103937,103939,103940,103942],{},[32,103931,1512],{}," 是循环。",[32,103934,103935],{},"range(100)"," 表示循环 100 次。",[32,103938,1530],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[32,103941,102948],{},"，仿真就前进一步。",[58,103944,103946],{"className":60,"code":103945,"language":62,"meta":63,"style":63},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[32,103947,103948,103958],{"__ignoreMap":63},[67,103949,103950,103952,103954,103956],{"class":69,"line":70},[67,103951,1626],{"class":77},[67,103953,854],{"class":73},[67,103955,103239],{"class":114},[67,103957,1031],{"class":73},[67,103959,103960,103962,103964,103966],{"class":69,"line":191},[67,103961,1626],{"class":77},[67,103963,854],{"class":73},[67,103965,103250],{"class":114},[67,103967,103201],{"class":73},[19,103969,103970],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[58,103972,103974],{"className":60,"code":103973,"language":62,"meta":63,"style":63},"if __name__ == \"__main__\":\n    main()\n",[32,103975,103976,103988],{"__ignoreMap":63},[67,103977,103978,103980,103982,103984,103986],{"class":69,"line":70},[67,103979,1096],{"class":84},[67,103981,1099],{"class":77},[67,103983,1102],{"class":84},[67,103985,1105],{"class":114},[67,103987,813],{"class":73},[67,103989,103990],{"class":69,"line":191},[67,103991,1113],{"class":73},[19,103993,103994,103995,103998,103999,230],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[32,103996,103997],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[32,104000,103997],{},[19,104002,1132],{},[58,104004,104006],{"className":101,"code":104005,"language":103,"meta":63,"style":63},"python ch1_first_sim.py\n",[32,104007,104008],{"__ignoreMap":63},[67,104009,104010,104012],{"class":69,"line":70},[67,104011,62],{"class":110},[67,104013,103016],{"class":114},[14,104015,1647],{"id":1646},[19,104017,104018],{},"你应该看到类似输出:",[58,104020,104023],{"className":104021,"code":104022,"language":603,"meta":63},[601],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[32,104024,104022],{"__ignoreMap":63},[19,104026,104027,104029,104030,104033,104034,230],{},[32,104028,103326],{}," 有 7 个位置变量: ",[32,104031,104032],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[32,104035,104036],{},"vx vy vz wx wy wz",[19,104038,104039,104040,104043],{},"你还会看到 ",[32,104041,104042],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104045,1696],{"id":1695},[19,104047,104048],{},"确认版本:",[58,104050,104051],{"className":101,"code":102685,"language":103,"meta":63,"style":63},[32,104052,104053],{"__ignoreMap":63},[67,104054,104055,104057,104059],{"class":69,"line":70},[67,104056,62],{"class":110},[67,104058,32141],{"class":77},[67,104060,102696],{"class":114},[19,104062,104063],{},"确认导入的是官方 bindings:",[58,104065,104067],{"className":101,"code":104066,"language":103,"meta":63,"style":63},"python -c \"import mujoco; print(mujoco)\"\n",[32,104068,104069],{"__ignoreMap":63},[67,104070,104071,104073,104075],{"class":69,"line":70},[67,104072,62],{"class":110},[67,104074,32141],{"class":77},[67,104076,104077],{"class":114}," \"import mujoco; print(mujoco)\"\n",[19,104079,104080],{},"运行程序:",[58,104082,104083],{"className":101,"code":104005,"language":103,"meta":63,"style":63},[32,104084,104085],{"__ignoreMap":63},[67,104086,104087,104089],{"class":69,"line":70},[67,104088,62],{"class":110},[67,104090,103016],{"class":114},[19,104092,104093,104094,104097,104098,230],{},"检查 ",[32,104095,104096],{},"final time"," 是否约等于 ",[32,104099,104100],{},"1.0",[19,104102,104103],{},"再做几个小实验：",[26,104105,104106,104114,104122,104135],{},[29,104107,1701,104108,1704,104110,104113],{},[32,104109,103643],{},[32,104111,104112],{},"pos=\"0 0 2\"","，观察初始高度变化。",[29,104115,1701,104116,1704,104118,104121],{},[32,104117,103532],{},[32,104119,104120],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[29,104123,1701,104124,1704,104126,104129,104130,104132,104133,230],{},[32,104125,103528],{},[32,104127,104128],{},"timestep=\"0.005\"","，观察 100 步后的 ",[32,104131,104096],{}," 是否变成约 ",[32,104134,1691],{},[29,104136,104137,104138,104141],{},"删除 ",[32,104139,104140],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104143,104144],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104146,1748],{"id":1747},[391,104148,104150],{"id":104149},"modulenotfounderror-no-module-named-mujoco",[32,104151,104152],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104154,104155],{},"解决:",[58,104157,104159],{"className":101,"code":104158,"language":103,"meta":63,"style":63},"pip install \"mujoco>=2.3\"\n",[32,104160,104161],{"__ignoreMap":63},[67,104162,104163,104165,104167],{"class":69,"line":70},[67,104164,149],{"class":110},[67,104166,118],{"class":114},[67,104168,104169],{"class":114}," \"mujoco>=2.3\"\n",[391,104171,104173],{"id":104172},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104175,104176],{},"先安装系统依赖:",[58,104178,104180],{"className":101,"code":104179,"language":103,"meta":63,"style":63},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[32,104181,104182],{"__ignoreMap":63},[67,104183,104184,104186,104188,104190,104192,104194,104196,104199,104201,104204,104206],{"class":69,"line":70},[67,104185,111],{"class":110},[67,104187,115],{"class":114},[67,104189,118],{"class":114},[67,104191,121],{"class":77},[67,104193,130],{"class":114},[67,104195,133],{"class":114},[67,104197,104198],{"class":114}," glfw",[67,104200,102583],{"class":114},[67,104202,104203],{"class":114}," libX11",[67,104205,102596],{"class":114},[67,104207,104208],{"class":114}," libXrandr\n",[391,104210,104212],{"id":104211},"xml-解析失败","XML 解析失败",[19,104214,104215],{},"检查:",[26,104217,104218,104221,104224,104230],{},[29,104219,104220],{},"标签是否闭合",[29,104222,104223],{},"属性是否带引号",[29,104225,104226,104227],{},"根节点是否是 ",[32,104228,104229],{},"\u003Cmujoco>",[29,104231,104232,104234,104235,104238],{},[32,104233,53565],{}," 是否放在 ",[32,104236,104237],{},"\u003Cworldbody>"," 内部",[391,104240,104242,104244,104245],{"id":104241},"final-time-不是严格等于-10",[32,104243,104096],{}," 不是严格等于 ",[32,104246,104100],{},[19,104248,104249],{},"这通常不是错误。浮点数计算可能得到：",[58,104251,104254],{"className":104252,"code":104253,"language":603,"meta":63},[601],"1.0000000000000007\n",[32,104255,104253],{"__ignoreMap":63},[19,104257,104258,104259,104261],{},"只要接近 ",[32,104260,104100],{}," 就正常。",[391,104263,104264],{"id":104264},"方块没有掉下来",[19,104266,1804],{},[26,104268,104269,104275,104281,104286],{},[29,104270,104271,104272],{},"方块 body 里是否有 ",[32,104273,104274],{},"\u003Cfreejoint\u002F>",[29,104276,104277,104278],{},"重力是否是 ",[32,104279,104280],{},"0 0 -9.81",[29,104282,104283,104284],{},"是否真的调用了 ",[32,104285,102440],{},[29,104287,104288,104289,104291,104292],{},"你看的是否是 ",[32,104290,104042],{},"，不是 ",[32,104293,104294],{},"initial qpos",[14,104296,1889],{"id":1888},[19,104298,104299],{},"本章你已经完成了 MuJoCo 的最小闭环：",[58,104301,104304],{"className":104302,"code":104303,"language":603,"meta":63},[601],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[32,104305,104303],{"__ignoreMap":63},[19,104307,104308],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1903,104310,104311],{},"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":63,"searchDepth":191,"depth":191,"links":104313},[104314,104315,104316,104321,104325,104326,104327,104335],{"id":16,"depth":191,"text":17},{"id":94,"depth":191,"text":95},{"id":243,"depth":191,"text":244,"children":104317},[104318,104319,104320],{"id":102818,"depth":202,"text":102819},{"id":102909,"depth":202,"text":102910},{"id":102961,"depth":202,"text":102962},{"id":611,"depth":191,"text":612,"children":104322},[104323,104324],{"id":1146,"depth":202,"text":1146},{"id":1246,"depth":202,"text":1246},{"id":1646,"depth":191,"text":1647},{"id":1695,"depth":191,"text":1696},{"id":1747,"depth":191,"text":1748,"children":104328},[104329,104330,104331,104332,104334],{"id":104149,"depth":202,"text":104152},{"id":104172,"depth":202,"text":104173},{"id":104211,"depth":202,"text":104212},{"id":104241,"depth":202,"text":104333},"final time 不是严格等于 1.0",{"id":104264,"depth":202,"text":104264},{"id":1888,"depth":191,"text":1889},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102395,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104342,"title":104343,"body":104344,"description":63,"extension":1930,"meta":105985,"navigation":630,"path":105986,"seo":105987,"stem":105988,"__hash__":105989},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104345,"toc":105961},[104346,104349,104351,104354,104357,104374,104468,104471,104477,104479,104481,104505,104507,104521,104523,104564,104566,104579,104581,104584,104632,104643,104646,104649,104655,104668,104735,104737,104756,104759,104762,104768,104770,104779,104782,104786,104795,104874,104883,104887,104893,104907,104917,104919,105247,105249,105261,105263,105274,105276,105279,105297,105300,105303,105321,105332,105335,105350,105360,105362,105382,105399,105419,105425,105464,105480,105496,105502,105505,105529,105545,105550,105579,105596,105621,105624,105639,105648,105663,105672,105687,105694,105696,105705,105718,105725,105728,105767,105774,105776,105828,105830,105836,105839,105846,105853,105856,105858,105876,105879,105882,105916,105928,105930,105933,105955,105958],[10,104347,104343],{"id":104348},"_2xml-与-mjcf-物理建模基础",[14,104350,17],{"id":16},[19,104352,104353],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104355,104356],{},"本章结束后，你应该能看懂一个简单模型里：",[26,104358,104359,104362,104365,104368,104371],{},[29,104360,104361],{},"地面在哪里。",[29,104363,104364],{},"物体初始位置在哪里。",[29,104366,104367],{},"几何体是什么形状。",[29,104369,104370],{},"哪些 body 可以自由运动。",[29,104372,104373],{},"如何用名字在 Python 里找到 XML 中的对象。",[399,104375,104376,104385],{},[402,104377,104378],{},[405,104379,104380,104383],{},[408,104381,104382],{"align":410},"标签",[408,104384,414],{"align":410},[419,104386,104387,104396,104406,104415,104425,104435,104448,104458],{},[405,104388,104389,104393],{},[424,104390,104391],{"align":410},[32,104392,104229],{},[424,104394,104395],{"align":410},"根节点",[405,104397,104398,104403],{},[424,104399,104400],{"align":410},[32,104401,104402],{},"\u003Coption>",[424,104404,104405],{"align":410},"仿真参数",[405,104407,104408,104412],{},[424,104409,104410],{"align":410},[32,104411,104237],{},[424,104413,104414],{"align":410},"世界中的物体",[405,104416,104417,104422],{},[424,104418,104419],{"align":410},[32,104420,104421],{},"\u003Cbody>",[424,104423,104424],{"align":410},"刚体",[405,104426,104427,104432],{},[424,104428,104429],{"align":410},[32,104430,104431],{},"\u003Cgeom>",[424,104433,104434],{"align":410},"几何体、碰撞体、可视体",[405,104436,104437,104445],{},[424,104438,104439,26770,104442],{"align":410},[32,104440,104441],{},"\u003Cjoint>",[32,104443,104444],{},"\u003Cfreejoint>",[424,104446,104447],{"align":410},"关节",[405,104449,104450,104455],{},[424,104451,104452],{"align":410},[32,104453,104454],{},"\u003Csite>",[424,104456,104457],{"align":410},"标记点",[405,104459,104460,104465],{},[424,104461,104462],{"align":410},[32,104463,104464],{},"\u003Cactuator>",[424,104466,104467],{"align":410},"控制器",[19,104469,104470],{},"初学时可以先记住：",[58,104472,104475],{"className":104473,"code":104474,"language":603,"meta":63},[601],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[32,104476,104474],{"__ignoreMap":63},[14,104478,95],{"id":94},[19,104480,98],{},[58,104482,104484],{"className":101,"code":104483,"language":103,"meta":63,"style":63},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[32,104485,104486],{"__ignoreMap":63},[67,104487,104488,104490,104492,104494,104496,104498,104500,104502],{"class":69,"line":70},[67,104489,111],{"class":110},[67,104491,115],{"class":114},[67,104493,118],{"class":114},[67,104495,121],{"class":77},[67,104497,130],{"class":114},[67,104499,133],{"class":114},[67,104501,104198],{"class":114},[67,104503,104504],{"class":114}," glfw-devel\n",[19,104506,139],{},[58,104508,104509],{"className":101,"code":142,"language":103,"meta":63,"style":63},[32,104510,104511],{"__ignoreMap":63},[67,104512,104513,104515,104517,104519],{"class":69,"line":70},[67,104514,149],{"class":110},[67,104516,118],{"class":114},[67,104518,154],{"class":114},[67,104520,157],{"class":114},[19,104522,160],{},[58,104524,104526],{"className":101,"code":104525,"language":103,"meta":63,"style":63},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[32,104527,104528,104545,104554],{"__ignoreMap":63},[67,104529,104530,104532,104534,104536,104539,104541,104543],{"class":69,"line":70},[67,104531,170],{"class":110},[67,104533,173],{"class":114},[67,104535,176],{"class":77},[67,104537,104538],{"class":114}," mujoco-xml",[67,104540,182],{"class":114},[67,104542,185],{"class":77},[67,104544,188],{"class":77},[67,104546,104547,104549,104551],{"class":69,"line":191},[67,104548,170],{"class":110},[67,104550,196],{"class":114},[67,104552,104553],{"class":114}," mujoco-xml\n",[67,104555,104556,104558,104560,104562],{"class":69,"line":202},[67,104557,149],{"class":110},[67,104559,118],{"class":114},[67,104561,154],{"class":114},[67,104563,157],{"class":114},[19,104565,213],{},[26,104567,104568,104571,104576],{},[29,104569,104570],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[29,104572,104573,104574,230],{},"本章使用基础标签，适用于 ",[32,104575,102767],{},[29,104577,104578],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104580,244],{"id":243},[19,104582,104583],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[58,104585,104587],{"className":250,"code":104586,"language":252,"meta":63,"style":63},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[32,104588,104589,104603,104611,104616,104624],{"__ignoreMap":63},[67,104590,104591,104593,104595,104597,104599,104601],{"class":69,"line":70},[67,104592,259],{"class":73},[67,104594,102761],{"class":262},[67,104596,103479],{"class":110},[67,104598,85],{"class":73},[67,104600,64439],{"class":114},[67,104602,323],{"class":73},[67,104604,104605,104607,104609],{"class":69,"line":191},[67,104606,328],{"class":73},[67,104608,103545],{"class":262},[67,104610,323],{"class":73},[67,104612,104613],{"class":69,"line":202},[67,104614,104615],{"class":73},"    ...\n",[67,104617,104618,104620,104622],{"class":69,"line":641},[67,104619,54181],{"class":73},[67,104621,103545],{"class":262},[67,104623,323],{"class":73},[67,104625,104626,104628,104630],{"class":69,"line":655},[67,104627,376],{"class":73},[67,104629,102761],{"class":262},[67,104631,323],{"class":73},[19,104633,104634,104636,104637,104639,104640,104642],{},[32,104635,53565],{}," 表示刚体。",[32,104638,1352],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[32,104641,263],{}," 表示刚体相对父刚体如何运动。",[391,104644,104645],{"id":104645},"层级结构非常重要",[19,104647,104648],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[58,104650,104653],{"className":104651,"code":104652,"language":603,"meta":63},[601],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[32,104654,104652],{"__ignoreMap":63},[19,104656,104657,1264,104660,104663,104664,104667],{},[32,104658,104659],{},"red_box_geom",[32,104661,104662],{},"box_center"," 都属于 ",[32,104665,104666],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[58,104669,104671],{"className":250,"code":104670,"language":252,"meta":63,"style":63},"\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",[32,104672,104673,104693,104707,104727],{"__ignoreMap":63},[67,104674,104675,104677,104679,104681,104683,104685,104687,104689,104691],{"class":69,"line":70},[67,104676,259],{"class":73},[67,104678,53565],{"class":262},[67,104680,266],{"class":110},[67,104682,85],{"class":73},[67,104684,55253],{"class":114},[67,104686,102842],{"class":110},[67,104688,85],{"class":73},[67,104690,102847],{"class":114},[67,104692,323],{"class":73},[67,104694,104695,104697,104699,104701,104703,104705],{"class":69,"line":191},[67,104696,328],{"class":73},[67,104698,103326],{"class":262},[67,104700,266],{"class":110},[67,104702,85],{"class":73},[67,104704,103665],{"class":114},[67,104706,289],{"class":73},[67,104708,104709,104711,104713,104715,104717,104719,104721,104723,104725],{"class":69,"line":202},[67,104710,328],{"class":73},[67,104712,1352],{"class":262},[67,104714,274],{"class":110},[67,104716,85],{"class":73},[67,104718,55253],{"class":114},[67,104720,1377],{"class":110},[67,104722,85],{"class":73},[67,104724,102875],{"class":114},[67,104726,289],{"class":73},[67,104728,104729,104731,104733],{"class":69,"line":641},[67,104730,376],{"class":73},[67,104732,53565],{"class":262},[67,104734,323],{"class":73},[19,104736,292],{},[26,104738,104739,104745,104750,104753],{},[29,104740,104741,104742,104744],{},"创建名为 ",[32,104743,55476],{}," 的刚体",[29,104746,104747,104748],{},"初始位置在世界坐标 ",[32,104749,102902],{},[29,104751,104752],{},"它有一个自由关节",[29,104754,104755],{},"它有一个盒子几何体",[391,104757,104758],{"id":104758},"坐标怎么理解",[19,104760,104761],{},"MuJoCo 默认使用三维坐标：",[58,104763,104766],{"className":104764,"code":104765,"language":603,"meta":63},[601],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[32,104767,104765],{"__ignoreMap":63},[19,104769,16431],{},[58,104771,104773],{"className":250,"code":104772,"language":252,"meta":63,"style":63},"pos=\"0 0 1\"\n",[32,104774,104775],{"__ignoreMap":63},[67,104776,104777],{"class":69,"line":70},[67,104778,104772],{"class":73},[19,104780,104781],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[391,104783,104785],{"id":104784},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104787,104788,104789,84289,104792,104794],{},"不同 ",[32,104790,104791],{},"type",[32,104793,33268],{}," 含义不同：",[399,104796,104797,104812],{},[402,104798,104799],{},[405,104800,104801,104805,104810],{},[408,104802,104803],{"align":410},[32,104804,104791],{},[408,104806,104807,104809],{"align":410},[32,104808,33268],{}," 示例",[408,104811,102455],{"align":410},[419,104813,104814,104828,104843,104859],{},[405,104815,104816,104820,104825],{},[424,104817,104818],{"align":410},[32,104819,55476],{},[424,104821,104822],{"align":410},[32,104823,104824],{},"size=\"0.1 0.2 0.3\"",[424,104826,104827],{"align":410},"x\u002Fy\u002Fz 半边长，不是完整长度",[405,104829,104830,104835,104840],{},[424,104831,104832],{"align":410},[32,104833,104834],{},"sphere",[424,104836,104837],{"align":410},[32,104838,104839],{},"size=\"0.1\"",[424,104841,104842],{"align":410},"球半径",[405,104844,104845,104849,104853],{},[424,104846,104847],{"align":410},[32,104848,1398],{},[424,104850,104851],{"align":410},[32,104852,1413],{},[424,104854,104855,104856,104858],{"align":410},"胶囊半径，长度常用 ",[32,104857,1402],{}," 指定",[405,104860,104861,104866,104871],{},[424,104862,104863],{"align":410},[32,104864,104865],{},"plane",[424,104867,104868],{"align":410},[32,104869,104870],{},"size=\"3 3 0.1\"",[424,104872,104873],{"align":410},"可视平面大小，通常当地面",[19,104875,104876,104877,104879,104880,104882],{},"最容易踩坑的是 box：",[32,104878,103727],{}," 表示边长大约是 ",[32,104881,33807],{},"，因为 MuJoCo 用的是半边长。",[391,104884,104886],{"id":104885},"site-是什么","site 是什么",[19,104888,104889,104892],{},[32,104890,104891],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[26,104894,104895,104898,104901,104904],{},[29,104896,104897],{},"标记机械臂末端。",[29,104899,104900],{},"标记目标位置。",[29,104902,104903],{},"放传感器或相机参考点。",[29,104905,104906],{},"在 Python 中读取某个关键点的世界坐标。",[19,104908,104909,104910,1264,104913,104916],{},"在后面的 Reacher 任务中，",[32,104911,104912],{},"tip",[32,104914,104915],{},"target"," 就会用 site 表示。",[14,104918,612],{"id":611},[58,104920,104922],{"className":60,"code":104921,"language":62,"meta":63,"style":63},"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",[32,104923,104924,104930,104940,104944,104948,104956,104961,104965,104969,104973,104978,104982,104987,104992,104997,105002,105006,105010,105014,105018,105022,105026,105038,105050,105058,105062,105077,105092,105096,105109,105122,105135,105148,105152,105168,105172,105176,105187,105199,105211,105223,105227,105231,105243],{"__ignoreMap":63},[67,104925,104926,104928],{"class":69,"line":70},[67,104927,622],{"class":84},[67,104929,638],{"class":73},[67,104931,104932,104934,104936,104938],{"class":69,"line":191},[67,104933,622],{"class":84},[67,104935,646],{"class":73},[67,104937,649],{"class":84},[67,104939,652],{"class":73},[67,104941,104942],{"class":69,"line":202},[67,104943,631],{"emptyLinePlaceholder":630},[67,104945,104946],{"class":69,"line":641},[67,104947,631],{"emptyLinePlaceholder":630},[67,104949,104950,104952,104954],{"class":69,"line":655},[67,104951,668],{"class":77},[67,104953,671],{"class":84},[67,104955,674],{"class":114},[67,104957,104958],{"class":69,"line":660},[67,104959,104960],{"class":114},"\u003Cmujoco model=\"xml_basic\">\n",[67,104962,104963],{"class":69,"line":665},[67,104964,103056],{"class":114},[67,104966,104967],{"class":69,"line":677},[67,104968,631],{"emptyLinePlaceholder":630},[67,104970,104971],{"class":69,"line":683},[67,104972,697],{"class":114},[67,104974,104975],{"class":69,"line":689},[67,104976,104977],{"class":114},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[67,104979,104980],{"class":69,"line":694},[67,104981,631],{"emptyLinePlaceholder":630},[67,104983,104984],{"class":69,"line":700},[67,104985,104986],{"class":114},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[67,104988,104989],{"class":69,"line":706},[67,104990,104991],{"class":114},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[67,104993,104994],{"class":69,"line":712},[67,104995,104996],{"class":114},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[67,104998,104999],{"class":69,"line":717},[67,105000,105001],{"class":114},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[67,105003,105004],{"class":69,"line":723},[67,105005,744],{"class":114},[67,105007,105008],{"class":69,"line":729},[67,105009,750],{"class":114},[67,105011,105012],{"class":69,"line":735},[67,105013,779],{"class":114},[67,105015,105016],{"class":69,"line":741},[67,105017,785],{"class":114},[67,105019,105020],{"class":69,"line":747},[67,105021,631],{"emptyLinePlaceholder":630},[67,105023,105024],{"class":69,"line":753},[67,105025,631],{"emptyLinePlaceholder":630},[67,105027,105028,105030,105032,105034,105036],{"class":69,"line":758},[67,105029,801],{"class":84},[67,105031,804],{"class":110},[67,105033,807],{"class":73},[67,105035,810],{"class":77},[67,105037,813],{"class":73},[67,105039,105040,105042,105044,105046,105048],{"class":69,"line":764},[67,105041,819],{"class":73},[67,105043,85],{"class":84},[67,105045,824],{"class":73},[67,105047,668],{"class":77},[67,105049,829],{"class":73},[67,105051,105052,105054,105056],{"class":69,"line":770},[67,105053,835],{"class":73},[67,105055,85],{"class":84},[67,105057,840],{"class":73},[67,105059,105060],{"class":69,"line":776},[67,105061,631],{"emptyLinePlaceholder":630},[67,105063,105064,105067,105069,105072,105075],{"class":69,"line":782},[67,105065,105066],{"class":73},"    box_body_id ",[67,105068,85],{"class":84},[67,105070,105071],{"class":73}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[67,105073,105074],{"class":114},"\"red_box\"",[67,105076,829],{"class":73},[67,105078,105079,105082,105084,105087,105090],{"class":69,"line":788},[67,105080,105081],{"class":73},"    site_id ",[67,105083,85],{"class":84},[67,105085,105086],{"class":73}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[67,105088,105089],{"class":114},"\"box_center\"",[67,105091,829],{"class":73},[67,105093,105094],{"class":69,"line":793},[67,105095,631],{"emptyLinePlaceholder":630},[67,105097,105098,105100,105103,105105,105107],{"class":69,"line":798},[67,105099,897],{"class":84},[67,105101,105102],{"class":73}," box_body_id ",[67,105104,259],{"class":84},[67,105106,5913],{"class":77},[67,105108,813],{"class":73},[67,105110,105111,105113,105115,105117,105120],{"class":69,"line":816},[67,105112,914],{"class":84},[67,105114,917],{"class":77},[67,105116,854],{"class":73},[67,105118,105119],{"class":114},"\"body red_box not found\"",[67,105121,829],{"class":73},[67,105123,105124,105126,105129,105131,105133],{"class":69,"line":832},[67,105125,897],{"class":84},[67,105127,105128],{"class":73}," site_id ",[67,105130,259],{"class":84},[67,105132,5913],{"class":77},[67,105134,813],{"class":73},[67,105136,105137,105139,105141,105143,105146],{"class":69,"line":843},[67,105138,914],{"class":84},[67,105140,917],{"class":77},[67,105142,854],{"class":73},[67,105144,105145],{"class":114},"\"site box_center not found\"",[67,105147,829],{"class":73},[67,105149,105150],{"class":69,"line":848},[67,105151,631],{"emptyLinePlaceholder":630},[67,105153,105154,105156,105158,105160,105162,105164,105166],{"class":69,"line":863},[67,105155,935],{"class":84},[67,105157,103212],{"class":73},[67,105159,941],{"class":84},[67,105161,944],{"class":77},[67,105163,854],{"class":73},[67,105165,3565],{"class":77},[67,105167,952],{"class":73},[67,105169,105170],{"class":69,"line":876},[67,105171,1013],{"class":73},[67,105173,105174],{"class":69,"line":889},[67,105175,631],{"emptyLinePlaceholder":630},[67,105177,105178,105180,105182,105185],{"class":69,"line":894},[67,105179,851],{"class":77},[67,105181,854],{"class":73},[67,105183,105184],{"class":114},"\"simulation time:\"",[67,105186,1031],{"class":73},[67,105188,105189,105191,105193,105196],{"class":69,"line":911},[67,105190,851],{"class":77},[67,105192,854],{"class":73},[67,105194,105195],{"class":114},"\"box body position:\"",[67,105197,105198],{"class":73},", data.xpos[box_body_id].copy())\n",[67,105200,105201,105203,105205,105208],{"class":69,"line":927},[67,105202,851],{"class":77},[67,105204,854],{"class":73},[67,105206,105207],{"class":114},"\"site position:\"",[67,105209,105210],{"class":73},", data.site_xpos[site_id].copy())\n",[67,105212,105213,105215,105217,105220],{"class":69,"line":932},[67,105214,851],{"class":77},[67,105216,854],{"class":73},[67,105218,105219],{"class":114},"\"box qpos:\"",[67,105221,105222],{"class":73},", np.array(data.qpos))\n",[67,105224,105225],{"class":69,"line":955},[67,105226,631],{"emptyLinePlaceholder":630},[67,105228,105229],{"class":69,"line":971},[67,105230,631],{"emptyLinePlaceholder":630},[67,105232,105233,105235,105237,105239,105241],{"class":69,"line":1010},[67,105234,1096],{"class":84},[67,105236,1099],{"class":77},[67,105238,1102],{"class":84},[67,105240,1105],{"class":114},[67,105242,813],{"class":73},[67,105244,105245],{"class":69,"line":1016},[67,105246,1113],{"class":73},[19,105248,1116],{},[58,105250,105252],{"className":101,"code":105251,"language":103,"meta":63,"style":63},"touch ch2_xml_basic.py\n",[32,105253,105254],{"__ignoreMap":63},[67,105255,105256,105258],{"class":69,"line":70},[67,105257,1126],{"class":110},[67,105259,105260],{"class":114}," ch2_xml_basic.py\n",[19,105262,1132],{},[58,105264,105266],{"className":101,"code":105265,"language":103,"meta":63,"style":63},"python ch2_xml_basic.py\n",[32,105267,105268],{"__ignoreMap":63},[67,105269,105270,105272],{"class":69,"line":70},[67,105271,62],{"class":110},[67,105273,105260],{"class":114},[391,105275,1146],{"id":1146},[19,105277,105278],{},"用名字查找 body：",[58,105280,105282],{"className":60,"code":105281,"language":62,"meta":63,"style":63},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[32,105283,105284],{"__ignoreMap":63},[67,105285,105286,105289,105291,105293,105295],{"class":69,"line":70},[67,105287,105288],{"class":73},"box_body_id ",[67,105290,85],{"class":84},[67,105292,105071],{"class":73},[67,105294,105074],{"class":114},[67,105296,829],{"class":73},[19,105298,105299],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105301,105302],{},"用名字查找 site：",[58,105304,105306],{"className":60,"code":105305,"language":62,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[32,105307,105308],{"__ignoreMap":63},[67,105309,105310,105313,105315,105317,105319],{"class":69,"line":70},[67,105311,105312],{"class":73},"site_id ",[67,105314,85],{"class":84},[67,105316,105086],{"class":73},[67,105318,105089],{"class":114},[67,105320,829],{"class":73},[19,105322,105323,105324,105327,105328,105331],{},"注意第二个参数是对象类型。查 body 就用 ",[32,105325,105326],{},"mjOBJ_BODY","，查 site 就用 ",[32,105329,105330],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105333,105334],{},"读取世界坐标：",[58,105336,105338],{"className":60,"code":105337,"language":62,"meta":63,"style":63},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[32,105339,105340,105345],{"__ignoreMap":63},[67,105341,105342],{"class":69,"line":70},[67,105343,105344],{"class":73},"data.xpos[box_body_id]\n",[67,105346,105347],{"class":69,"line":191},[67,105348,105349],{"class":73},"data.site_xpos[site_id]\n",[19,105351,105352,105355,105356,105359],{},[32,105353,105354],{},"xpos"," 是 body 的世界坐标，",[32,105357,105358],{},"site_xpos"," 是 site 的世界坐标。",[391,105361,1246],{"id":1246},[58,105363,105364],{"className":60,"code":1271,"language":62,"meta":63,"style":63},[32,105365,105366,105372],{"__ignoreMap":63},[67,105367,105368,105370],{"class":69,"line":70},[67,105369,622],{"class":84},[67,105371,638],{"class":73},[67,105373,105374,105376,105378,105380],{"class":69,"line":191},[67,105375,622],{"class":84},[67,105377,646],{"class":73},[67,105379,649],{"class":84},[67,105381,652],{"class":73},[19,105383,105384,105385,105388,105389,105392,105393,2204,105396,230],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[32,105386,105387],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[32,105390,105391],{},"as np"," 是习惯写法，后面就可以写 ",[32,105394,105395],{},"np.array(...)",[32,105397,105398],{},"np.round(...)",[58,105400,105401],{"className":60,"code":103301,"language":62,"meta":63,"style":63},[32,105402,105403,105411,105415],{"__ignoreMap":63},[67,105404,105405,105407,105409],{"class":69,"line":70},[67,105406,668],{"class":77},[67,105408,671],{"class":84},[67,105410,674],{"class":114},[67,105412,105413],{"class":69,"line":191},[67,105414,103316],{"class":114},[67,105416,105417],{"class":69,"line":202},[67,105418,785],{"class":114},[19,105420,105421,105422,230],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[32,105423,105424],{},"mujoco.MjModel.from_xml_string(XML)",[58,105426,105428],{"className":250,"code":105427,"language":252,"meta":63,"style":63},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[32,105429,105430],{"__ignoreMap":63},[67,105431,105432,105434,105436,105438,105440,105442,105444,105446,105449,105451,105453,105455,105457,105459,105462],{"class":69,"line":70},[67,105433,259],{"class":73},[67,105435,104891],{"class":262},[67,105437,266],{"class":110},[67,105439,85],{"class":73},[67,105441,105089],{"class":114},[67,105443,102842],{"class":110},[67,105445,85],{"class":73},[67,105447,105448],{"class":114},"\"0 0 0\"",[67,105450,1377],{"class":110},[67,105452,85],{"class":73},[67,105454,1382],{"class":114},[67,105456,80527],{"class":110},[67,105458,85],{"class":73},[67,105460,105461],{"class":114},"\"0 1 0 1\"",[67,105463,289],{"class":73},[19,105465,105466,105468,105469,105472,105473,105475,105476,105479],{},[32,105467,104891],{}," 是标记点。",[32,105470,105471],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[32,105474,1413],{}," 表示显示出来的小球大小。",[32,105477,105478],{},"rgba=\"0 1 0 1\""," 表示绿色。",[58,105481,105482],{"className":60,"code":105281,"language":62,"meta":63,"style":63},[32,105483,105484],{"__ignoreMap":63},[67,105485,105486,105488,105490,105492,105494],{"class":69,"line":70},[67,105487,105288],{"class":73},[67,105489,85],{"class":84},[67,105491,105071],{"class":73},[67,105493,105074],{"class":114},[67,105495,829],{"class":73},[19,105497,105498,105499,105501],{},"这行的作用是：根据名字 ",[32,105500,105074],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105503,105504],{},"拆开看：",[26,105506,105507,105513,105518,105524],{},[29,105508,105509,105512],{},[32,105510,105511],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[29,105514,105515,105517],{},[32,105516,103788],{}," 是被查询的模型。",[29,105519,105520,105523],{},[32,105521,105522],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[29,105525,105526,105528],{},[32,105527,105074],{}," 是 XML 里写的名字。",[58,105530,105531],{"className":60,"code":105305,"language":62,"meta":63,"style":63},[32,105532,105533],{"__ignoreMap":63},[67,105534,105535,105537,105539,105541,105543],{"class":69,"line":70},[67,105536,105312],{"class":73},[67,105538,85],{"class":84},[67,105540,105086],{"class":73},[67,105542,105089],{"class":114},[67,105544,829],{"class":73},[19,105546,105547,105548,230],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[32,105549,105089],{},[58,105551,105553],{"className":60,"code":105552,"language":62,"meta":63,"style":63},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[32,105554,105555,105567],{"__ignoreMap":63},[67,105556,105557,105559,105561,105563,105565],{"class":69,"line":70},[67,105558,1096],{"class":84},[67,105560,105102],{"class":73},[67,105562,259],{"class":84},[67,105564,5913],{"class":77},[67,105566,813],{"class":73},[67,105568,105569,105571,105573,105575,105577],{"class":69,"line":191},[67,105570,1171],{"class":84},[67,105572,917],{"class":77},[67,105574,854],{"class":73},[67,105576,105119],{"class":114},[67,105578,829],{"class":73},[19,105580,105581,105583,105584,105587,105588,105591,105592,105595],{},[32,105582,1096],{}," 是条件判断。",[32,105585,105586],{},"mj_name2id"," 找不到对象时会返回 ",[32,105589,105590],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[32,105593,105594],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[58,105597,105599],{"className":60,"code":105598,"language":62,"meta":63,"style":63},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[32,105600,105601,105617],{"__ignoreMap":63},[67,105602,105603,105605,105607,105609,105611,105613,105615],{"class":69,"line":70},[67,105604,1512],{"class":84},[67,105606,103212],{"class":73},[67,105608,941],{"class":84},[67,105610,944],{"class":77},[67,105612,854],{"class":73},[67,105614,3565],{"class":77},[67,105616,952],{"class":73},[67,105618,105619],{"class":69,"line":191},[67,105620,103404],{"class":73},[19,105622,105623],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[58,105625,105627],{"className":60,"code":105626,"language":62,"meta":63,"style":63},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[32,105628,105629],{"__ignoreMap":63},[67,105630,105631,105633,105635,105637],{"class":69,"line":70},[67,105632,1626],{"class":77},[67,105634,854],{"class":73},[67,105636,105195],{"class":114},[67,105638,105198],{"class":73},[19,105640,105641,105643,105644,105647],{},[32,105642,102815],{}," 保存所有 body 的世界坐标。",[32,105645,105646],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[58,105649,105651],{"className":60,"code":105650,"language":62,"meta":63,"style":63},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[32,105652,105653],{"__ignoreMap":63},[67,105654,105655,105657,105659,105661],{"class":69,"line":70},[67,105656,1626],{"class":77},[67,105658,854],{"class":73},[67,105660,105207],{"class":114},[67,105662,105210],{"class":73},[19,105664,105665,105668,105669,105671],{},[32,105666,105667],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[32,105670,104662],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[58,105673,105675],{"className":60,"code":105674,"language":62,"meta":63,"style":63},"print(\"box qpos:\", np.array(data.qpos))\n",[32,105676,105677],{"__ignoreMap":63},[67,105678,105679,105681,105683,105685],{"class":69,"line":70},[67,105680,1626],{"class":77},[67,105682,854],{"class":73},[67,105684,105219],{"class":114},[67,105686,105222],{"class":73},[19,105688,105689,105690,105693],{},"这里打印广义位置数组。",[32,105691,105692],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105695,1647],{"id":1646},[19,105697,105698,105699,105702,105703,230],{},"程序会输出 ",[32,105700,105701],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[32,105704,1687],{},[19,105706,105707,105709,105710,105713,105714,105717],{},[32,105708,105646],{}," 是 body 的世界坐标位置。",[32,105711,105712],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[32,105715,105716],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105719,233,105720,84289,105722,105724],{},[32,105721,104662],{},[32,105723,105471],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105726,105727],{},"如果你把 site 改成：",[58,105729,105731],{"className":250,"code":105730,"language":252,"meta":63,"style":63},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[32,105732,105733],{"__ignoreMap":63},[67,105734,105735,105737,105739,105741,105743,105746,105748,105750,105753,105755,105757,105759,105761,105763,105765],{"class":69,"line":70},[67,105736,259],{"class":73},[67,105738,104891],{"class":262},[67,105740,266],{"class":110},[67,105742,85],{"class":73},[67,105744,105745],{"class":114},"\"box_top\"",[67,105747,102842],{"class":110},[67,105749,85],{"class":73},[67,105751,105752],{"class":114},"\"0 0 0.15\"",[67,105754,1377],{"class":110},[67,105756,85],{"class":73},[67,105758,1382],{"class":114},[67,105760,80527],{"class":110},[67,105762,85],{"class":73},[67,105764,105461],{"class":114},[67,105766,289],{"class":73},[19,105768,105769,105770,105773],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[32,105771,105772],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105775,1696],{"id":1695},[26,105777,105778,105787,105790,105797,105803,105814],{},[29,105779,1701,105780,105782,105783,1704,105785,230],{},[32,105781,104666],{}," 的初始高度从 ",[32,105784,2209],{},[32,105786,2077],{},[29,105788,105789],{},"重新运行程序。",[29,105791,105792,105793,105796],{},"观察 ",[32,105794,105795],{},"box qpos"," 和最终位置是否变化。",[29,105798,105799,105800,105802],{},"故意把 ",[32,105801,104891],{}," 名称改错，确认程序能报错。",[29,105804,1701,105805,105807,105808,1704,105810,105813],{},[32,105806,1352],{}," 的颜色 ",[32,105809,103735],{},[32,105811,105812],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[29,105815,1701,105816,84289,105818,1704,105821,105824,105825,105827],{},[32,105817,104662],{},[32,105819,105820],{},"pos",[32,105822,105823],{},"0 0 0.2","，观察 ",[32,105826,105772],{}," 如何变化。",[14,105829,1748],{"id":1747},[391,105831,105833],{"id":105832},"xml-error-schema-violation",[32,105834,105835],{},"XML Error: Schema violation",[19,105837,105838],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[391,105840,105842,83050,105844],{"id":105841},"mj_name2id-返回-1",[32,105843,105586],{},[32,105845,105590],{},[19,105847,105848,105849,105852],{},"说明名字没有找到。检查 XML 中 ",[32,105850,105851],{},"name=\"...\"","，并确认对象类型正确。",[391,105854,105855],{"id":105855},"物体不下落",[19,105857,104215],{},[26,105859,105860,105865,105870],{},[29,105861,105862,105863],{},"body 是否有 ",[32,105864,103326],{},[29,105866,105867,105868],{},"gravity 是否为 ",[32,105869,104280],{},[29,105871,105872,105873,105875],{},"body 是否被固定在 ",[32,105874,103545],{}," 中",[391,105877,105878],{"id":105878},"坐标看起来不符合预期",[19,105880,105881],{},"先区分两种坐标：",[399,105883,105884,105893],{},[402,105885,105886],{},[405,105887,105888,105891],{},[408,105889,105890],{"align":410},"坐标",[408,105892,102455],{"align":410},[419,105894,105895,105905],{},[405,105896,105897,105902],{},[424,105898,105899,105900],{"align":410},"XML 里的 ",[32,105901,105820],{},[424,105903,105904],{"align":410},"相对父 body 的局部坐标",[405,105906,105907,105913],{},[424,105908,105909,26770,105911],{"align":410},[32,105910,102815],{},[32,105912,105667],{},[424,105914,105915],{"align":410},"仿真更新后的世界坐标",[19,105917,105918,105919,105921,105922,84298,105925,105927],{},"如果你修改了 ",[32,105920,1642],{},"，但还没调用 ",[32,105923,105924],{},"mj_forward",[32,105926,102948],{},"，世界坐标可能还没有更新。",[14,105929,1889],{"id":1888},[19,105931,105932],{},"MJCF 建模先掌握四件事：",[26,105934,105935,105940,105945,105950],{},[29,105936,105937,105939],{},[32,105938,53565],{}," 表示刚体层级。",[29,105941,105942,105944],{},[32,105943,1352],{}," 表示形状、碰撞和质量。",[29,105946,105947,105949],{},[32,105948,263],{}," 决定 body 能不能动、怎么动。",[29,105951,105952,105954],{},[32,105953,104891],{}," 用来标记关键点，方便 Python 读取位置。",[19,105956,105957],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1903,105959,105960],{},"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":63,"searchDepth":191,"depth":191,"links":105962},[105963,105964,105965,105971,105975,105976,105977,105984],{"id":16,"depth":191,"text":17},{"id":94,"depth":191,"text":95},{"id":243,"depth":191,"text":244,"children":105966},[105967,105968,105969,105970],{"id":104645,"depth":202,"text":104645},{"id":104758,"depth":202,"text":104758},{"id":104784,"depth":202,"text":104785},{"id":104885,"depth":202,"text":104886},{"id":611,"depth":191,"text":612,"children":105972},[105973,105974],{"id":1146,"depth":202,"text":1146},{"id":1246,"depth":202,"text":1246},{"id":1646,"depth":191,"text":1647},{"id":1695,"depth":191,"text":1696},{"id":1747,"depth":191,"text":1748,"children":105978},[105979,105980,105982,105983],{"id":105832,"depth":202,"text":105835},{"id":105841,"depth":202,"text":105981},"mj_name2id 返回 -1",{"id":105855,"depth":202,"text":105855},{"id":105878,"depth":202,"text":105878},{"id":1888,"depth":191,"text":1889},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104343,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105991,"title":105992,"body":105993,"description":63,"extension":1930,"meta":107480,"navigation":630,"path":107481,"seo":107482,"stem":107483,"__hash__":107484},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105994,"toc":107452},[105995,105998,106000,106003,106005,106043,106046,106052,106055,106057,106059,106083,106085,106099,106101,106142,106144,106168,106170,106173,106181,106190,106193,106202,106210,106219,106222,106232,106235,106287,106294,106300,106308,106356,106359,106378,106381,106389,106393,106402,106435,106437,106783,106785,106797,106799,106810,106812,106815,106836,106842,106845,106870,106880,106883,106891,106894,106897,106918,106928,106930,106950,106953,106974,106983,107002,107008,107033,107036,107050,107057,107081,107084,107092,107101,107117,107129,107137,107146,107148,107151,107175,107180,107183,107205,107207,107246,107248,107255,107257,107265,107268,107271,107283,107324,107331,107342,107349,107352,107401,107404,107407,107413,107415,107420,107446,107449],[10,105996,105992],{"id":105997},"_3python-控制接口读取状态与推进仿真",[14,105999,17],{"id":16},[19,106001,106002],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106004,24],{},[26,106006,106007,106012,106017,106021,106026,106037],{},[29,106008,106009],{},[32,106010,106011],{},"MjModel.from_xml_string",[29,106013,106014],{},[32,106015,106016],{},"MjData(model)",[29,106018,106019],{},[32,106020,102948],{},[29,106022,106023],{},[32,106024,106025],{},"mj_resetData",[29,106027,106028,106029,2204,106031,2204,106034],{},"读取 ",[32,106030,1687],{},[32,106032,106033],{},"qvel",[32,106035,106036],{},"ctrl",[29,106038,106039,106040],{},"使用 ",[32,106041,106042],{},"model.opt.timestep",[19,106044,106045],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[58,106047,106050],{"className":106048,"code":106049,"language":603,"meta":63},[601],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[32,106051,106049],{"__ignoreMap":63},[19,106053,106054],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106056,95],{"id":94},[19,106058,98],{},[58,106060,106061],{"className":101,"code":102,"language":103,"meta":63,"style":63},[32,106062,106063],{"__ignoreMap":63},[67,106064,106065,106067,106069,106071,106073,106075,106077,106079,106081],{"class":69,"line":70},[67,106066,111],{"class":110},[67,106068,115],{"class":114},[67,106070,118],{"class":114},[67,106072,121],{"class":77},[67,106074,124],{"class":114},[67,106076,127],{"class":114},[67,106078,130],{"class":114},[67,106080,133],{"class":114},[67,106082,136],{"class":114},[19,106084,139],{},[58,106086,106087],{"className":101,"code":142,"language":103,"meta":63,"style":63},[32,106088,106089],{"__ignoreMap":63},[67,106090,106091,106093,106095,106097],{"class":69,"line":70},[67,106092,149],{"class":110},[67,106094,118],{"class":114},[67,106096,154],{"class":114},[67,106098,157],{"class":114},[19,106100,160],{},[58,106102,106104],{"className":101,"code":106103,"language":103,"meta":63,"style":63},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[32,106105,106106,106123,106132],{"__ignoreMap":63},[67,106107,106108,106110,106112,106114,106117,106119,106121],{"class":69,"line":70},[67,106109,170],{"class":110},[67,106111,173],{"class":114},[67,106113,176],{"class":77},[67,106115,106116],{"class":114}," mujoco-python-api",[67,106118,182],{"class":114},[67,106120,185],{"class":77},[67,106122,188],{"class":77},[67,106124,106125,106127,106129],{"class":69,"line":191},[67,106126,170],{"class":110},[67,106128,196],{"class":114},[67,106130,106131],{"class":114}," mujoco-python-api\n",[67,106133,106134,106136,106138,106140],{"class":69,"line":202},[67,106135,149],{"class":110},[67,106137,118],{"class":114},[67,106139,154],{"class":114},[67,106141,157],{"class":114},[19,106143,213],{},[26,106145,106146,106153,106162],{},[29,106147,106148,1264,106150,106152],{},[32,106149,102430],{},[32,106151,102435],{}," 是官方 Python bindings 的类名。",[29,106154,106155,106156,106159,106160,230],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[32,106157,106158],{},"mjModel"," 在 Python 中是 ",[32,106161,102464],{},[29,106163,106164,106165,230],{},"不要使用 ",[32,106166,106167],{},"sim = mujoco_py.MjSim(...)",[14,106169,244],{"id":243},[19,106171,106172],{},"仿真推进核心代码:",[58,106174,106175],{"className":60,"code":1234,"language":62,"meta":63,"style":63},[32,106176,106177],{"__ignoreMap":63},[67,106178,106179],{"class":69,"line":70},[67,106180,1234],{"class":73},[19,106182,106183,106184,2204,106186,2204,106188,230],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[32,106185,1642],{},[32,106187,102810],{},[32,106189,102805],{},[19,106191,106192],{},"重置仿真:",[58,106194,106196],{"className":60,"code":106195,"language":62,"meta":63,"style":63},"mujoco.mj_resetData(model, data)\n",[32,106197,106198],{"__ignoreMap":63},[67,106199,106200],{"class":69,"line":70},[67,106201,106195],{"class":73},[19,106203,106204,106205,84298,106207,106209],{},"如果手动修改了 ",[32,106206,1642],{},[32,106208,102810],{},"，通常应调用:",[58,106211,106213],{"className":60,"code":106212,"language":62,"meta":63,"style":63},"mujoco.mj_forward(model, data)\n",[32,106214,106215],{"__ignoreMap":63},[67,106216,106217],{"class":69,"line":70},[67,106218,106212],{"class":73},[19,106220,106221],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[391,106223,106225,2204,106227,2204,106229,106231],{"id":106224},"qposqvelctrl-是什么",[32,106226,1687],{},[32,106228,106033],{},[32,106230,106036],{}," 是什么",[19,106233,106234],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[399,106236,106237,106249],{},[402,106238,106239],{},[405,106240,106241,106244,106246],{},[408,106242,106243],{"align":410},"字段",[408,106245,102455],{"align":410},[408,106247,106248],{"align":410},"谁来修改",[419,106250,106251,106263,106275],{},[405,106252,106253,106257,106260],{},[424,106254,106255],{"align":410},[32,106256,1642],{},[424,106258,106259],{"align":410},"广义位置，例如小车位置、关节角、自由物体位置姿态",[424,106261,106262],{"align":410},"MuJoCo 更新，也可以手动设置初始状态",[405,106264,106265,106269,106272],{},[424,106266,106267],{"align":410},[32,106268,102810],{},[424,106270,106271],{"align":410},"广义速度，例如小车速度、关节角速度",[424,106273,106274],{"align":410},"MuJoCo 更新，也可以手动清零",[405,106276,106277,106281,106284],{},[424,106278,106279],{"align":410},[32,106280,45],{},[424,106282,106283],{"align":410},"actuator 的控制输入",[424,106285,106286],{"align":410},"主要由你的控制代码写入",[19,106288,10831,106289,1264,106291,106293],{},[32,106290,1687],{},[32,106292,106033],{}," 不一定同维。自由刚体就是典型例子：",[58,106295,106298],{"className":106296,"code":106297,"language":603,"meta":63},[601],"freejoint: qpos 7 维，qvel 6 维\n",[32,106299,106297],{"__ignoreMap":63},[391,106301,106303,1264,106305,106307],{"id":106302},"mj_step-和-mj_forward-的区别",[32,106304,102948],{},[32,106306,105924],{}," 的区别",[399,106309,106310,106323],{},[402,106311,106312],{},[405,106313,106314,106317,106320],{},[408,106315,106316],{"align":410},"函数",[408,106318,106319],{"align":410},"是否推进时间",[408,106321,106322],{"align":410},"什么时候用",[419,106324,106325,106338],{},[405,106326,106327,106332,106335],{},[424,106328,106329],{"align":410},[32,106330,106331],{},"mj_step(model, data)",[424,106333,106334],{"align":410},"是",[424,106336,106337],{"align":410},"正常仿真循环，每调用一次前进一步",[405,106339,106340,106345,106348],{},[424,106341,106342],{"align":410},[32,106343,106344],{},"mj_forward(model, data)",[424,106346,106347],{"align":410},"否",[424,106349,106350,106351,2204,106353,106355],{"align":410},"手动改了 ",[32,106352,1687],{},[32,106354,106033],{}," 后，刷新派生量",[19,106357,106358],{},"例如你写：",[58,106360,106362],{"className":60,"code":106361,"language":62,"meta":63,"style":63},"data.qpos[2] = 2.0\n",[32,106363,106364],{"__ignoreMap":63},[67,106365,106366,106369,106371,106373,106375],{"class":69,"line":70},[67,106367,106368],{"class":73},"data.qpos[",[67,106370,2077],{"class":77},[67,106372,81],{"class":73},[67,106374,85],{"class":84},[67,106376,106377],{"class":77}," 2.0\n",[19,106379,106380],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[58,106382,106383],{"className":60,"code":106212,"language":62,"meta":63,"style":63},[32,106384,106385],{"__ignoreMap":63},[67,106386,106387],{"class":69,"line":70},[67,106388,106212],{"class":73},[391,106390,106392],{"id":106391},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106394,106395,106398,106399,106401],{},[32,106396,106397],{},"mujoco.mj_resetData(model, data)"," 会把 ",[32,106400,35170],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[58,106403,106405],{"className":60,"code":106404,"language":62,"meta":63,"style":63},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[32,106406,106407,106411,106421,106431],{"__ignoreMap":63},[67,106408,106409],{"class":69,"line":70},[67,106410,106195],{"class":73},[67,106412,106413,106416,106418],{"class":69,"line":191},[67,106414,106415],{"class":73},"data.qpos[:] ",[67,106417,85],{"class":84},[67,106419,106420],{"class":73}," random_qpos\n",[67,106422,106423,106426,106428],{"class":69,"line":202},[67,106424,106425],{"class":73},"data.qvel[:] ",[67,106427,85],{"class":84},[67,106429,106430],{"class":77}," 0.0\n",[67,106432,106433],{"class":69,"line":641},[67,106434,106212],{"class":73},[14,106436,612],{"id":611},[58,106438,106440],{"className":60,"code":106439,"language":62,"meta":63,"style":63},"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",[32,106441,106442,106448,106458,106462,106466,106474,106479,106483,106487,106491,106496,106500,106505,106510,106515,106519,106523,106527,106531,106535,106539,106558,106565,106577,106588,106603,106618,106622,106626,106638,106650,106658,106662,106673,106677,106693,106697,106701,106710,106714,106719,106728,106732,106745,106750,106759,106763,106767,106779],{"__ignoreMap":63},[67,106443,106444,106446],{"class":69,"line":70},[67,106445,622],{"class":84},[67,106447,638],{"class":73},[67,106449,106450,106452,106454,106456],{"class":69,"line":191},[67,106451,622],{"class":84},[67,106453,646],{"class":73},[67,106455,649],{"class":84},[67,106457,652],{"class":73},[67,106459,106460],{"class":69,"line":202},[67,106461,631],{"emptyLinePlaceholder":630},[67,106463,106464],{"class":69,"line":641},[67,106465,631],{"emptyLinePlaceholder":630},[67,106467,106468,106470,106472],{"class":69,"line":655},[67,106469,668],{"class":77},[67,106471,671],{"class":84},[67,106473,674],{"class":114},[67,106475,106476],{"class":69,"line":660},[67,106477,106478],{"class":114},"\u003Cmujoco model=\"state_api\">\n",[67,106480,106481],{"class":69,"line":665},[67,106482,103056],{"class":114},[67,106484,106485],{"class":69,"line":677},[67,106486,631],{"emptyLinePlaceholder":630},[67,106488,106489],{"class":69,"line":683},[67,106490,697],{"class":114},[67,106492,106493],{"class":69,"line":689},[67,106494,106495],{"class":114},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[67,106497,106498],{"class":69,"line":694},[67,106499,631],{"emptyLinePlaceholder":630},[67,106501,106502],{"class":69,"line":700},[67,106503,106504],{"class":114},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[67,106506,106507],{"class":69,"line":706},[67,106508,106509],{"class":114},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[67,106511,106512],{"class":69,"line":712},[67,106513,106514],{"class":114},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[67,106516,106517],{"class":69,"line":717},[67,106518,744],{"class":114},[67,106520,106521],{"class":69,"line":723},[67,106522,750],{"class":114},[67,106524,106525],{"class":69,"line":729},[67,106526,779],{"class":114},[67,106528,106529],{"class":69,"line":735},[67,106530,785],{"class":114},[67,106532,106533],{"class":69,"line":741},[67,106534,631],{"emptyLinePlaceholder":630},[67,106536,106537],{"class":69,"line":747},[67,106538,631],{"emptyLinePlaceholder":630},[67,106540,106541,106543,106546,106549,106551,106554,106556],{"class":69,"line":753},[67,106542,801],{"class":84},[67,106544,106545],{"class":110}," print_state",[67,106547,106548],{"class":73},"(prefix: ",[67,106550,3157],{"class":77},[67,106552,106553],{"class":73},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[67,106555,810],{"class":77},[67,106557,813],{"class":73},[67,106559,106560,106562],{"class":69,"line":758},[67,106561,851],{"class":77},[67,106563,106564],{"class":73},"(prefix)\n",[67,106566,106567,106569,106571,106574],{"class":69,"line":764},[67,106568,851],{"class":77},[67,106570,854],{"class":73},[67,106572,106573],{"class":114},"\"  timestep:\"",[67,106575,106576],{"class":73},", model.opt.timestep)\n",[67,106578,106579,106581,106583,106586],{"class":69,"line":770},[67,106580,851],{"class":77},[67,106582,854],{"class":73},[67,106584,106585],{"class":114},"\"  time:\"",[67,106587,1031],{"class":73},[67,106589,106590,106592,106594,106597,106599,106601],{"class":69,"line":776},[67,106591,851],{"class":77},[67,106593,854],{"class":73},[67,106595,106596],{"class":114},"\"  qpos:\"",[67,106598,1044],{"class":73},[67,106600,1047],{"class":77},[67,106602,1050],{"class":73},[67,106604,106605,106607,106609,106612,106614,106616],{"class":69,"line":782},[67,106606,851],{"class":77},[67,106608,854],{"class":73},[67,106610,106611],{"class":114},"\"  qvel:\"",[67,106613,1063],{"class":73},[67,106615,1047],{"class":77},[67,106617,1050],{"class":73},[67,106619,106620],{"class":69,"line":788},[67,106621,631],{"emptyLinePlaceholder":630},[67,106623,106624],{"class":69,"line":793},[67,106625,631],{"emptyLinePlaceholder":630},[67,106627,106628,106630,106632,106634,106636],{"class":69,"line":798},[67,106629,801],{"class":84},[67,106631,804],{"class":110},[67,106633,807],{"class":73},[67,106635,810],{"class":77},[67,106637,813],{"class":73},[67,106639,106640,106642,106644,106646,106648],{"class":69,"line":816},[67,106641,819],{"class":73},[67,106643,85],{"class":84},[67,106645,824],{"class":73},[67,106647,668],{"class":77},[67,106649,829],{"class":73},[67,106651,106652,106654,106656],{"class":69,"line":832},[67,106653,835],{"class":73},[67,106655,85],{"class":84},[67,106657,840],{"class":73},[67,106659,106660],{"class":69,"line":843},[67,106661,631],{"emptyLinePlaceholder":630},[67,106663,106664,106667,106670],{"class":69,"line":848},[67,106665,106666],{"class":73},"    print_state(",[67,106668,106669],{"class":114},"\"initial\"",[67,106671,106672],{"class":73},", model, data)\n",[67,106674,106675],{"class":69,"line":863},[67,106676,631],{"emptyLinePlaceholder":630},[67,106678,106679,106681,106683,106685,106687,106689,106691],{"class":69,"line":876},[67,106680,935],{"class":84},[67,106682,103212],{"class":73},[67,106684,941],{"class":84},[67,106686,944],{"class":77},[67,106688,854],{"class":73},[67,106690,2645],{"class":77},[67,106692,952],{"class":73},[67,106694,106695],{"class":69,"line":889},[67,106696,1013],{"class":73},[67,106698,106699],{"class":69,"line":894},[67,106700,631],{"emptyLinePlaceholder":630},[67,106702,106703,106705,106708],{"class":69,"line":911},[67,106704,106666],{"class":73},[67,106706,106707],{"class":114},"\"after 50 steps\"",[67,106709,106672],{"class":73},[67,106711,106712],{"class":69,"line":927},[67,106713,631],{"emptyLinePlaceholder":630},[67,106715,106716],{"class":69,"line":932},[67,106717,106718],{"class":73},"    mujoco.mj_resetData(model, data)\n",[67,106720,106721,106723,106726],{"class":69,"line":955},[67,106722,106666],{"class":73},[67,106724,106725],{"class":114},"\"after reset\"",[67,106727,106672],{"class":73},[67,106729,106730],{"class":69,"line":971},[67,106731,631],{"emptyLinePlaceholder":630},[67,106733,106734,106737,106739,106741,106743],{"class":69,"line":1010},[67,106735,106736],{"class":73},"    data.qpos[",[67,106738,2077],{"class":77},[67,106740,81],{"class":73},[67,106742,85],{"class":84},[67,106744,106377],{"class":77},[67,106746,106747],{"class":69,"line":1016},[67,106748,106749],{"class":73},"    mujoco.mj_forward(model, data)\n",[67,106751,106752,106754,106757],{"class":69,"line":1021},[67,106753,106666],{"class":73},[67,106755,106756],{"class":114},"\"after manual qpos edit\"",[67,106758,106672],{"class":73},[67,106760,106761],{"class":69,"line":1034},[67,106762,631],{"emptyLinePlaceholder":630},[67,106764,106765],{"class":69,"line":1053},[67,106766,631],{"emptyLinePlaceholder":630},[67,106768,106769,106771,106773,106775,106777],{"class":69,"line":1070},[67,106770,1096],{"class":84},[67,106772,1099],{"class":77},[67,106774,1102],{"class":84},[67,106776,1105],{"class":114},[67,106778,813],{"class":73},[67,106780,106781],{"class":69,"line":1083},[67,106782,1113],{"class":73},[19,106784,1116],{},[58,106786,106788],{"className":101,"code":106787,"language":103,"meta":63,"style":63},"touch ch3_python_state.py\n",[32,106789,106790],{"__ignoreMap":63},[67,106791,106792,106794],{"class":69,"line":70},[67,106793,1126],{"class":110},[67,106795,106796],{"class":114}," ch3_python_state.py\n",[19,106798,1132],{},[58,106800,106802],{"className":101,"code":106801,"language":103,"meta":63,"style":63},"python ch3_python_state.py\n",[32,106803,106804],{"__ignoreMap":63},[67,106805,106806,106808],{"class":69,"line":70},[67,106807,62],{"class":110},[67,106809,106796],{"class":114},[391,106811,1146],{"id":1146},[19,106813,106814],{},"打印状态的函数：",[58,106816,106818],{"className":60,"code":106817,"language":62,"meta":63,"style":63},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[32,106819,106820],{"__ignoreMap":63},[67,106821,106822,106824,106826,106828,106830,106832,106834],{"class":69,"line":70},[67,106823,801],{"class":84},[67,106825,106545],{"class":110},[67,106827,106548],{"class":73},[67,106829,3157],{"class":77},[67,106831,106553],{"class":73},[67,106833,810],{"class":77},[67,106835,813],{"class":73},[19,106837,106838,106839,106841],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[32,106840,35170],{}," 里发生了什么。",[19,106843,106844],{},"推进 50 步：",[58,106846,106848],{"className":60,"code":106847,"language":62,"meta":63,"style":63},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[32,106849,106850,106866],{"__ignoreMap":63},[67,106851,106852,106854,106856,106858,106860,106862,106864],{"class":69,"line":70},[67,106853,1512],{"class":84},[67,106855,103212],{"class":73},[67,106857,941],{"class":84},[67,106859,944],{"class":77},[67,106861,854],{"class":73},[67,106863,2645],{"class":77},[67,106865,952],{"class":73},[67,106867,106868],{"class":69,"line":191},[67,106869,103404],{"class":73},[19,106871,106872,106873,106876,106877,106879],{},"由于 ",[32,106874,106875],{},"timestep=0.01","，所以 50 步后时间约为 ",[32,106878,1691],{}," 秒。",[19,106881,106882],{},"重置：",[58,106884,106885],{"className":60,"code":106195,"language":62,"meta":63,"style":63},[32,106886,106887],{"__ignoreMap":63},[67,106888,106889],{"class":69,"line":70},[67,106890,106195],{"class":73},[19,106892,106893],{},"这会把时间、位置、速度恢复到初始状态。",[19,106895,106896],{},"手动改高度：",[58,106898,106900],{"className":60,"code":106899,"language":62,"meta":63,"style":63},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[32,106901,106902,106914],{"__ignoreMap":63},[67,106903,106904,106906,106908,106910,106912],{"class":69,"line":70},[67,106905,106368],{"class":73},[67,106907,2077],{"class":77},[67,106909,81],{"class":73},[67,106911,85],{"class":84},[67,106913,106377],{"class":77},[67,106915,106916],{"class":69,"line":191},[67,106917,106212],{"class":73},[19,106919,106920,106921,106924,106925,106927],{},"这个例子里 ",[32,106922,106923],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[32,106926,992],{}," 表示把小球放到更高的位置。",[391,106929,1246],{"id":1246},[58,106931,106932],{"className":60,"code":106817,"language":62,"meta":63,"style":63},[32,106933,106934],{"__ignoreMap":63},[67,106935,106936,106938,106940,106942,106944,106946,106948],{"class":69,"line":70},[67,106937,801],{"class":84},[67,106939,106545],{"class":110},[67,106941,106548],{"class":73},[67,106943,3157],{"class":77},[67,106945,106553],{"class":73},[67,106947,810],{"class":77},[67,106949,813],{"class":73},[19,106951,106952],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[26,106954,106955,106964,106969],{},[29,106956,106957,106960,106961,106963],{},[32,106958,106959],{},"prefix","：一段文字，比如 ",[32,106962,106669],{},"，用来说明现在打印的是哪个阶段。",[29,106965,106966,106968],{},[32,106967,103788],{},"：MuJoCo 模型。",[29,106970,106971,106973],{},[32,106972,35170],{},"：MuJoCo 当前状态。",[19,106975,106976,2204,106979,106982],{},[32,106977,106978],{},"prefix: str",[32,106980,106981],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[58,106984,106986],{"className":60,"code":106985,"language":62,"meta":63,"style":63},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[32,106987,106988],{"__ignoreMap":63},[67,106989,106990,106992,106994,106996,106998,107000],{"class":69,"line":70},[67,106991,1626],{"class":77},[67,106993,854],{"class":73},[67,106995,106596],{"class":114},[67,106997,1044],{"class":73},[67,106999,1047],{"class":77},[67,107001,1050],{"class":73},[19,107003,107004,107007],{},[32,107005,107006],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[58,107009,107011],{"className":60,"code":107010,"language":62,"meta":63,"style":63},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[32,107012,107013,107025],{"__ignoreMap":63},[67,107014,107015,107017,107019,107021,107023],{"class":69,"line":70},[67,107016,103340],{"class":73},[67,107018,85],{"class":84},[67,107020,824],{"class":73},[67,107022,668],{"class":77},[67,107024,829],{"class":73},[67,107026,107027,107029,107031],{"class":69,"line":191},[67,107028,103364],{"class":73},[67,107030,85],{"class":84},[67,107032,840],{"class":73},[19,107034,107035],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[58,107037,107039],{"className":60,"code":107038,"language":62,"meta":63,"style":63},"print_state(\"initial\", model, data)\n",[32,107040,107041],{"__ignoreMap":63},[67,107042,107043,107046,107048],{"class":69,"line":70},[67,107044,107045],{"class":73},"print_state(",[67,107047,106669],{"class":114},[67,107049,106672],{"class":73},[19,107051,107052,107053,107056],{},"调用刚才定义的 ",[32,107054,107055],{},"print_state"," 函数，打印初始状态。",[58,107058,107059],{"className":60,"code":106847,"language":62,"meta":63,"style":63},[32,107060,107061,107077],{"__ignoreMap":63},[67,107062,107063,107065,107067,107069,107071,107073,107075],{"class":69,"line":70},[67,107064,1512],{"class":84},[67,107066,103212],{"class":73},[67,107068,941],{"class":84},[67,107070,944],{"class":77},[67,107072,854],{"class":73},[67,107074,2645],{"class":77},[67,107076,952],{"class":73},[67,107078,107079],{"class":69,"line":191},[67,107080,103404],{"class":73},[19,107082,107083],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[58,107085,107086],{"className":60,"code":106195,"language":62,"meta":63,"style":63},[32,107087,107088],{"__ignoreMap":63},[67,107089,107090],{"class":69,"line":70},[67,107091,106195],{"class":73},[19,107093,107094,107095,107097,107098,107100],{},"重置 ",[32,107096,35170],{},"。注意它不会重新创建 ",[32,107099,103788],{},"，因为模型结构没有变，只是状态回到初始值。",[58,107102,107103],{"className":60,"code":106361,"language":62,"meta":63,"style":63},[32,107104,107105],{"__ignoreMap":63},[67,107106,107107,107109,107111,107113,107115],{"class":69,"line":70},[67,107108,106368],{"class":73},[67,107110,2077],{"class":77},[67,107112,81],{"class":73},[67,107114,85],{"class":84},[67,107116,106377],{"class":77},[19,107118,107119,107120,2204,107123,2204,107126,107128],{},"这行是“手动改状态”。在 freejoint 中，",[32,107121,107122],{},"qpos[0]",[32,107124,107125],{},"qpos[1]",[32,107127,106923],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[58,107130,107131],{"className":60,"code":106212,"language":62,"meta":63,"style":63},[32,107132,107133],{"__ignoreMap":63},[67,107134,107135],{"class":69,"line":70},[67,107136,106212],{"class":73},[19,107138,107139,107140,107142,107143,107145],{},"手动改完 ",[32,107141,1687],{}," 后，调用 ",[32,107144,105924],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107147,1647],{"id":1646},[19,107149,107150],{},"你会看到:",[26,107152,107153,107158,107163,107166],{},[29,107154,107155,107156],{},"初始时间为 ",[32,107157,78],{},[29,107159,107160,107161],{},"50 步后时间约为 ",[32,107162,1691],{},[29,107164,107165],{},"reset 后状态恢复",[29,107167,107168,107169,107172,107173],{},"手动修改 ",[32,107170,107171],{},"data.qpos[2]"," 后，小球高度变为 ",[32,107174,992],{},[19,107176,107177,107179],{},[32,107178,106923],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107181,107182],{},"输出里可以重点看三件事：",[26,107184,107185,107193,107198],{},[29,107186,107187,107189,107190,107192],{},[32,107188,4220],{}," 是否随着 ",[32,107191,102948],{}," 增加。",[29,107194,107195,107197],{},[32,107196,1687],{}," 的 z 坐标是否因为下落而变化。",[29,107199,107200,107202,107203,230],{},[32,107201,106025],{}," 后时间是否回到 ",[32,107204,78],{},[14,107206,1696],{"id":1695},[26,107208,107209,107215,107221,107227,107230,107239],{},[29,107210,107211,107212,230],{},"修改 timestep 为 ",[32,107213,107214],{},"0.005",[29,107216,107217,107218,230],{},"重新运行，检查 50 步后时间是否约为 ",[32,107219,107220],{},"0.25",[29,107222,107223,107224,230],{},"修改重力为 ",[32,107225,107226],{},"0 0 -1.0",[29,107228,107229],{},"观察小球下降速度是否变慢。",[29,107231,1701,107232,1704,107235,107238],{},[32,107233,107234],{},"data.qpos[2] = 2.0",[32,107236,107237],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[29,107240,107241,107242,107245],{},"注释掉 ",[32,107243,107244],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107247,1748],{"id":1747},[391,107249,107251,107252,107254],{"id":107250},"修改-dataqpos-后位置没有更新","修改 ",[32,107253,1642],{}," 后位置没有更新",[19,107256,104155],{},[58,107258,107259],{"className":60,"code":106212,"language":62,"meta":63,"style":63},[32,107260,107261],{"__ignoreMap":63},[67,107262,107263],{"class":69,"line":70},[67,107264,106212],{"class":73},[391,107266,107267],{"id":107267},"数组维度看不懂",[19,107269,107270],{},"打印模型维度:",[58,107272,107274],{"className":60,"code":107273,"language":62,"meta":63,"style":63},"print(model.nq, model.nv, model.nu)\n",[32,107275,107276],{"__ignoreMap":63},[67,107277,107278,107280],{"class":69,"line":70},[67,107279,1626],{"class":77},[67,107281,107282],{"class":73},"(model.nq, model.nv, model.nu)\n",[399,107284,107285,107293],{},[402,107286,107287],{},[405,107288,107289,107291],{},[408,107290,106243],{"align":410},[408,107292,102455],{"align":410},[419,107294,107295,107305,107315],{},[405,107296,107297,107302],{},[424,107298,107299],{"align":410},[32,107300,107301],{},"nq",[424,107303,107304],{"align":410},"位置变量数量",[405,107306,107307,107312],{},[424,107308,107309],{"align":410},[32,107310,107311],{},"nv",[424,107313,107314],{"align":410},"速度变量数量",[405,107316,107317,107321],{},[424,107318,107319],{"align":410},[32,107320,103864],{},[424,107322,107323],{"align":410},"控制输入数量",[391,107325,107327,107328,107330],{"id":107326},"误以为-qpos-一定等于关节数","误以为 ",[32,107329,1687],{}," 一定等于关节数",[19,107332,107333,107334,84289,107336,107338,107339,107341],{},"不是。例如 ",[32,107335,103326],{},[32,107337,1687],{}," 是 7 维，但 ",[32,107340,106033],{}," 是 6 维。",[391,107343,107345,107346,107348],{"id":107344},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[32,107347,1687],{}," 的第几位",[19,107350,107351],{},"初学时可以先打印：",[58,107353,107355],{"className":60,"code":107354,"language":62,"meta":63,"style":63},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[32,107356,107357,107367,107377,107389],{"__ignoreMap":63},[67,107358,107359,107361,107363,107365],{"class":69,"line":70},[67,107360,1626],{"class":77},[67,107362,854],{"class":73},[67,107364,857],{"class":114},[67,107366,860],{"class":73},[67,107368,107369,107371,107373,107375],{"class":69,"line":191},[67,107370,1626],{"class":77},[67,107372,854],{"class":73},[67,107374,870],{"class":114},[67,107376,873],{"class":73},[67,107378,107379,107381,107383,107386],{"class":69,"line":202},[67,107380,1626],{"class":77},[67,107382,854],{"class":73},[67,107384,107385],{"class":114},"\"qpos:\"",[67,107387,107388],{"class":73},", data.qpos)\n",[67,107390,107391,107393,107395,107398],{"class":69,"line":641},[67,107392,1626],{"class":77},[67,107394,854],{"class":73},[67,107396,107397],{"class":114},"\"qvel:\"",[67,107399,107400],{"class":73},", data.qvel)\n",[19,107402,107403],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[391,107405,107406],{"id":107406},"仿真结果每次都一样",[19,107408,107409,107410,107412],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[32,107411,1687],{},"、目标点或控制输入。",[14,107414,1889],{"id":1888},[19,107416,107417,107418,26410],{},"Python 控制 MuJoCo 的核心就是读写 ",[32,107419,35170],{},[26,107421,107422,107430,107435,107440],{},[29,107423,107424,107425,1264,107427,107429],{},"用 ",[32,107426,1642],{},[32,107428,102810],{}," 读取状态。",[29,107431,107424,107432,107434],{},[32,107433,45],{}," 写入控制。",[29,107436,107424,107437,107439],{},[32,107438,102948],{}," 推进时间。",[29,107441,107442,107443,107445],{},"手动改状态后用 ",[32,107444,105924],{}," 刷新派生量。",[19,107447,107448],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1903,107450,107451],{},"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":63,"searchDepth":191,"depth":191,"links":107453},[107454,107455,107456,107463,107467,107468,107469,107479],{"id":16,"depth":191,"text":17},{"id":94,"depth":191,"text":95},{"id":243,"depth":191,"text":244,"children":107457},[107458,107460,107462],{"id":106224,"depth":202,"text":107459},"qpos、qvel、ctrl 是什么",{"id":106302,"depth":202,"text":107461},"mj_step 和 mj_forward 的区别",{"id":106391,"depth":202,"text":106392},{"id":611,"depth":191,"text":612,"children":107464},[107465,107466],{"id":1146,"depth":202,"text":1146},{"id":1246,"depth":202,"text":1246},{"id":1646,"depth":191,"text":1647},{"id":1695,"depth":191,"text":1696},{"id":1747,"depth":191,"text":1748,"children":107470},[107471,107473,107474,107476,107478],{"id":107250,"depth":202,"text":107472},"修改 data.qpos 后位置没有更新",{"id":107267,"depth":202,"text":107267},{"id":107326,"depth":202,"text":107475},"误以为 qpos 一定等于关节数",{"id":107344,"depth":202,"text":107477},"不知道某个元素在 qpos 的第几位",{"id":107406,"depth":202,"text":107406},{"id":1888,"depth":191,"text":1889},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105992,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":4,"title":5,"body":107486,"description":63,"extension":1930,"meta":108953,"navigation":630,"path":1932,"seo":108954,"stem":1934,"__hash__":1935},{"type":7,"value":107487,"toc":108930},[107488,107490,107492,107494,107496,107516,107518,107534,107536,107538,107540,107564,107566,107580,107582,107620,107622,107640,107642,107644,107674,107676,107686,107688,107746,107752,107754,107756,107786,107790,107792,107794,107830,107832,107846,107848,107890,107892,107912,107914,107919,107921,107923,108289,108291,108301,108303,108313,108315,108317,108345,108351,108353,108387,108389,108391,108399,108401,108403,108413,108419,108439,108441,108477,108485,108527,108539,108581,108589,108617,108621,108641,108647,108663,108665,108699,108701,108715,108717,108735,108739,108741,108743,108748,108752,108758,108760,108765,108771,108773,108809,108811,108815,108819,108821,108823,108839,108841,108845,108849,108851,108869,108871,108873,108881,108883,108917,108919,108921,108926,108928],[10,107489,5],{"id":12},[14,107491,17],{"id":16},[19,107493,21],{},[19,107495,24],{},[26,107497,107498,107502,107506,107510,107514],{},[29,107499,107500,35],{},[32,107501,34],{},[29,107503,107504],{},[32,107505,40],{},[29,107507,107508],{},[32,107509,45],{},[29,107511,107512],{},[32,107513,50],{},[29,107515,53],{},[19,107517,56],{},[58,107519,107520],{"className":60,"code":61,"language":62,"meta":63,"style":63},[32,107521,107522],{"__ignoreMap":63},[67,107523,107524,107526,107528,107530,107532],{"class":69,"line":70},[67,107525,74],{"class":73},[67,107527,78],{"class":77},[67,107529,81],{"class":73},[67,107531,85],{"class":84},[67,107533,88],{"class":77},[19,107535,91],{},[14,107537,95],{"id":94},[19,107539,98],{},[58,107541,107542],{"className":101,"code":102,"language":103,"meta":63,"style":63},[32,107543,107544],{"__ignoreMap":63},[67,107545,107546,107548,107550,107552,107554,107556,107558,107560,107562],{"class":69,"line":70},[67,107547,111],{"class":110},[67,107549,115],{"class":114},[67,107551,118],{"class":114},[67,107553,121],{"class":77},[67,107555,124],{"class":114},[67,107557,127],{"class":114},[67,107559,130],{"class":114},[67,107561,133],{"class":114},[67,107563,136],{"class":114},[19,107565,139],{},[58,107567,107568],{"className":101,"code":142,"language":103,"meta":63,"style":63},[32,107569,107570],{"__ignoreMap":63},[67,107571,107572,107574,107576,107578],{"class":69,"line":70},[67,107573,149],{"class":110},[67,107575,118],{"class":114},[67,107577,154],{"class":114},[67,107579,157],{"class":114},[19,107581,160],{},[58,107583,107584],{"className":101,"code":163,"language":103,"meta":63,"style":63},[32,107585,107586,107602,107610],{"__ignoreMap":63},[67,107587,107588,107590,107592,107594,107596,107598,107600],{"class":69,"line":70},[67,107589,170],{"class":110},[67,107591,173],{"class":114},[67,107593,176],{"class":77},[67,107595,179],{"class":114},[67,107597,182],{"class":114},[67,107599,185],{"class":77},[67,107601,188],{"class":77},[67,107603,107604,107606,107608],{"class":69,"line":191},[67,107605,170],{"class":110},[67,107607,196],{"class":114},[67,107609,199],{"class":114},[67,107611,107612,107614,107616,107618],{"class":69,"line":202},[67,107613,149],{"class":110},[67,107615,118],{"class":114},[67,107617,154],{"class":114},[67,107619,157],{"class":114},[19,107621,213],{},[26,107623,107624,107628,107634,107638],{},[29,107625,107626,221],{},[32,107627,220],{},[29,107629,107630,226,107632,230],{},[32,107631,45],{},[32,107633,229],{},[29,107635,233,107636,237],{},[32,107637,236],{},[29,107639,240],{},[14,107641,244],{"id":243},[19,107643,247],{},[58,107645,107646],{"className":250,"code":251,"language":252,"meta":63,"style":63},[32,107647,107648],{"__ignoreMap":63},[67,107649,107650,107652,107654,107656,107658,107660,107662,107664,107666,107668,107670,107672],{"class":69,"line":70},[67,107651,259],{"class":73},[67,107653,263],{"class":262},[67,107655,266],{"class":110},[67,107657,85],{"class":73},[67,107659,271],{"class":114},[67,107661,274],{"class":110},[67,107663,85],{"class":73},[67,107665,271],{"class":114},[67,107667,281],{"class":110},[67,107669,85],{"class":73},[67,107671,286],{"class":114},[67,107673,289],{"class":73},[19,107675,292],{},[26,107677,107678,107682,107684],{},[29,107679,297,107680],{},[32,107681,34],{},[29,107683,302],{},[29,107685,305],{},[19,107687,308],{},[58,107689,107690],{"className":250,"code":311,"language":252,"meta":63,"style":63},[32,107691,107692,107700,107738],{"__ignoreMap":63},[67,107693,107694,107696,107698],{"class":69,"line":70},[67,107695,259],{"class":73},[67,107697,320],{"class":262},[67,107699,323],{"class":73},[67,107701,107702,107704,107706,107708,107710,107712,107714,107716,107718,107720,107722,107724,107726,107728,107730,107732,107734,107736],{"class":69,"line":191},[67,107703,328],{"class":73},[67,107705,331],{"class":262},[67,107707,266],{"class":110},[67,107709,85],{"class":73},[67,107711,338],{"class":114},[67,107713,341],{"class":110},[67,107715,85],{"class":73},[67,107717,271],{"class":114},[67,107719,348],{"class":110},[67,107721,85],{"class":73},[67,107723,353],{"class":114},[67,107725,356],{"class":110},[67,107727,85],{"class":73},[67,107729,361],{"class":114},[67,107731,364],{"class":110},[67,107733,85],{"class":73},[67,107735,369],{"class":114},[67,107737,289],{"class":73},[67,107739,107740,107742,107744],{"class":69,"line":202},[67,107741,376],{"class":73},[67,107743,320],{"class":262},[67,107745,323],{"class":73},[19,107747,107748,386,107750,230],{},[32,107749,385],{},[32,107751,389],{},[391,107753,394],{"id":393},[19,107755,397],{},[399,107757,107758,107768],{},[402,107759,107760],{},[405,107761,107762,107764,107766],{},[408,107763,411],{"align":410},[408,107765,414],{"align":410},[408,107767,417],{"align":410},[419,107769,107770,107778],{},[405,107771,107772,107774,107776],{},[424,107773,263],{"align":410},[424,107775,428],{"align":410},[424,107777,431],{"align":410},[405,107779,107780,107782,107784],{},[424,107781,320],{"align":410},[424,107783,438],{"align":410},[424,107785,441],{"align":410},[19,107787,444,107788,447],{},[32,107789,45],{},[19,107791,450],{},[391,107793,454],{"id":453},[58,107795,107796],{"className":250,"code":457,"language":252,"meta":63,"style":63},[32,107797,107798],{"__ignoreMap":63},[67,107799,107800,107802,107804,107806,107808,107810,107812,107814,107816,107818,107820,107822,107824,107826,107828],{"class":69,"line":70},[67,107801,259],{"class":73},[67,107803,263],{"class":262},[67,107805,266],{"class":110},[67,107807,85],{"class":73},[67,107809,271],{"class":114},[67,107811,274],{"class":110},[67,107813,85],{"class":73},[67,107815,271],{"class":114},[67,107817,281],{"class":110},[67,107819,85],{"class":73},[67,107821,286],{"class":114},[67,107823,486],{"class":110},[67,107825,85],{"class":73},[67,107827,491],{"class":114},[67,107829,289],{"class":73},[19,107831,496],{},[26,107833,107834,107838,107842],{},[29,107835,107836,504],{},[32,107837,503],{},[29,107839,107840,510],{},[32,107841,509],{},[29,107843,107844,516],{},[32,107845,515],{},[391,107847,520],{"id":519},[58,107849,107850],{"className":250,"code":523,"language":252,"meta":63,"style":63},[32,107851,107852],{"__ignoreMap":63},[67,107853,107854,107856,107858,107860,107862,107864,107866,107868,107870,107872,107874,107876,107878,107880,107882,107884,107886,107888],{"class":69,"line":70},[67,107855,259],{"class":73},[67,107857,331],{"class":262},[67,107859,266],{"class":110},[67,107861,85],{"class":73},[67,107863,338],{"class":114},[67,107865,341],{"class":110},[67,107867,85],{"class":73},[67,107869,271],{"class":114},[67,107871,348],{"class":110},[67,107873,85],{"class":73},[67,107875,353],{"class":114},[67,107877,356],{"class":110},[67,107879,85],{"class":73},[67,107881,361],{"class":114},[67,107883,364],{"class":110},[67,107885,85],{"class":73},[67,107887,369],{"class":114},[67,107889,289],{"class":73},[19,107891,496],{},[26,107893,107894,107900,107904,107908],{},[29,107895,107896,573,107898,576],{},[32,107897,572],{},[32,107899,34],{},[29,107901,107902,582],{},[32,107903,581],{},[29,107905,107906,588],{},[32,107907,587],{},[29,107909,107910,594],{},[32,107911,593],{},[19,107913,597],{},[58,107915,107917],{"className":107916,"code":602,"language":603,"meta":63},[601],[32,107918,602],{"__ignoreMap":63},[19,107920,608],{},[14,107922,612],{"id":611},[58,107924,107925],{"className":60,"code":615,"language":62,"meta":63,"style":63},[32,107926,107927,107933,107937,107943,107953,107957,107961,107969,107973,107977,107981,107985,107989,107993,107997,108001,108005,108009,108013,108017,108021,108025,108029,108033,108037,108041,108045,108049,108053,108065,108077,108085,108089,108099,108109,108119,108123,108135,108147,108151,108167,108179,108209,108213,108217,108227,108241,108255,108265,108269,108273,108285],{"__ignoreMap":63},[67,107928,107929,107931],{"class":69,"line":70},[67,107930,622],{"class":84},[67,107932,625],{"class":73},[67,107934,107935],{"class":69,"line":191},[67,107936,631],{"emptyLinePlaceholder":630},[67,107938,107939,107941],{"class":69,"line":202},[67,107940,622],{"class":84},[67,107942,638],{"class":73},[67,107944,107945,107947,107949,107951],{"class":69,"line":641},[67,107946,622],{"class":84},[67,107948,646],{"class":73},[67,107950,649],{"class":84},[67,107952,652],{"class":73},[67,107954,107955],{"class":69,"line":655},[67,107956,631],{"emptyLinePlaceholder":630},[67,107958,107959],{"class":69,"line":660},[67,107960,631],{"emptyLinePlaceholder":630},[67,107962,107963,107965,107967],{"class":69,"line":665},[67,107964,668],{"class":77},[67,107966,671],{"class":84},[67,107968,674],{"class":114},[67,107970,107971],{"class":69,"line":677},[67,107972,680],{"class":114},[67,107974,107975],{"class":69,"line":683},[67,107976,686],{"class":114},[67,107978,107979],{"class":69,"line":689},[67,107980,631],{"emptyLinePlaceholder":630},[67,107982,107983],{"class":69,"line":694},[67,107984,697],{"class":114},[67,107986,107987],{"class":69,"line":700},[67,107988,703],{"class":114},[67,107990,107991],{"class":69,"line":706},[67,107992,709],{"class":114},[67,107994,107995],{"class":69,"line":712},[67,107996,631],{"emptyLinePlaceholder":630},[67,107998,107999],{"class":69,"line":717},[67,108000,720],{"class":114},[67,108002,108003],{"class":69,"line":723},[67,108004,726],{"class":114},[67,108006,108007],{"class":69,"line":729},[67,108008,732],{"class":114},[67,108010,108011],{"class":69,"line":735},[67,108012,738],{"class":114},[67,108014,108015],{"class":69,"line":741},[67,108016,744],{"class":114},[67,108018,108019],{"class":69,"line":747},[67,108020,750],{"class":114},[67,108022,108023],{"class":69,"line":753},[67,108024,631],{"emptyLinePlaceholder":630},[67,108026,108027],{"class":69,"line":758},[67,108028,761],{"class":114},[67,108030,108031],{"class":69,"line":764},[67,108032,767],{"class":114},[67,108034,108035],{"class":69,"line":770},[67,108036,773],{"class":114},[67,108038,108039],{"class":69,"line":776},[67,108040,779],{"class":114},[67,108042,108043],{"class":69,"line":782},[67,108044,785],{"class":114},[67,108046,108047],{"class":69,"line":788},[67,108048,631],{"emptyLinePlaceholder":630},[67,108050,108051],{"class":69,"line":793},[67,108052,631],{"emptyLinePlaceholder":630},[67,108054,108055,108057,108059,108061,108063],{"class":69,"line":798},[67,108056,801],{"class":84},[67,108058,804],{"class":110},[67,108060,807],{"class":73},[67,108062,810],{"class":77},[67,108064,813],{"class":73},[67,108066,108067,108069,108071,108073,108075],{"class":69,"line":816},[67,108068,819],{"class":73},[67,108070,85],{"class":84},[67,108072,824],{"class":73},[67,108074,668],{"class":77},[67,108076,829],{"class":73},[67,108078,108079,108081,108083],{"class":69,"line":832},[67,108080,835],{"class":73},[67,108082,85],{"class":84},[67,108084,840],{"class":73},[67,108086,108087],{"class":69,"line":843},[67,108088,631],{"emptyLinePlaceholder":630},[67,108090,108091,108093,108095,108097],{"class":69,"line":848},[67,108092,851],{"class":77},[67,108094,854],{"class":73},[67,108096,857],{"class":114},[67,108098,860],{"class":73},[67,108100,108101,108103,108105,108107],{"class":69,"line":863},[67,108102,851],{"class":77},[67,108104,854],{"class":73},[67,108106,870],{"class":114},[67,108108,873],{"class":73},[67,108110,108111,108113,108115,108117],{"class":69,"line":876},[67,108112,851],{"class":77},[67,108114,854],{"class":73},[67,108116,883],{"class":114},[67,108118,886],{"class":73},[67,108120,108121],{"class":69,"line":889},[67,108122,631],{"emptyLinePlaceholder":630},[67,108124,108125,108127,108129,108131,108133],{"class":69,"line":894},[67,108126,897],{"class":84},[67,108128,900],{"class":73},[67,108130,903],{"class":84},[67,108132,906],{"class":77},[67,108134,813],{"class":73},[67,108136,108137,108139,108141,108143,108145],{"class":69,"line":911},[67,108138,914],{"class":84},[67,108140,917],{"class":77},[67,108142,854],{"class":73},[67,108144,922],{"class":114},[67,108146,829],{"class":73},[67,108148,108149],{"class":69,"line":927},[67,108150,631],{"emptyLinePlaceholder":630},[67,108152,108153,108155,108157,108159,108161,108163,108165],{"class":69,"line":932},[67,108154,935],{"class":84},[67,108156,938],{"class":73},[67,108158,941],{"class":84},[67,108160,944],{"class":77},[67,108162,854],{"class":73},[67,108164,949],{"class":77},[67,108166,952],{"class":73},[67,108168,108169,108171,108173,108175,108177],{"class":69,"line":955},[67,108170,958],{"class":73},[67,108172,85],{"class":84},[67,108174,938],{"class":73},[67,108176,965],{"class":84},[67,108178,968],{"class":73},[67,108180,108181,108183,108185,108187,108189,108191,108193,108195,108197,108199,108201,108203,108205,108207],{"class":69,"line":971},[67,108182,974],{"class":73},[67,108184,78],{"class":77},[67,108186,81],{"class":73},[67,108188,85],{"class":84},[67,108190,983],{"class":77},[67,108192,986],{"class":84},[67,108194,989],{"class":73},[67,108196,992],{"class":77},[67,108198,986],{"class":84},[67,108200,997],{"class":73},[67,108202,965],{"class":84},[67,108204,1002],{"class":77},[67,108206,986],{"class":84},[67,108208,1007],{"class":73},[67,108210,108211],{"class":69,"line":1010},[67,108212,1013],{"class":73},[67,108214,108215],{"class":69,"line":1016},[67,108216,631],{"emptyLinePlaceholder":630},[67,108218,108219,108221,108223,108225],{"class":69,"line":1021},[67,108220,851],{"class":77},[67,108222,854],{"class":73},[67,108224,1028],{"class":114},[67,108226,1031],{"class":73},[67,108228,108229,108231,108233,108235,108237,108239],{"class":69,"line":1034},[67,108230,851],{"class":77},[67,108232,854],{"class":73},[67,108234,1041],{"class":114},[67,108236,1044],{"class":73},[67,108238,1047],{"class":77},[67,108240,1050],{"class":73},[67,108242,108243,108245,108247,108249,108251,108253],{"class":69,"line":1053},[67,108244,851],{"class":77},[67,108246,854],{"class":73},[67,108248,1060],{"class":114},[67,108250,1063],{"class":73},[67,108252,1047],{"class":77},[67,108254,1050],{"class":73},[67,108256,108257,108259,108261,108263],{"class":69,"line":1070},[67,108258,851],{"class":77},[67,108260,854],{"class":73},[67,108262,1077],{"class":114},[67,108264,1080],{"class":73},[67,108266,108267],{"class":69,"line":1083},[67,108268,631],{"emptyLinePlaceholder":630},[67,108270,108271],{"class":69,"line":1088},[67,108272,631],{"emptyLinePlaceholder":630},[67,108274,108275,108277,108279,108281,108283],{"class":69,"line":1093},[67,108276,1096],{"class":84},[67,108278,1099],{"class":77},[67,108280,1102],{"class":84},[67,108282,1105],{"class":114},[67,108284,813],{"class":73},[67,108286,108287],{"class":69,"line":1110},[67,108288,1113],{"class":73},[19,108290,1116],{},[58,108292,108293],{"className":101,"code":1119,"language":103,"meta":63,"style":63},[32,108294,108295],{"__ignoreMap":63},[67,108296,108297,108299],{"class":69,"line":70},[67,108298,1126],{"class":110},[67,108300,1129],{"class":114},[19,108302,1132],{},[58,108304,108305],{"className":101,"code":1135,"language":103,"meta":63,"style":63},[32,108306,108307],{"__ignoreMap":63},[67,108308,108309,108311],{"class":69,"line":70},[67,108310,62],{"class":110},[67,108312,1129],{"class":114},[391,108314,1146],{"id":1146},[19,108316,1149],{},[58,108318,108319],{"className":60,"code":1152,"language":62,"meta":63,"style":63},[32,108320,108321,108333],{"__ignoreMap":63},[67,108322,108323,108325,108327,108329,108331],{"class":69,"line":70},[67,108324,1096],{"class":84},[67,108326,900],{"class":73},[67,108328,903],{"class":84},[67,108330,906],{"class":77},[67,108332,813],{"class":73},[67,108334,108335,108337,108339,108341,108343],{"class":69,"line":191},[67,108336,1171],{"class":84},[67,108338,917],{"class":77},[67,108340,854],{"class":73},[67,108342,922],{"class":114},[67,108344,829],{"class":73},[19,108346,108347,1184,108349,1187],{},[32,108348,229],{},[32,108350,45],{},[19,108352,1190],{},[58,108354,108355],{"className":60,"code":1193,"language":62,"meta":63,"style":63},[32,108356,108357],{"__ignoreMap":63},[67,108358,108359,108361,108363,108365,108367,108369,108371,108373,108375,108377,108379,108381,108383,108385],{"class":69,"line":70},[67,108360,74],{"class":73},[67,108362,78],{"class":77},[67,108364,81],{"class":73},[67,108366,85],{"class":84},[67,108368,983],{"class":77},[67,108370,986],{"class":84},[67,108372,989],{"class":73},[67,108374,992],{"class":77},[67,108376,986],{"class":84},[67,108378,997],{"class":73},[67,108380,965],{"class":84},[67,108382,1002],{"class":77},[67,108384,986],{"class":84},[67,108386,1007],{"class":73},[19,108388,1228],{},[19,108390,1231],{},[58,108392,108393],{"className":60,"code":1234,"language":62,"meta":63,"style":63},[32,108394,108395],{"__ignoreMap":63},[67,108396,108397],{"class":69,"line":70},[67,108398,1234],{"class":73},[19,108400,1243],{},[391,108402,1246],{"id":1246},[58,108404,108405],{"className":60,"code":1249,"language":62,"meta":63,"style":63},[32,108406,108407],{"__ignoreMap":63},[67,108408,108409,108411],{"class":69,"line":70},[67,108410,622],{"class":84},[67,108412,625],{"class":73},[19,108414,1260,108415,1264,108417,1268],{},[32,108416,1263],{},[32,108418,1267],{},[58,108420,108421],{"className":60,"code":1271,"language":62,"meta":63,"style":63},[32,108422,108423,108429],{"__ignoreMap":63},[67,108424,108425,108427],{"class":69,"line":70},[67,108426,622],{"class":84},[67,108428,638],{"class":73},[67,108430,108431,108433,108435,108437],{"class":69,"line":191},[67,108432,622],{"class":84},[67,108434,646],{"class":73},[67,108436,649],{"class":84},[67,108438,652],{"class":73},[19,108440,1292],{},[58,108442,108443],{"className":250,"code":457,"language":252,"meta":63,"style":63},[32,108444,108445],{"__ignoreMap":63},[67,108446,108447,108449,108451,108453,108455,108457,108459,108461,108463,108465,108467,108469,108471,108473,108475],{"class":69,"line":70},[67,108448,259],{"class":73},[67,108450,263],{"class":262},[67,108452,266],{"class":110},[67,108454,85],{"class":73},[67,108456,271],{"class":114},[67,108458,274],{"class":110},[67,108460,85],{"class":73},[67,108462,271],{"class":114},[67,108464,281],{"class":110},[67,108466,85],{"class":73},[67,108468,286],{"class":114},[67,108470,486],{"class":110},[67,108472,85],{"class":73},[67,108474,491],{"class":114},[67,108476,289],{"class":73},[19,108478,1331,108479,1334,108481,1337,108483,1340],{},[32,108480,34],{},[32,108482,509],{},[32,108484,515],{},[58,108486,108487],{"className":250,"code":1343,"language":252,"meta":63,"style":63},[32,108488,108489],{"__ignoreMap":63},[67,108490,108491,108493,108495,108497,108499,108501,108503,108505,108507,108509,108511,108513,108515,108517,108519,108521,108523,108525],{"class":69,"line":70},[67,108492,259],{"class":73},[67,108494,1352],{"class":262},[67,108496,266],{"class":110},[67,108498,85],{"class":73},[67,108500,1359],{"class":114},[67,108502,274],{"class":110},[67,108504,85],{"class":73},[67,108506,1366],{"class":114},[67,108508,1369],{"class":110},[67,108510,85],{"class":73},[67,108512,1374],{"class":114},[67,108514,1377],{"class":110},[67,108516,85],{"class":73},[67,108518,1382],{"class":114},[67,108520,1385],{"class":110},[67,108522,85],{"class":73},[67,108524,1390],{"class":114},[67,108526,289],{"class":73},[19,108528,1395,108529,1399,108531,1403,108533,1407,108535,230,108537,1414],{},[32,108530,1398],{},[32,108532,1402],{},[32,108534,1406],{},[32,108536,1410],{},[32,108538,1413],{},[58,108540,108541],{"className":250,"code":523,"language":252,"meta":63,"style":63},[32,108542,108543],{"__ignoreMap":63},[67,108544,108545,108547,108549,108551,108553,108555,108557,108559,108561,108563,108565,108567,108569,108571,108573,108575,108577,108579],{"class":69,"line":70},[67,108546,259],{"class":73},[67,108548,331],{"class":262},[67,108550,266],{"class":110},[67,108552,85],{"class":73},[67,108554,338],{"class":114},[67,108556,341],{"class":110},[67,108558,85],{"class":73},[67,108560,271],{"class":114},[67,108562,348],{"class":110},[67,108564,85],{"class":73},[67,108566,353],{"class":114},[67,108568,356],{"class":110},[67,108570,85],{"class":73},[67,108572,361],{"class":114},[67,108574,364],{"class":110},[67,108576,85],{"class":73},[67,108578,369],{"class":114},[67,108580,289],{"class":73},[19,108582,1459,108583,1462,108585,1466,108587,1469],{},[32,108584,34],{},[32,108586,1465],{},[32,108588,50],{},[58,108590,108591],{"className":60,"code":1152,"language":62,"meta":63,"style":63},[32,108592,108593,108605],{"__ignoreMap":63},[67,108594,108595,108597,108599,108601,108603],{"class":69,"line":70},[67,108596,1096],{"class":84},[67,108598,900],{"class":73},[67,108600,903],{"class":84},[67,108602,906],{"class":77},[67,108604,813],{"class":73},[67,108606,108607,108609,108611,108613,108615],{"class":69,"line":191},[67,108608,1171],{"class":84},[67,108610,917],{"class":77},[67,108612,854],{"class":73},[67,108614,922],{"class":114},[67,108616,829],{"class":73},[19,108618,108619,1502],{},[32,108620,229],{},[58,108622,108623],{"className":60,"code":1505,"language":62,"meta":63,"style":63},[32,108624,108625],{"__ignoreMap":63},[67,108626,108627,108629,108631,108633,108635,108637,108639],{"class":69,"line":70},[67,108628,1512],{"class":84},[67,108630,938],{"class":73},[67,108632,941],{"class":84},[67,108634,944],{"class":77},[67,108636,854],{"class":73},[67,108638,949],{"class":77},[67,108640,952],{"class":73},[19,108642,1527,108643,1531,108645,1535],{},[32,108644,1530],{},[32,108646,1534],{},[58,108648,108649],{"className":60,"code":1538,"language":62,"meta":63,"style":63},[32,108650,108651],{"__ignoreMap":63},[67,108652,108653,108655,108657,108659,108661],{"class":69,"line":70},[67,108654,1545],{"class":73},[67,108656,85],{"class":84},[67,108658,938],{"class":73},[67,108660,965],{"class":84},[67,108662,968],{"class":73},[19,108664,1556],{},[58,108666,108667],{"className":60,"code":1193,"language":62,"meta":63,"style":63},[32,108668,108669],{"__ignoreMap":63},[67,108670,108671,108673,108675,108677,108679,108681,108683,108685,108687,108689,108691,108693,108695,108697],{"class":69,"line":70},[67,108672,74],{"class":73},[67,108674,78],{"class":77},[67,108676,81],{"class":73},[67,108678,85],{"class":84},[67,108680,983],{"class":77},[67,108682,986],{"class":84},[67,108684,989],{"class":73},[67,108686,992],{"class":77},[67,108688,986],{"class":84},[67,108690,997],{"class":73},[67,108692,965],{"class":84},[67,108694,1002],{"class":77},[67,108696,986],{"class":84},[67,108698,1007],{"class":73},[19,108700,1593],{},[26,108702,108703,108707,108711],{},[29,108704,108705,1601],{},[32,108706,1600],{},[29,108708,108709,1607],{},[32,108710,1606],{},[29,108712,108713,1613],{},[32,108714,1612],{},[19,108716,1616],{},[58,108718,108719],{"className":60,"code":1619,"language":62,"meta":63,"style":63},[32,108720,108721],{"__ignoreMap":63},[67,108722,108723,108725,108727,108729,108731,108733],{"class":69,"line":70},[67,108724,1626],{"class":77},[67,108726,854],{"class":73},[67,108728,1041],{"class":114},[67,108730,1044],{"class":73},[67,108732,1047],{"class":77},[67,108734,1050],{"class":73},[19,108736,1639,108737,1643],{},[32,108738,1642],{},[14,108740,1647],{"id":1646},[19,108742,1650],{},[58,108744,108746],{"className":108745,"code":1654,"language":603,"meta":63},[601],[32,108747,1654],{"__ignoreMap":63},[19,108749,1659,108750,1662],{},[32,108751,385],{},[19,108753,108754,1668,108756,1672],{},[32,108755,1667],{},[32,108757,1671],{},[19,108759,1675],{},[58,108761,108763],{"className":108762,"code":1679,"language":603,"meta":63},[601],[32,108764,1679],{"__ignoreMap":63},[19,108766,1684,108767,1688,108769,1692],{},[32,108768,1687],{},[32,108770,1691],{},[14,108772,1696],{"id":1695},[26,108774,108775,108781,108783,108789,108791,108797,108803],{},[29,108776,1701,108777,1704,108779,230],{},[32,108778,581],{},[32,108780,1707],{},[29,108782,1710],{},[29,108784,1701,108785,1704,108787,230],{},[32,108786,50],{},[32,108788,1717],{},[29,108790,1720],{},[29,108792,1723,108793,1726,108795,230],{},[32,108794,229],{},[32,108796,78],{},[29,108798,1701,108799,1704,108801,1736],{},[32,108800,515],{},[32,108802,1735],{},[29,108804,1701,108805,1704,108807,1744],{},[32,108806,509],{},[32,108808,1743],{},[14,108810,1748],{"id":1747},[391,108812,108813],{"id":1751},[32,108814,1754],{},[19,108816,1757,108817,1760],{},[32,108818,236],{},[391,108820,1763],{"id":1763},[19,108822,1766],{},[26,108824,108825,108829,108833,108837],{},[29,108826,108827,1773],{},[32,108828,1465],{},[29,108830,108831,1773],{},[32,108832,50],{},[29,108834,108835,1783],{},[32,108836,1782],{},[29,108838,1786],{},[391,108840,1789],{"id":1789},[19,108842,1792,108843,1795],{},[32,108844,572],{},[391,108846,108847,1801],{"id":1798},[32,108848,385],{},[19,108850,1804],{},[26,108852,108853,108857,108859,108863,108867],{},[29,108854,108855,1811],{},[32,108856,229],{},[29,108858,1814],{},[29,108860,108861,1819],{},[32,108862,1465],{},[29,108864,108865,1824],{},[32,108866,50],{},[29,108868,1827],{},[391,108870,1830],{"id":1830},[19,108872,1833],{},[58,108874,108875],{"className":250,"code":1836,"language":252,"meta":63,"style":63},[32,108876,108877],{"__ignoreMap":63},[67,108878,108879],{"class":69,"line":70},[67,108880,1836],{"class":73},[19,108882,1845],{},[58,108884,108885],{"className":60,"code":1848,"language":62,"meta":63,"style":63},[32,108886,108887,108905],{"__ignoreMap":63},[67,108888,108889,108891,108893,108895,108897,108899,108901,108903],{"class":69,"line":70},[67,108890,1855],{"class":73},[67,108892,85],{"class":84},[67,108894,1860],{"class":73},[67,108896,1863],{"class":84},[67,108898,992],{"class":77},[67,108900,1868],{"class":73},[67,108902,992],{"class":77},[67,108904,829],{"class":73},[67,108906,108907,108909,108911,108913,108915],{"class":69,"line":191},[67,108908,74],{"class":73},[67,108910,78],{"class":77},[67,108912,81],{"class":73},[67,108914,85],{"class":84},[67,108916,1885],{"class":73},[14,108918,1889],{"id":1888},[19,108920,1892],{},[58,108922,108924],{"className":108923,"code":1896,"language":603,"meta":63},[601],[32,108925,1896],{"__ignoreMap":63},[19,108927,1901],{},[1903,108929,1905],{},{"title":63,"searchDepth":191,"depth":191,"links":108931},[108932,108933,108934,108939,108943,108944,108945,108952],{"id":16,"depth":191,"text":17},{"id":94,"depth":191,"text":95},{"id":243,"depth":191,"text":244,"children":108935},[108936,108937,108938],{"id":393,"depth":202,"text":394},{"id":453,"depth":202,"text":454},{"id":519,"depth":202,"text":520},{"id":611,"depth":191,"text":612,"children":108940},[108941,108942],{"id":1146,"depth":202,"text":1146},{"id":1246,"depth":202,"text":1246},{"id":1646,"depth":191,"text":1647},{"id":1695,"depth":191,"text":1696},{"id":1747,"depth":191,"text":1748,"children":108946},[108947,108948,108949,108950,108951],{"id":1751,"depth":202,"text":1754},{"id":1763,"depth":202,"text":1763},{"id":1789,"depth":202,"text":1789},{"id":1798,"depth":202,"text":1927},{"id":1830,"depth":202,"text":1830},{"id":1888,"depth":191,"text":1889},{},{"title":5,"description":63},{"id":108956,"title":108957,"body":108958,"description":63,"extension":1930,"meta":110867,"navigation":630,"path":110868,"seo":110869,"stem":110870,"__hash__":110871},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108959,"toc":110843},[108960,108963,108965,108968,108976,108979,108996,108999,109024,109027,109073,109075,109077,109132,109134,109153,109155,109198,109201,109218,109221,109237,109247,109254,109256,109259,109262,109296,109299,109347,109351,109354,109368,109377,109381,109384,109409,109412,109416,109429,109432,109438,109441,109456,109458,109461,109721,109723,109735,109738,110050,110052,110064,110066,110069,110084,110089,110092,110114,110117,110120,110154,110157,110161,110172,110175,110192,110195,110209,110216,110236,110243,110257,110260,110272,110287,110307,110310,110332,110335,110339,110354,110365,110380,110383,110413,110429,110458,110466,110490,110493,110511,110521,110533,110540,110549,110555,110564,110567,110569,110578,110581,110596,110598,110601,110612,110615,110626,110629,110647,110649,110666,110669,110697,110699,110703,110706,110736,110742,110745,110749,110757,110760,110762,110783,110786,110789,110805,110808,110824,110826,110829,110840],[10,108961,108957],{"id":108962},"_5viewer-可视化与-renderer-离屏渲染",[14,108964,17],{"id":16},[19,108966,108967],{},"本章掌握两类可视化方式:",[26,108969,108970,108973],{},[29,108971,108972],{},"交互式 viewer: 适合人工观察仿真",[29,108974,108975],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108977,108978],{},"使用官方接口:",[58,108980,108982],{"className":60,"code":108981,"language":62,"meta":63,"style":63},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[32,108983,108984,108991],{"__ignoreMap":63},[67,108985,108986,108988],{"class":69,"line":70},[67,108987,622],{"class":84},[67,108989,108990],{"class":73}," mujoco.viewer\n",[67,108992,108993],{"class":69,"line":191},[67,108994,108995],{"class":73},"mujoco.viewer.launch_passive(model, data)\n",[19,108997,108998],{},"以及:",[58,109000,109002],{"className":60,"code":109001,"language":62,"meta":63,"style":63},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[32,109003,109004,109014],{"__ignoreMap":63},[67,109005,109006,109009,109011],{"class":69,"line":70},[67,109007,109008],{"class":73},"renderer ",[67,109010,85],{"class":84},[67,109012,109013],{"class":73}," mujoco.Renderer(model)\n",[67,109015,109016,109019,109021],{"class":69,"line":191},[67,109017,109018],{"class":73},"image ",[67,109020,85],{"class":84},[67,109022,109023],{"class":73}," renderer.render()\n",[19,109025,109026],{},"新手建议先理解二者区别：",[399,109028,109029,109045],{},[402,109030,109031],{},[405,109032,109033,109036,109039,109042],{},[408,109034,109035],{"align":410},"工具",[408,109037,109038],{"align":410},"用途",[408,109040,109041],{"align":410},"是否打开窗口",[408,109043,109044],{"align":410},"常见场景",[419,109046,109047,109060],{},[405,109048,109049,109052,109055,109057],{},[424,109050,109051],{"align":410},"Viewer",[424,109053,109054],{"align":410},"人眼实时观察仿真",[424,109056,106334],{"align":410},[424,109058,109059],{"align":410},"调试模型、看控制效果",[405,109061,109062,109065,109068,109070],{},[424,109063,109064],{"align":410},"Renderer",[424,109066,109067],{"align":410},"生成图像数组",[424,109069,106347],{"align":410},[424,109071,109072],{"align":410},"保存图片、训练视觉策略、服务器批量采集",[14,109074,95],{"id":94},[19,109076,98],{},[58,109078,109080],{"className":101,"code":109079,"language":103,"meta":63,"style":63},"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",[32,109081,109082,109094,109104,109112,109120],{"__ignoreMap":63},[67,109083,109084,109086,109088,109090,109092],{"class":69,"line":70},[67,109085,111],{"class":110},[67,109087,115],{"class":114},[67,109089,118],{"class":114},[67,109091,121],{"class":77},[67,109093,26470],{"class":77},[67,109095,109096,109098,109100,109102],{"class":69,"line":191},[67,109097,102558],{"class":114},[67,109099,102561],{"class":114},[67,109101,133],{"class":114},[67,109103,26470],{"class":77},[67,109105,109106,109108,109110],{"class":69,"line":202},[67,109107,102570],{"class":114},[67,109109,102573],{"class":114},[67,109111,26470],{"class":77},[67,109113,109114,109116,109118],{"class":69,"line":641},[67,109115,102580],{"class":114},[67,109117,102583],{"class":114},[67,109119,26470],{"class":77},[67,109121,109122,109124,109126,109128,109130],{"class":69,"line":655},[67,109123,102590],{"class":114},[67,109125,102593],{"class":114},[67,109127,102596],{"class":114},[67,109129,102599],{"class":114},[67,109131,104208],{"class":114},[19,109133,139],{},[58,109135,109137],{"className":101,"code":109136,"language":103,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy pillow\n",[32,109138,109139],{"__ignoreMap":63},[67,109140,109141,109143,109145,109147,109150],{"class":69,"line":70},[67,109142,149],{"class":110},[67,109144,118],{"class":114},[67,109146,154],{"class":114},[67,109148,109149],{"class":114}," numpy",[67,109151,109152],{"class":114}," pillow\n",[19,109154,160],{},[58,109156,109158],{"className":101,"code":109157,"language":103,"meta":63,"style":63},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[32,109159,109160,109177,109186],{"__ignoreMap":63},[67,109161,109162,109164,109166,109168,109171,109173,109175],{"class":69,"line":70},[67,109163,170],{"class":110},[67,109165,173],{"class":114},[67,109167,176],{"class":77},[67,109169,109170],{"class":114}," mujoco-render",[67,109172,182],{"class":114},[67,109174,185],{"class":77},[67,109176,188],{"class":77},[67,109178,109179,109181,109183],{"class":69,"line":191},[67,109180,170],{"class":110},[67,109182,196],{"class":114},[67,109184,109185],{"class":114}," mujoco-render\n",[67,109187,109188,109190,109192,109194,109196],{"class":69,"line":202},[67,109189,149],{"class":110},[67,109191,118],{"class":114},[67,109193,154],{"class":114},[67,109195,109149],{"class":114},[67,109197,109152],{"class":114},[19,109199,109200],{},"离屏渲染后端:",[58,109202,109204],{"className":101,"code":109203,"language":103,"meta":63,"style":63},"export MUJOCO_GL=egl\n",[32,109205,109206],{"__ignoreMap":63},[67,109207,109208,109210,109213,109215],{"class":69,"line":70},[67,109209,26834],{"class":84},[67,109211,109212],{"class":73}," MUJOCO_GL",[67,109214,85],{"class":84},[67,109216,109217],{"class":73},"egl\n",[19,109219,109220],{},"或:",[58,109222,109224],{"className":101,"code":109223,"language":103,"meta":63,"style":63},"export MUJOCO_GL=osmesa\n",[32,109225,109226],{"__ignoreMap":63},[67,109227,109228,109230,109232,109234],{"class":69,"line":70},[67,109229,26834],{"class":84},[67,109231,109212],{"class":73},[67,109233,85],{"class":84},[67,109235,109236],{"class":73},"osmesa\n",[19,109238,109239,109240,109243,109244,230],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[32,109241,109242],{},"egl"," 失败，再尝试 ",[32,109245,109246],{},"osmesa",[19,109248,109249,109250,109253],{},"如果你在本机桌面环境运行，通常先不要设置 ",[32,109251,109252],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109255,244],{"id":243},[19,109257,109258],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109260,109261],{},"典型 viewer 流程:",[58,109263,109265],{"className":60,"code":109264,"language":62,"meta":63,"style":63},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[32,109266,109267,109280,109287,109291],{"__ignoreMap":63},[67,109268,109269,109272,109275,109277],{"class":69,"line":70},[67,109270,109271],{"class":84},"with",[67,109273,109274],{"class":73}," mujoco.viewer.launch_passive(model, data) ",[67,109276,649],{"class":84},[67,109278,109279],{"class":73}," viewer:\n",[67,109281,109282,109284],{"class":69,"line":191},[67,109283,4084],{"class":84},[67,109285,109286],{"class":73}," viewer.is_running():\n",[67,109288,109289],{"class":69,"line":202},[67,109290,1013],{"class":73},[67,109292,109293],{"class":69,"line":641},[67,109294,109295],{"class":73},"        viewer.sync()\n",[19,109297,109298],{},"典型 renderer 流程:",[58,109300,109302],{"className":60,"code":109301,"language":62,"meta":63,"style":63},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[32,109303,109304,109330,109334,109339],{"__ignoreMap":63},[67,109305,109306,109308,109310,109313,109315,109317,109319,109321,109323,109325,109328],{"class":69,"line":70},[67,109307,109008],{"class":73},[67,109309,85],{"class":84},[67,109311,109312],{"class":73}," mujoco.Renderer(model, ",[67,109314,26773],{"class":7033},[67,109316,85],{"class":84},[67,109318,44110],{"class":77},[67,109320,1868],{"class":73},[67,109322,26769],{"class":7033},[67,109324,85],{"class":84},[67,109326,109327],{"class":77},"640",[67,109329,829],{"class":73},[67,109331,109332],{"class":69,"line":191},[67,109333,1234],{"class":73},[67,109335,109336],{"class":69,"line":202},[67,109337,109338],{"class":73},"renderer.update_scene(data)\n",[67,109340,109341,109343,109345],{"class":69,"line":641},[67,109342,109018],{"class":73},[67,109344,85],{"class":84},[67,109346,109023],{"class":73},[391,109348,109350],{"id":109349},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109352,109353],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[58,109355,109357],{"className":60,"code":109356,"language":62,"meta":63,"style":63},"mujoco.mj_step(model, data)\nviewer.sync()\n",[32,109358,109359,109363],{"__ignoreMap":63},[67,109360,109361],{"class":69,"line":70},[67,109362,1234],{"class":73},[67,109364,109365],{"class":69,"line":191},[67,109366,109367],{"class":73},"viewer.sync()\n",[19,109369,109370,109372,109373,109376],{},[32,109371,102948],{}," 负责算物理，",[32,109374,109375],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[391,109378,109380],{"id":109379},"为什么要-sleep","为什么要 sleep",[19,109382,109383],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[58,109385,109387],{"className":60,"code":109386,"language":62,"meta":63,"style":63},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[32,109388,109389],{"__ignoreMap":63},[67,109390,109391,109394,109396,109399,109401,109404,109406],{"class":69,"line":70},[67,109392,109393],{"class":73},"sleep_time ",[67,109395,85],{"class":84},[67,109397,109398],{"class":73}," model.opt.timestep ",[67,109400,1863],{"class":84},[67,109402,109403],{"class":73}," (time.time() ",[67,109405,1863],{"class":84},[67,109407,109408],{"class":73}," step_start)\n",[19,109410,109411],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[391,109413,109415],{"id":109414},"renderer-输出是什么","renderer 输出是什么",[58,109417,109419],{"className":60,"code":109418,"language":62,"meta":63,"style":63},"image = renderer.render()\n",[32,109420,109421],{"__ignoreMap":63},[67,109422,109423,109425,109427],{"class":69,"line":70},[67,109424,109018],{"class":73},[67,109426,85],{"class":84},[67,109428,109023],{"class":73},[19,109430,109431],{},"得到的是 NumPy 数组，形状通常是：",[58,109433,109436],{"className":109434,"code":109435,"language":603,"meta":63},[601],"(height, width, 3)\n",[32,109437,109435],{"__ignoreMap":63},[19,109439,109440],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[58,109442,109444],{"className":60,"code":109443,"language":62,"meta":63,"style":63},"Image.fromarray(image).save(\"render_output.png\")\n",[32,109445,109446],{"__ignoreMap":63},[67,109447,109448,109451,109454],{"class":69,"line":70},[67,109449,109450],{"class":73},"Image.fromarray(image).save(",[67,109452,109453],{"class":114},"\"render_output.png\"",[67,109455,829],{"class":73},[14,109457,612],{"id":611},[19,109459,109460],{},"交互式 Viewer:",[58,109462,109464],{"className":60,"code":109463,"language":62,"meta":63,"style":63},"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",[32,109465,109466,109472,109476,109482,109488,109492,109496,109504,109509,109513,109517,109521,109526,109531,109535,109539,109543,109548,109552,109556,109560,109564,109568,109572,109584,109596,109604,109608,109618,109638,109648,109653,109658,109662,109679,109692,109697,109701,109705,109717],{"__ignoreMap":63},[67,109467,109468,109470],{"class":69,"line":70},[67,109469,622],{"class":84},[67,109471,33600],{"class":73},[67,109473,109474],{"class":69,"line":191},[67,109475,631],{"emptyLinePlaceholder":630},[67,109477,109478,109480],{"class":69,"line":202},[67,109479,622],{"class":84},[67,109481,638],{"class":73},[67,109483,109484,109486],{"class":69,"line":641},[67,109485,622],{"class":84},[67,109487,108990],{"class":73},[67,109489,109490],{"class":69,"line":655},[67,109491,631],{"emptyLinePlaceholder":630},[67,109493,109494],{"class":69,"line":660},[67,109495,631],{"emptyLinePlaceholder":630},[67,109497,109498,109500,109502],{"class":69,"line":665},[67,109499,668],{"class":77},[67,109501,671],{"class":84},[67,109503,674],{"class":114},[67,109505,109506],{"class":69,"line":677},[67,109507,109508],{"class":114},"\u003Cmujoco model=\"viewer_demo\">\n",[67,109510,109511],{"class":69,"line":683},[67,109512,103056],{"class":114},[67,109514,109515],{"class":69,"line":689},[67,109516,631],{"emptyLinePlaceholder":630},[67,109518,109519],{"class":69,"line":694},[67,109520,697],{"class":114},[67,109522,109523],{"class":69,"line":700},[67,109524,109525],{"class":114},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[67,109527,109528],{"class":69,"line":706},[67,109529,109530],{"class":114},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[67,109532,109533],{"class":69,"line":712},[67,109534,631],{"emptyLinePlaceholder":630},[67,109536,109537],{"class":69,"line":717},[67,109538,103078],{"class":114},[67,109540,109541],{"class":69,"line":723},[67,109542,103083],{"class":114},[67,109544,109545],{"class":69,"line":729},[67,109546,109547],{"class":114},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[67,109549,109550],{"class":69,"line":735},[67,109551,744],{"class":114},[67,109553,109554],{"class":69,"line":741},[67,109555,750],{"class":114},[67,109557,109558],{"class":69,"line":747},[67,109559,779],{"class":114},[67,109561,109562],{"class":69,"line":753},[67,109563,785],{"class":114},[67,109565,109566],{"class":69,"line":758},[67,109567,631],{"emptyLinePlaceholder":630},[67,109569,109570],{"class":69,"line":764},[67,109571,631],{"emptyLinePlaceholder":630},[67,109573,109574,109576,109578,109580,109582],{"class":69,"line":770},[67,109575,801],{"class":84},[67,109577,804],{"class":110},[67,109579,807],{"class":73},[67,109581,810],{"class":77},[67,109583,813],{"class":73},[67,109585,109586,109588,109590,109592,109594],{"class":69,"line":776},[67,109587,819],{"class":73},[67,109589,85],{"class":84},[67,109591,824],{"class":73},[67,109593,668],{"class":77},[67,109595,829],{"class":73},[67,109597,109598,109600,109602],{"class":69,"line":782},[67,109599,835],{"class":73},[67,109601,85],{"class":84},[67,109603,840],{"class":73},[67,109605,109606],{"class":69,"line":788},[67,109607,631],{"emptyLinePlaceholder":630},[67,109609,109610,109612,109614,109616],{"class":69,"line":793},[67,109611,35947],{"class":84},[67,109613,109274],{"class":73},[67,109615,649],{"class":84},[67,109617,109279],{"class":73},[67,109619,109620,109623,109626,109628,109631,109633,109636],{"class":69,"line":798},[67,109621,109622],{"class":84},"        while",[67,109624,109625],{"class":73}," viewer.is_running() ",[67,109627,32241],{"class":84},[67,109629,109630],{"class":73}," data.time ",[67,109632,259],{"class":84},[67,109634,109635],{"class":77}," 5.0",[67,109637,813],{"class":73},[67,109639,109640,109643,109645],{"class":69,"line":816},[67,109641,109642],{"class":73},"            step_start ",[67,109644,85],{"class":84},[67,109646,109647],{"class":73}," time.time()\n",[67,109649,109650],{"class":69,"line":832},[67,109651,109652],{"class":73},"            mujoco.mj_step(model, data)\n",[67,109654,109655],{"class":69,"line":843},[67,109656,109657],{"class":73},"            viewer.sync()\n",[67,109659,109660],{"class":69,"line":848},[67,109661,631],{"emptyLinePlaceholder":630},[67,109663,109664,109667,109669,109671,109673,109675,109677],{"class":69,"line":863},[67,109665,109666],{"class":73},"            sleep_time ",[67,109668,85],{"class":84},[67,109670,109398],{"class":73},[67,109672,1863],{"class":84},[67,109674,109403],{"class":73},[67,109676,1863],{"class":84},[67,109678,109408],{"class":73},[67,109680,109681,109683,109686,109688,109690],{"class":69,"line":876},[67,109682,6461],{"class":84},[67,109684,109685],{"class":73}," sleep_time ",[67,109687,2948],{"class":84},[67,109689,5913],{"class":77},[67,109691,813],{"class":73},[67,109693,109694],{"class":69,"line":889},[67,109695,109696],{"class":73},"                time.sleep(sleep_time)\n",[67,109698,109699],{"class":69,"line":894},[67,109700,631],{"emptyLinePlaceholder":630},[67,109702,109703],{"class":69,"line":911},[67,109704,631],{"emptyLinePlaceholder":630},[67,109706,109707,109709,109711,109713,109715],{"class":69,"line":927},[67,109708,1096],{"class":84},[67,109710,1099],{"class":77},[67,109712,1102],{"class":84},[67,109714,1105],{"class":114},[67,109716,813],{"class":73},[67,109718,109719],{"class":69,"line":932},[67,109720,1113],{"class":73},[19,109722,1116],{},[58,109724,109726],{"className":101,"code":109725,"language":103,"meta":63,"style":63},"touch ch5_viewer.py\n",[32,109727,109728],{"__ignoreMap":63},[67,109729,109730,109732],{"class":69,"line":70},[67,109731,1126],{"class":110},[67,109733,109734],{"class":114}," ch5_viewer.py\n",[19,109736,109737],{},"离屏 Renderer 保存图片:",[58,109739,109741],{"className":60,"code":109740,"language":62,"meta":63,"style":63},"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",[32,109742,109743,109755,109759,109765,109775,109779,109783,109791,109796,109800,109804,109808,109812,109817,109821,109825,109829,109833,109837,109841,109845,109849,109853,109857,109861,109873,109885,109893,109918,109922,109938,109942,109946,109961,109970,109974,109988,109993,109998,110002,110014,110026,110030,110034,110046],{"__ignoreMap":63},[67,109744,109745,109747,109750,109752],{"class":69,"line":70},[67,109746,32515],{"class":84},[67,109748,109749],{"class":73}," pathlib ",[67,109751,622],{"class":84},[67,109753,109754],{"class":73}," Path\n",[67,109756,109757],{"class":69,"line":191},[67,109758,631],{"emptyLinePlaceholder":630},[67,109760,109761,109763],{"class":69,"line":202},[67,109762,622],{"class":84},[67,109764,638],{"class":73},[67,109766,109767,109769,109771,109773],{"class":69,"line":641},[67,109768,32515],{"class":84},[67,109770,49031],{"class":77},[67,109772,49034],{"class":84},[67,109774,49037],{"class":73},[67,109776,109777],{"class":69,"line":655},[67,109778,631],{"emptyLinePlaceholder":630},[67,109780,109781],{"class":69,"line":660},[67,109782,631],{"emptyLinePlaceholder":630},[67,109784,109785,109787,109789],{"class":69,"line":665},[67,109786,668],{"class":77},[67,109788,671],{"class":84},[67,109790,674],{"class":114},[67,109792,109793],{"class":69,"line":677},[67,109794,109795],{"class":114},"\u003Cmujoco model=\"renderer_demo\">\n",[67,109797,109798],{"class":69,"line":683},[67,109799,103056],{"class":114},[67,109801,109802],{"class":69,"line":689},[67,109803,631],{"emptyLinePlaceholder":630},[67,109805,109806],{"class":69,"line":694},[67,109807,697],{"class":114},[67,109809,109810],{"class":69,"line":700},[67,109811,109525],{"class":114},[67,109813,109814],{"class":69,"line":706},[67,109815,109816],{"class":114},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[67,109818,109819],{"class":69,"line":712},[67,109820,109530],{"class":114},[67,109822,109823],{"class":69,"line":717},[67,109824,631],{"emptyLinePlaceholder":630},[67,109826,109827],{"class":69,"line":723},[67,109828,103078],{"class":114},[67,109830,109831],{"class":69,"line":729},[67,109832,103083],{"class":114},[67,109834,109835],{"class":69,"line":735},[67,109836,109547],{"class":114},[67,109838,109839],{"class":69,"line":741},[67,109840,744],{"class":114},[67,109842,109843],{"class":69,"line":747},[67,109844,750],{"class":114},[67,109846,109847],{"class":69,"line":753},[67,109848,779],{"class":114},[67,109850,109851],{"class":69,"line":758},[67,109852,785],{"class":114},[67,109854,109855],{"class":69,"line":764},[67,109856,631],{"emptyLinePlaceholder":630},[67,109858,109859],{"class":69,"line":770},[67,109860,631],{"emptyLinePlaceholder":630},[67,109862,109863,109865,109867,109869,109871],{"class":69,"line":776},[67,109864,801],{"class":84},[67,109866,804],{"class":110},[67,109868,807],{"class":73},[67,109870,810],{"class":77},[67,109872,813],{"class":73},[67,109874,109875,109877,109879,109881,109883],{"class":69,"line":782},[67,109876,819],{"class":73},[67,109878,85],{"class":84},[67,109880,824],{"class":73},[67,109882,668],{"class":77},[67,109884,829],{"class":73},[67,109886,109887,109889,109891],{"class":69,"line":788},[67,109888,835],{"class":73},[67,109890,85],{"class":84},[67,109892,840],{"class":73},[67,109894,109895,109898,109900,109902,109904,109906,109908,109910,109912,109914,109916],{"class":69,"line":793},[67,109896,109897],{"class":73},"    renderer ",[67,109899,85],{"class":84},[67,109901,109312],{"class":73},[67,109903,26773],{"class":7033},[67,109905,85],{"class":84},[67,109907,44110],{"class":77},[67,109909,1868],{"class":73},[67,109911,26769],{"class":7033},[67,109913,85],{"class":84},[67,109915,109327],{"class":77},[67,109917,829],{"class":73},[67,109919,109920],{"class":69,"line":798},[67,109921,631],{"emptyLinePlaceholder":630},[67,109923,109924,109926,109928,109930,109932,109934,109936],{"class":69,"line":816},[67,109925,935],{"class":84},[67,109927,103212],{"class":73},[67,109929,941],{"class":84},[67,109931,944],{"class":77},[67,109933,854],{"class":73},[67,109935,2302],{"class":77},[67,109937,952],{"class":73},[67,109939,109940],{"class":69,"line":832},[67,109941,1013],{"class":73},[67,109943,109944],{"class":69,"line":843},[67,109945,631],{"emptyLinePlaceholder":630},[67,109947,109948,109951,109954,109956,109959],{"class":69,"line":848},[67,109949,109950],{"class":73},"    renderer.update_scene(data, ",[67,109952,109953],{"class":7033},"camera",[67,109955,85],{"class":84},[67,109957,109958],{"class":114},"\"fixed_camera\"",[67,109960,829],{"class":73},[67,109962,109963,109966,109968],{"class":69,"line":863},[67,109964,109965],{"class":73},"    image ",[67,109967,85],{"class":84},[67,109969,109023],{"class":73},[67,109971,109972],{"class":69,"line":876},[67,109973,631],{"emptyLinePlaceholder":630},[67,109975,109976,109979,109981,109984,109986],{"class":69,"line":889},[67,109977,109978],{"class":73},"    output_path ",[67,109980,85],{"class":84},[67,109982,109983],{"class":73}," Path(",[67,109985,109453],{"class":114},[67,109987,829],{"class":73},[67,109989,109990],{"class":69,"line":894},[67,109991,109992],{"class":73},"    Image.fromarray(image).save(output_path)\n",[67,109994,109995],{"class":69,"line":911},[67,109996,109997],{"class":73},"    renderer.close()\n",[67,109999,110000],{"class":69,"line":927},[67,110001,631],{"emptyLinePlaceholder":630},[67,110003,110004,110006,110008,110011],{"class":69,"line":932},[67,110005,851],{"class":77},[67,110007,854],{"class":73},[67,110009,110010],{"class":114},"\"saved:\"",[67,110012,110013],{"class":73},", output_path.resolve())\n",[67,110015,110016,110018,110020,110023],{"class":69,"line":955},[67,110017,851],{"class":77},[67,110019,854],{"class":73},[67,110021,110022],{"class":114},"\"image shape:\"",[67,110024,110025],{"class":73},", image.shape)\n",[67,110027,110028],{"class":69,"line":971},[67,110029,631],{"emptyLinePlaceholder":630},[67,110031,110032],{"class":69,"line":1010},[67,110033,631],{"emptyLinePlaceholder":630},[67,110035,110036,110038,110040,110042,110044],{"class":69,"line":1016},[67,110037,1096],{"class":84},[67,110039,1099],{"class":77},[67,110041,1102],{"class":84},[67,110043,1105],{"class":114},[67,110045,813],{"class":73},[67,110047,110048],{"class":69,"line":1021},[67,110049,1113],{"class":73},[19,110051,1116],{},[58,110053,110055],{"className":101,"code":110054,"language":103,"meta":63,"style":63},"touch ch5_renderer.py\n",[32,110056,110057],{"__ignoreMap":63},[67,110058,110059,110061],{"class":69,"line":70},[67,110060,1126],{"class":110},[67,110062,110063],{"class":114}," ch5_renderer.py\n",[391,110065,1146],{"id":1146},[19,110067,110068],{},"viewer 上下文：",[58,110070,110072],{"className":60,"code":110071,"language":62,"meta":63,"style":63},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[32,110073,110074],{"__ignoreMap":63},[67,110075,110076,110078,110080,110082],{"class":69,"line":70},[67,110077,109271],{"class":84},[67,110079,109274],{"class":73},[67,110081,649],{"class":84},[67,110083,109279],{"class":73},[19,110085,110086,110088],{},[32,110087,109271],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110090,110091],{},"窗口循环：",[58,110093,110095],{"className":60,"code":110094,"language":62,"meta":63,"style":63},"while viewer.is_running() and data.time \u003C 5.0:\n",[32,110096,110097],{"__ignoreMap":63},[67,110098,110099,110102,110104,110106,110108,110110,110112],{"class":69,"line":70},[67,110100,110101],{"class":84},"while",[67,110103,109625],{"class":73},[67,110105,32241],{"class":84},[67,110107,109630],{"class":73},[67,110109,259],{"class":84},[67,110111,109635],{"class":77},[67,110113,813],{"class":73},[19,110115,110116],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110118,110119],{},"固定相机：",[58,110121,110123],{"className":250,"code":110122,"language":252,"meta":63,"style":63},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[32,110124,110125],{"__ignoreMap":63},[67,110126,110127,110129,110131,110133,110135,110137,110139,110141,110144,110147,110149,110152],{"class":69,"line":70},[67,110128,259],{"class":73},[67,110130,109953],{"class":262},[67,110132,266],{"class":110},[67,110134,85],{"class":73},[67,110136,109958],{"class":114},[67,110138,102842],{"class":110},[67,110140,85],{"class":73},[67,110142,110143],{"class":114},"\"1.5 -2.0 1.2\"",[67,110145,110146],{"class":110}," xyaxes",[67,110148,85],{"class":73},[67,110150,110151],{"class":114},"\"1 0.75 0 0 0 1\"",[67,110153,289],{"class":73},[19,110155,110156],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[391,110158,110160],{"id":110159},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[58,110162,110164],{"className":60,"code":110163,"language":62,"meta":63,"style":63},"import time\n",[32,110165,110166],{"__ignoreMap":63},[67,110167,110168,110170],{"class":69,"line":70},[67,110169,622],{"class":84},[67,110171,33600],{"class":73},[19,110173,110174],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[58,110176,110178],{"className":60,"code":110177,"language":62,"meta":63,"style":63},"import mujoco\nimport mujoco.viewer\n",[32,110179,110180,110186],{"__ignoreMap":63},[67,110181,110182,110184],{"class":69,"line":70},[67,110183,622],{"class":84},[67,110185,638],{"class":73},[67,110187,110188,110190],{"class":69,"line":191},[67,110189,622],{"class":84},[67,110191,108990],{"class":73},[19,110193,110194],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[58,110196,110197],{"className":60,"code":110071,"language":62,"meta":63,"style":63},[32,110198,110199],{"__ignoreMap":63},[67,110200,110201,110203,110205,110207],{"class":69,"line":70},[67,110202,109271],{"class":84},[67,110204,109274],{"class":73},[67,110206,649],{"class":84},[67,110208,109279],{"class":73},[19,110210,110211,110212,110215],{},"打开一个 viewer 窗口。",[32,110213,110214],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[58,110217,110218],{"className":60,"code":110094,"language":62,"meta":63,"style":63},[32,110219,110220],{"__ignoreMap":63},[67,110221,110222,110224,110226,110228,110230,110232,110234],{"class":69,"line":70},[67,110223,110101],{"class":84},[67,110225,109625],{"class":73},[67,110227,32241],{"class":84},[67,110229,109630],{"class":73},[67,110231,259],{"class":84},[67,110233,109635],{"class":77},[67,110235,813],{"class":73},[19,110237,110238,110239,110242],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[32,110240,110241],{},"viewer.is_running()"," 会变成 false，循环结束。",[58,110244,110246],{"className":60,"code":110245,"language":62,"meta":63,"style":63},"step_start = time.time()\n",[32,110247,110248],{"__ignoreMap":63},[67,110249,110250,110253,110255],{"class":69,"line":70},[67,110251,110252],{"class":73},"step_start ",[67,110254,85],{"class":84},[67,110256,109647],{"class":73},[19,110258,110259],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[58,110261,110262],{"className":60,"code":109356,"language":62,"meta":63,"style":63},[32,110263,110264,110268],{"__ignoreMap":63},[67,110265,110266],{"class":69,"line":70},[67,110267,1234],{"class":73},[67,110269,110270],{"class":69,"line":191},[67,110271,109367],{"class":73},[19,110273,110274,110276,110277,110279,110280,110282,110283,110286],{},[32,110275,102948],{}," 推进物理仿真。",[32,110278,109375],{}," 把最新的 ",[32,110281,35170],{}," 同步到窗口里显示。没有 ",[32,110284,110285],{},"sync()","，窗口可能看不到最新状态。",[58,110288,110289],{"className":60,"code":109386,"language":62,"meta":63,"style":63},[32,110290,110291],{"__ignoreMap":63},[67,110292,110293,110295,110297,110299,110301,110303,110305],{"class":69,"line":70},[67,110294,109393],{"class":73},[67,110296,85],{"class":84},[67,110298,109398],{"class":73},[67,110300,1863],{"class":84},[67,110302,109403],{"class":73},[67,110304,1863],{"class":84},[67,110306,109408],{"class":73},[19,110308,110309],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[58,110311,110313],{"className":60,"code":110312,"language":62,"meta":63,"style":63},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[32,110314,110315,110327],{"__ignoreMap":63},[67,110316,110317,110319,110321,110323,110325],{"class":69,"line":70},[67,110318,1096],{"class":84},[67,110320,109685],{"class":73},[67,110322,2948],{"class":84},[67,110324,5913],{"class":77},[67,110326,813],{"class":73},[67,110328,110329],{"class":69,"line":191},[67,110330,110331],{"class":73},"    time.sleep(sleep_time)\n",[19,110333,110334],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[391,110336,110338],{"id":110337},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[58,110340,110342],{"className":60,"code":110341,"language":62,"meta":63,"style":63},"from pathlib import Path\n",[32,110343,110344],{"__ignoreMap":63},[67,110345,110346,110348,110350,110352],{"class":69,"line":70},[67,110347,32515],{"class":84},[67,110349,109749],{"class":73},[67,110351,622],{"class":84},[67,110353,109754],{"class":73},[19,110355,110356,110357,110360,110361,110364],{},"导入 ",[32,110358,110359],{},"Path","，用来处理文件路径。相比直接写字符串，",[32,110362,110363],{},"Path(\"render_output.png\")"," 更清晰。",[58,110366,110368],{"className":60,"code":110367,"language":62,"meta":63,"style":63},"from PIL import Image\n",[32,110369,110370],{"__ignoreMap":63},[67,110371,110372,110374,110376,110378],{"class":69,"line":70},[67,110373,32515],{"class":84},[67,110375,49031],{"class":77},[67,110377,49034],{"class":84},[67,110379,49037],{"class":73},[19,110381,110382],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[58,110384,110385],{"className":250,"code":110122,"language":252,"meta":63,"style":63},[32,110386,110387],{"__ignoreMap":63},[67,110388,110389,110391,110393,110395,110397,110399,110401,110403,110405,110407,110409,110411],{"class":69,"line":70},[67,110390,259],{"class":73},[67,110392,109953],{"class":262},[67,110394,266],{"class":110},[67,110396,85],{"class":73},[67,110398,109958],{"class":114},[67,110400,102842],{"class":110},[67,110402,85],{"class":73},[67,110404,110143],{"class":114},[67,110406,110146],{"class":110},[67,110408,85],{"class":73},[67,110410,110151],{"class":114},[67,110412,289],{"class":73},[19,110414,110415,110416,110418,110419,110421,110422,110425,110426,110428],{},"定义一个相机。",[32,110417,81570],{}," 是相机名字。",[32,110420,105820],{}," 是相机在世界里的位置。",[32,110423,110424],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[32,110427,105820],{}," 来调视角。",[58,110430,110432],{"className":60,"code":110431,"language":62,"meta":63,"style":63},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[32,110433,110434],{"__ignoreMap":63},[67,110435,110436,110438,110440,110442,110444,110446,110448,110450,110452,110454,110456],{"class":69,"line":70},[67,110437,109008],{"class":73},[67,110439,85],{"class":84},[67,110441,109312],{"class":73},[67,110443,26773],{"class":7033},[67,110445,85],{"class":84},[67,110447,44110],{"class":77},[67,110449,1868],{"class":73},[67,110451,26769],{"class":7033},[67,110453,85],{"class":84},[67,110455,109327],{"class":77},[67,110457,829],{"class":73},[19,110459,110460,110461,1264,110463,110465],{},"创建离屏渲染器。",[32,110462,26773],{},[32,110464,26769],{}," 决定输出图片大小。",[58,110467,110468],{"className":60,"code":103381,"language":62,"meta":63,"style":63},[32,110469,110470,110486],{"__ignoreMap":63},[67,110471,110472,110474,110476,110478,110480,110482,110484],{"class":69,"line":70},[67,110473,1512],{"class":84},[67,110475,103212],{"class":73},[67,110477,941],{"class":84},[67,110479,944],{"class":77},[67,110481,854],{"class":73},[67,110483,2302],{"class":77},[67,110485,952],{"class":73},[67,110487,110488],{"class":69,"line":191},[67,110489,103404],{"class":73},[19,110491,110492],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[58,110494,110496],{"className":60,"code":110495,"language":62,"meta":63,"style":63},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[32,110497,110498],{"__ignoreMap":63},[67,110499,110500,110503,110505,110507,110509],{"class":69,"line":70},[67,110501,110502],{"class":73},"renderer.update_scene(data, ",[67,110504,109953],{"class":7033},[67,110506,85],{"class":84},[67,110508,109958],{"class":114},[67,110510,829],{"class":73},[19,110512,110513,110514,110516,110517,110520],{},"告诉 renderer：用当前 ",[32,110515,35170],{}," 的状态更新画面，并使用名为 ",[32,110518,110519],{},"fixed_camera"," 的相机视角。",[58,110522,110523],{"className":60,"code":109418,"language":62,"meta":63,"style":63},[32,110524,110525],{"__ignoreMap":63},[67,110526,110527,110529,110531],{"class":69,"line":70},[67,110528,109018],{"class":73},[67,110530,85],{"class":84},[67,110532,109023],{"class":73},[19,110534,110535,110536,110539],{},"真正渲染出图像。",[32,110537,110538],{},"image"," 是一个 NumPy 数组，不是文件。",[58,110541,110543],{"className":60,"code":110542,"language":62,"meta":63,"style":63},"Image.fromarray(image).save(output_path)\n",[32,110544,110545],{"__ignoreMap":63},[67,110546,110547],{"class":69,"line":70},[67,110548,110542],{"class":73},[19,110550,110551,110552,230],{},"把数组转换成图片，并保存到 ",[32,110553,110554],{},"render_output.png",[58,110556,110558],{"className":60,"code":110557,"language":62,"meta":63,"style":63},"renderer.close()\n",[32,110559,110560],{"__ignoreMap":63},[67,110561,110562],{"class":69,"line":70},[67,110563,110557],{"class":73},[19,110565,110566],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110568,1647],{"id":1646},[19,110570,110571,110572,110574,110575,230],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[32,110573,110554],{},"，并输出图像数组形状，例如 ",[32,110576,110577],{},"(480, 640, 3)",[19,110579,110580],{},"如果图片里看不到方块，先检查：",[26,110582,110583,110586,110589],{},[29,110584,110585],{},"方块是否掉到相机视野外。",[29,110587,110588],{},"camera 位置是否合理。",[29,110590,110591,110592,110595],{},"是否在 ",[32,110593,110594],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110597,1696],{"id":1695},[19,110599,110600],{},"运行 viewer:",[58,110602,110604],{"className":101,"code":110603,"language":103,"meta":63,"style":63},"python ch5_viewer.py\n",[32,110605,110606],{"__ignoreMap":63},[67,110607,110608,110610],{"class":69,"line":70},[67,110609,62],{"class":110},[67,110611,109734],{"class":114},[19,110613,110614],{},"运行 renderer:",[58,110616,110618],{"className":101,"code":110617,"language":103,"meta":63,"style":63},"python ch5_renderer.py\n",[32,110619,110620],{"__ignoreMap":63},[67,110621,110622,110624],{"class":69,"line":70},[67,110623,62],{"class":110},[67,110625,110063],{"class":114},[19,110627,110628],{},"如果在服务器上运行:",[58,110630,110632],{"className":101,"code":110631,"language":103,"meta":63,"style":63},"MUJOCO_GL=egl python ch5_renderer.py\n",[32,110633,110634],{"__ignoreMap":63},[67,110635,110636,110638,110640,110642,110645],{"class":69,"line":70},[67,110637,109252],{"class":73},[67,110639,85],{"class":84},[67,110641,109242],{"class":114},[67,110643,110644],{"class":110}," python",[67,110646,110063],{"class":114},[19,110648,109220],{},[58,110650,110652],{"className":101,"code":110651,"language":103,"meta":63,"style":63},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[32,110653,110654],{"__ignoreMap":63},[67,110655,110656,110658,110660,110662,110664],{"class":69,"line":70},[67,110657,109252],{"class":73},[67,110659,85],{"class":84},[67,110661,109246],{"class":114},[67,110663,110644],{"class":110},[67,110665,110063],{"class":114},[19,110667,110668],{},"再做几个练习：",[26,110670,110671,110678,110681,110687],{},[29,110672,110673,110674,110677],{},"把 renderer 分辨率改成 ",[32,110675,110676],{},"height=240, width=320","，观察输出 shape。",[29,110679,110680],{},"把方块颜色改成蓝色，重新保存图片。",[29,110682,110683,110684,110686],{},"把相机 ",[32,110685,105820],{}," 改远一点，观察画面中物体是否变小。",[29,110688,110689,110690,1704,110693,110696],{},"把 viewer 示例中的 ",[32,110691,110692],{},"data.time \u003C 5.0",[32,110694,110695],{},"data.time \u003C 20.0","，观察更长时间。",[14,110698,1748],{"id":1747},[391,110700,110702],{"id":110701},"viewer-窗口打不开","viewer 窗口打不开",[19,110704,110705],{},"安装:",[58,110707,110709],{"className":101,"code":110708,"language":103,"meta":63,"style":63},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[32,110710,110711],{"__ignoreMap":63},[67,110712,110713,110715,110717,110719,110721,110723,110725,110727,110729,110731,110733],{"class":69,"line":70},[67,110714,111],{"class":110},[67,110716,115],{"class":114},[67,110718,118],{"class":114},[67,110720,121],{"class":77},[67,110722,104198],{"class":114},[67,110724,102583],{"class":114},[67,110726,104203],{"class":114},[67,110728,102596],{"class":114},[67,110730,102602],{"class":114},[67,110732,102593],{"class":114},[67,110734,110735],{"class":114}," libXinerama\n",[391,110737,110739],{"id":110738},"glfwerror",[32,110740,110741],{},"GLFWError",[19,110743,110744],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[391,110746,110748],{"id":110747},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110750,110751,110752,84298,110754,110756],{},"尝试 ",[32,110753,102777],{},[32,110755,102780],{},"。可能存在版本差异。",[391,110758,110759],{"id":110759},"保存图片是黑的",[19,110761,1804],{},[26,110763,110764,110767,110770,110780],{},[29,110765,110766],{},"XML 里是否有 light。",[29,110768,110769],{},"相机是否对着模型。",[29,110771,110772,110773,110776,110777,230],{},"是否先 ",[32,110774,110775],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[32,110778,110779],{},"renderer.render()",[29,110781,110782],{},"物体是否已经掉出视野。",[391,110784,110785],{"id":110785},"远程服务器没有显示器",[19,110787,110788],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[58,110790,110791],{"className":101,"code":110631,"language":103,"meta":63,"style":63},[32,110792,110793],{"__ignoreMap":63},[67,110794,110795,110797,110799,110801,110803],{"class":69,"line":70},[67,110796,109252],{"class":73},[67,110798,85],{"class":84},[67,110800,109242],{"class":114},[67,110802,110644],{"class":110},[67,110804,110063],{"class":114},[19,110806,110807],{},"如果 EGL 不可用，再尝试：",[58,110809,110810],{"className":101,"code":110651,"language":103,"meta":63,"style":63},[32,110811,110812],{"__ignoreMap":63},[67,110813,110814,110816,110818,110820,110822],{"class":69,"line":70},[67,110815,109252],{"class":73},[67,110817,85],{"class":84},[67,110819,109246],{"class":114},[67,110821,110644],{"class":110},[67,110823,110063],{"class":114},[14,110825,1889],{"id":1888},[19,110827,110828],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[26,110830,110831,110834,110837],{},[29,110832,110833],{},"先用 viewer 看模型和控制是否正常。",[29,110835,110836],{},"再用 renderer 保存图片或构造视觉观测。",[29,110838,110839],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1903,110841,110842],{},"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":63,"searchDepth":191,"depth":191,"links":110844},[110845,110846,110847,110852,110857,110858,110859,110866],{"id":16,"depth":191,"text":17},{"id":94,"depth":191,"text":95},{"id":243,"depth":191,"text":244,"children":110848},[110849,110850,110851],{"id":109349,"depth":202,"text":109350},{"id":109379,"depth":202,"text":109380},{"id":109414,"depth":202,"text":109415},{"id":611,"depth":191,"text":612,"children":110853},[110854,110855,110856],{"id":1146,"depth":202,"text":1146},{"id":110159,"depth":202,"text":110160},{"id":110337,"depth":202,"text":110338},{"id":1646,"depth":191,"text":1647},{"id":1695,"depth":191,"text":1696},{"id":1747,"depth":191,"text":1748,"children":110860},[110861,110862,110863,110864,110865],{"id":110701,"depth":202,"text":110702},{"id":110738,"depth":202,"text":110741},{"id":110747,"depth":202,"text":110748},{"id":110759,"depth":202,"text":110759},{"id":110785,"depth":202,"text":110785},{"id":1888,"depth":191,"text":1889},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108957,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110873,"title":110874,"body":110875,"description":63,"extension":1930,"meta":112786,"navigation":630,"path":112787,"seo":112788,"stem":112789,"__hash__":112790},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110876,"toc":112762},[110877,110880,110882,110885,110887,110906,110909,110915,110918,110920,110922,110946,110948,110962,110964,111005,111007,111018,111020,111023,111029,111032,111066,111069,111101,111104,111136,111140,111143,111183,111186,111192,111195,111201,111205,111208,111214,111217,111221,111224,111264,111266,111279,111282,111284,111866,111868,111880,111883,111894,111896,111899,111918,111930,111933,111954,111957,111960,112003,112006,112009,112029,112036,112038,112056,112071,112074,112080,112083,112089,112106,112113,112144,112155,112189,112200,112217,112226,112234,112239,112253,112256,112277,112283,112297,112302,112332,112342,112367,112375,112398,112401,112417,112420,112428,112434,112456,112469,112490,112499,112538,112549,112551,112554,112560,112563,112566,112572,112575,112595,112598,112600,112639,112641,112644,112652,112655,112658,112685,112688,112698,112704,112707,112713,112715,112721,112725,112728,112730,112733,112757,112760],[10,110878,110874],{"id":110879},"_6控制任务cartpole",[14,110881,17],{"id":16},[19,110883,110884],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110886,24],{},[26,110888,110889,110892,110894,110897,110900,110903],{},[29,110890,110891],{},"slide joint",[29,110893,454],{},[29,110895,110896],{},"cart force actuator",[29,110898,110899],{},"状态观测",[29,110901,110902],{},"简单控制循环",[29,110904,110905],{},"reward 设计雏形",[19,110907,110908],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[58,110910,110913],{"className":110911,"code":110912,"language":603,"meta":63},[601],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[32,110914,110912],{"__ignoreMap":63},[19,110916,110917],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110919,95],{"id":94},[19,110921,98],{},[58,110923,110924],{"className":101,"code":102,"language":103,"meta":63,"style":63},[32,110925,110926],{"__ignoreMap":63},[67,110927,110928,110930,110932,110934,110936,110938,110940,110942,110944],{"class":69,"line":70},[67,110929,111],{"class":110},[67,110931,115],{"class":114},[67,110933,118],{"class":114},[67,110935,121],{"class":77},[67,110937,124],{"class":114},[67,110939,127],{"class":114},[67,110941,130],{"class":114},[67,110943,133],{"class":114},[67,110945,136],{"class":114},[19,110947,139],{},[58,110949,110950],{"className":101,"code":142,"language":103,"meta":63,"style":63},[32,110951,110952],{"__ignoreMap":63},[67,110953,110954,110956,110958,110960],{"class":69,"line":70},[67,110955,149],{"class":110},[67,110957,118],{"class":114},[67,110959,154],{"class":114},[67,110961,157],{"class":114},[19,110963,160],{},[58,110965,110967],{"className":101,"code":110966,"language":103,"meta":63,"style":63},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[32,110968,110969,110986,110995],{"__ignoreMap":63},[67,110970,110971,110973,110975,110977,110980,110982,110984],{"class":69,"line":70},[67,110972,170],{"class":110},[67,110974,173],{"class":114},[67,110976,176],{"class":77},[67,110978,110979],{"class":114}," mujoco-cartpole",[67,110981,182],{"class":114},[67,110983,185],{"class":77},[67,110985,188],{"class":77},[67,110987,110988,110990,110992],{"class":69,"line":191},[67,110989,170],{"class":110},[67,110991,196],{"class":114},[67,110993,110994],{"class":114}," mujoco-cartpole\n",[67,110996,110997,110999,111001,111003],{"class":69,"line":202},[67,110998,149],{"class":110},[67,111000,118],{"class":114},[67,111002,154],{"class":114},[67,111004,157],{"class":114},[19,111006,213],{},[26,111008,111009,111012,111015],{},[29,111010,111011],{},"本章不依赖 Gymnasium。",[29,111013,111014],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[29,111016,111017],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111019,244],{"id":243},[19,111021,111022],{},"Cartpole 的模型结构:",[58,111024,111027],{"className":111025,"code":111026,"language":603,"meta":63},[601],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[32,111028,111026],{"__ignoreMap":63},[19,111030,111031],{},"小车通过 slide joint 左右移动:",[58,111033,111035],{"className":250,"code":111034,"language":252,"meta":63,"style":63},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[32,111036,111037],{"__ignoreMap":63},[67,111038,111039,111041,111043,111045,111047,111050,111052,111054,111057,111059,111061,111064],{"class":69,"line":70},[67,111040,259],{"class":73},[67,111042,263],{"class":262},[67,111044,266],{"class":110},[67,111046,85],{"class":73},[67,111048,111049],{"class":114},"\"cart_x\"",[67,111051,274],{"class":110},[67,111053,85],{"class":73},[67,111055,111056],{"class":114},"\"slide\"",[67,111058,281],{"class":110},[67,111060,85],{"class":73},[67,111062,111063],{"class":114},"\"1 0 0\"",[67,111065,289],{"class":73},[19,111067,111068],{},"杆子通过 hinge joint 旋转:",[58,111070,111072],{"className":250,"code":111071,"language":252,"meta":63,"style":63},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[32,111073,111074],{"__ignoreMap":63},[67,111075,111076,111078,111080,111082,111084,111087,111089,111091,111093,111095,111097,111099],{"class":69,"line":70},[67,111077,259],{"class":73},[67,111079,263],{"class":262},[67,111081,266],{"class":110},[67,111083,85],{"class":73},[67,111085,111086],{"class":114},"\"pole_hinge\"",[67,111088,274],{"class":110},[67,111090,85],{"class":73},[67,111092,271],{"class":114},[67,111094,281],{"class":110},[67,111096,85],{"class":73},[67,111098,286],{"class":114},[67,111100,289],{"class":73},[19,111102,111103],{},"控制力作用在小车 slide joint 上:",[58,111105,111107],{"className":250,"code":111106,"language":252,"meta":63,"style":63},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[32,111108,111109],{"__ignoreMap":63},[67,111110,111111,111113,111115,111117,111119,111122,111124,111126,111128,111130,111132,111134],{"class":69,"line":70},[67,111112,259],{"class":73},[67,111114,331],{"class":262},[67,111116,266],{"class":110},[67,111118,85],{"class":73},[67,111120,111121],{"class":114},"\"cart_motor\"",[67,111123,341],{"class":110},[67,111125,85],{"class":73},[67,111127,111049],{"class":114},[67,111129,348],{"class":110},[67,111131,85],{"class":73},[67,111133,56077],{"class":114},[67,111135,289],{"class":73},[391,111137,111139],{"id":111138},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111141,111142],{},"这个简化模型有两个关节：",[399,111144,111145,111156],{},[402,111146,111147],{},[405,111148,111149,111151,111153],{},[408,111150,104447],{"align":410},[408,111152,25533],{"align":410},[408,111154,111155],{"align":410},"对应状态",[419,111157,111158,111171],{},[405,111159,111160,111165,111168],{},[424,111161,111162],{"align":410},[32,111163,111164],{},"cart_x",[424,111166,111167],{"align":410},"slide",[424,111169,111170],{"align":410},"小车 x 位置",[405,111172,111173,111178,111180],{},[424,111174,111175],{"align":410},[32,111176,111177],{},"pole_hinge",[424,111179,34],{"align":410},[424,111181,111182],{"align":410},"杆子角度",[19,111184,111185],{},"所以：",[58,111187,111190],{"className":111188,"code":111189,"language":603,"meta":63},[601],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[32,111191,111189],{"__ignoreMap":63},[19,111193,111194],{},"把它们拼起来就是观测：",[58,111196,111199],{"className":111197,"code":111198,"language":603,"meta":63},[601],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[32,111200,111198],{"__ignoreMap":63},[391,111202,111204],{"id":111203},"action-是什么","action 是什么",[19,111206,111207],{},"本章只有一个 actuator：",[58,111209,111212],{"className":111210,"code":111211,"language":603,"meta":63},[601],"data.ctrl[0] = action\n",[32,111213,111211],{"__ignoreMap":63},[19,111215,111216],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[391,111218,111220],{"id":111219},"reward-是什么","reward 是什么",[19,111222,111223],{},"奖励函数：",[58,111225,111227],{"className":60,"code":111226,"language":62,"meta":63,"style":63},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[32,111228,111229],{"__ignoreMap":63},[67,111230,111231,111233,111236,111238,111240,111242,111245,111247,111250,111252,111254,111256,111259,111261],{"class":69,"line":70},[67,111232,18843],{"class":84},[67,111234,111235],{"class":77}," float",[67,111237,854],{"class":73},[67,111239,104100],{"class":77},[67,111241,54035],{"class":84},[67,111243,111244],{"class":77}," 0.1",[67,111246,986],{"class":84},[67,111248,111249],{"class":73}," cart_x ",[67,111251,965],{"class":84},[67,111253,111249],{"class":73},[67,111255,1863],{"class":84},[67,111257,111258],{"class":73}," pole_angle ",[67,111260,965],{"class":84},[67,111262,111263],{"class":73}," pole_angle)\n",[19,111265,496],{},[26,111267,111268,111273,111276],{},[29,111269,111270,111271,230],{},"基础奖励是 ",[32,111272,104100],{},[29,111274,111275],{},"小车离中心越远，扣分越多。",[29,111277,111278],{},"杆子角度越大，扣分越多。",[19,111280,111281],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111283,612],{"id":611},[58,111285,111287],{"className":60,"code":111286,"language":62,"meta":63,"style":63},"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",[32,111288,111289,111295,111305,111309,111313,111321,111326,111330,111334,111338,111343,111347,111352,111357,111362,111366,111371,111376,111381,111385,111389,111393,111397,111401,111406,111410,111414,111418,111422,111426,111436,111443,111447,111451,111465,111479,111492,111522,111526,111530,111542,111554,111562,111566,111579,111583,111587,111596,111600,111616,111626,111639,111652,111656,111679,111697,111701,111713,111717,111721,111731,111741,111745,111761,111802,111806,111826,111842,111846,111850,111862],{"__ignoreMap":63},[67,111290,111291,111293],{"class":69,"line":70},[67,111292,622],{"class":84},[67,111294,638],{"class":73},[67,111296,111297,111299,111301,111303],{"class":69,"line":191},[67,111298,622],{"class":84},[67,111300,646],{"class":73},[67,111302,649],{"class":84},[67,111304,652],{"class":73},[67,111306,111307],{"class":69,"line":202},[67,111308,631],{"emptyLinePlaceholder":630},[67,111310,111311],{"class":69,"line":641},[67,111312,631],{"emptyLinePlaceholder":630},[67,111314,111315,111317,111319],{"class":69,"line":655},[67,111316,668],{"class":77},[67,111318,671],{"class":84},[67,111320,674],{"class":114},[67,111322,111323],{"class":69,"line":660},[67,111324,111325],{"class":114},"\u003Cmujoco model=\"cartpole\">\n",[67,111327,111328],{"class":69,"line":665},[67,111329,103056],{"class":114},[67,111331,111332],{"class":69,"line":677},[67,111333,631],{"emptyLinePlaceholder":630},[67,111335,111336],{"class":69,"line":683},[67,111337,697],{"class":114},[67,111339,111340],{"class":69,"line":689},[67,111341,111342],{"class":114},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[67,111344,111345],{"class":69,"line":694},[67,111346,631],{"emptyLinePlaceholder":630},[67,111348,111349],{"class":69,"line":700},[67,111350,111351],{"class":114},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[67,111353,111354],{"class":69,"line":706},[67,111355,111356],{"class":114},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[67,111358,111359],{"class":69,"line":712},[67,111360,111361],{"class":114},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[67,111363,111364],{"class":69,"line":717},[67,111365,631],{"emptyLinePlaceholder":630},[67,111367,111368],{"class":69,"line":723},[67,111369,111370],{"class":114},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[67,111372,111373],{"class":69,"line":729},[67,111374,111375],{"class":114},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[67,111377,111378],{"class":69,"line":735},[67,111379,111380],{"class":114},"        \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",[67,111382,111383],{"class":69,"line":741},[67,111384,738],{"class":114},[67,111386,111387],{"class":69,"line":747},[67,111388,744],{"class":114},[67,111390,111391],{"class":69,"line":753},[67,111392,750],{"class":114},[67,111394,111395],{"class":69,"line":758},[67,111396,631],{"emptyLinePlaceholder":630},[67,111398,111399],{"class":69,"line":764},[67,111400,761],{"class":114},[67,111402,111403],{"class":69,"line":770},[67,111404,111405],{"class":114},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[67,111407,111408],{"class":69,"line":776},[67,111409,773],{"class":114},[67,111411,111412],{"class":69,"line":782},[67,111413,779],{"class":114},[67,111415,111416],{"class":69,"line":788},[67,111417,785],{"class":114},[67,111419,111420],{"class":69,"line":793},[67,111421,631],{"emptyLinePlaceholder":630},[67,111423,111424],{"class":69,"line":798},[67,111425,631],{"emptyLinePlaceholder":630},[67,111427,111428,111430,111433],{"class":69,"line":816},[67,111429,801],{"class":84},[67,111431,111432],{"class":110}," get_observation",[67,111434,111435],{"class":73},"(data: mujoco.MjData) -> np.ndarray:\n",[67,111437,111438,111440],{"class":69,"line":832},[67,111439,5910],{"class":84},[67,111441,111442],{"class":73}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[67,111444,111445],{"class":69,"line":843},[67,111446,631],{"emptyLinePlaceholder":630},[67,111448,111449],{"class":69,"line":848},[67,111450,631],{"emptyLinePlaceholder":630},[67,111452,111453,111455,111458,111461,111463],{"class":69,"line":863},[67,111454,801],{"class":84},[67,111456,111457],{"class":110}," compute_reward",[67,111459,111460],{"class":73},"(obs: np.ndarray) -> ",[67,111462,2041],{"class":77},[67,111464,813],{"class":73},[67,111466,111467,111470,111472,111475,111477],{"class":69,"line":876},[67,111468,111469],{"class":73},"    cart_x ",[67,111471,85],{"class":84},[67,111473,111474],{"class":73}," obs[",[67,111476,78],{"class":77},[67,111478,35015],{"class":73},[67,111480,111481,111484,111486,111488,111490],{"class":69,"line":889},[67,111482,111483],{"class":73},"    pole_angle ",[67,111485,85],{"class":84},[67,111487,111474],{"class":73},[67,111489,2209],{"class":77},[67,111491,35015],{"class":73},[67,111493,111494,111496,111498,111500,111502,111504,111506,111508,111510,111512,111514,111516,111518,111520],{"class":69,"line":894},[67,111495,5910],{"class":84},[67,111497,111235],{"class":77},[67,111499,854],{"class":73},[67,111501,104100],{"class":77},[67,111503,54035],{"class":84},[67,111505,111244],{"class":77},[67,111507,986],{"class":84},[67,111509,111249],{"class":73},[67,111511,965],{"class":84},[67,111513,111249],{"class":73},[67,111515,1863],{"class":84},[67,111517,111258],{"class":73},[67,111519,965],{"class":84},[67,111521,111263],{"class":73},[67,111523,111524],{"class":69,"line":911},[67,111525,631],{"emptyLinePlaceholder":630},[67,111527,111528],{"class":69,"line":927},[67,111529,631],{"emptyLinePlaceholder":630},[67,111531,111532,111534,111536,111538,111540],{"class":69,"line":932},[67,111533,801],{"class":84},[67,111535,804],{"class":110},[67,111537,807],{"class":73},[67,111539,810],{"class":77},[67,111541,813],{"class":73},[67,111543,111544,111546,111548,111550,111552],{"class":69,"line":955},[67,111545,819],{"class":73},[67,111547,85],{"class":84},[67,111549,824],{"class":73},[67,111551,668],{"class":77},[67,111553,829],{"class":73},[67,111555,111556,111558,111560],{"class":69,"line":971},[67,111557,835],{"class":73},[67,111559,85],{"class":84},[67,111561,840],{"class":73},[67,111563,111564],{"class":69,"line":1010},[67,111565,631],{"emptyLinePlaceholder":630},[67,111567,111568,111570,111572,111574,111576],{"class":69,"line":1016},[67,111569,106736],{"class":73},[67,111571,2209],{"class":77},[67,111573,81],{"class":73},[67,111575,85],{"class":84},[67,111577,111578],{"class":77}," 0.1\n",[67,111580,111581],{"class":69,"line":1021},[67,111582,106749],{"class":73},[67,111584,111585],{"class":69,"line":1034},[67,111586,631],{"emptyLinePlaceholder":630},[67,111588,111589,111592,111594],{"class":69,"line":1053},[67,111590,111591],{"class":73},"    total_reward ",[67,111593,85],{"class":84},[67,111595,106430],{"class":77},[67,111597,111598],{"class":69,"line":1070},[67,111599,631],{"emptyLinePlaceholder":630},[67,111601,111602,111604,111606,111608,111610,111612,111614],{"class":69,"line":1083},[67,111603,935],{"class":84},[67,111605,938],{"class":73},[67,111607,941],{"class":84},[67,111609,944],{"class":77},[67,111611,854],{"class":73},[67,111613,8227],{"class":77},[67,111615,952],{"class":73},[67,111617,111618,111621,111623],{"class":69,"line":1088},[67,111619,111620],{"class":73},"        obs ",[67,111622,85],{"class":84},[67,111624,111625],{"class":73}," get_observation(data)\n",[67,111627,111628,111631,111633,111635,111637],{"class":69,"line":1093},[67,111629,111630],{"class":73},"        pole_angle ",[67,111632,85],{"class":84},[67,111634,111474],{"class":73},[67,111636,2209],{"class":77},[67,111638,35015],{"class":73},[67,111640,111641,111644,111646,111648,111650],{"class":69,"line":1110},[67,111642,111643],{"class":73},"        pole_angular_velocity ",[67,111645,85],{"class":84},[67,111647,111474],{"class":73},[67,111649,2071],{"class":77},[67,111651,35015],{"class":73},[67,111653,111654],{"class":69,"line":11603},[67,111655,631],{"emptyLinePlaceholder":630},[67,111657,111658,111661,111663,111666,111668,111670,111672,111674,111676],{"class":69,"line":11612},[67,111659,111660],{"class":73},"        action ",[67,111662,85],{"class":84},[67,111664,111665],{"class":77}," 2.0",[67,111667,986],{"class":84},[67,111669,111258],{"class":73},[67,111671,2471],{"class":84},[67,111673,1002],{"class":77},[67,111675,986],{"class":84},[67,111677,111678],{"class":73}," pole_angular_velocity\n",[67,111680,111681,111683,111685,111687,111689,111691,111693,111695],{"class":69,"line":11617},[67,111682,111660],{"class":73},[67,111684,85],{"class":84},[67,111686,1860],{"class":73},[67,111688,1863],{"class":84},[67,111690,104100],{"class":77},[67,111692,1868],{"class":73},[67,111694,104100],{"class":77},[67,111696,829],{"class":73},[67,111698,111699],{"class":69,"line":11623},[67,111700,631],{"emptyLinePlaceholder":630},[67,111702,111703,111705,111707,111709,111711],{"class":69,"line":11644},[67,111704,974],{"class":73},[67,111706,78],{"class":77},[67,111708,81],{"class":73},[67,111710,85],{"class":84},[67,111712,1885],{"class":73},[67,111714,111715],{"class":69,"line":11650},[67,111716,1013],{"class":73},[67,111718,111719],{"class":69,"line":11664},[67,111720,631],{"emptyLinePlaceholder":630},[67,111722,111723,111726,111728],{"class":69,"line":11670},[67,111724,111725],{"class":73},"        reward ",[67,111727,85],{"class":84},[67,111729,111730],{"class":73}," compute_reward(get_observation(data))\n",[67,111732,111733,111736,111738],{"class":69,"line":11697},[67,111734,111735],{"class":73},"        total_reward ",[67,111737,11283],{"class":84},[67,111739,111740],{"class":73}," reward\n",[67,111742,111743],{"class":69,"line":11706},[67,111744,631],{"emptyLinePlaceholder":630},[67,111746,111747,111749,111751,111753,111755,111757,111759],{"class":69,"line":11712},[67,111748,4329],{"class":84},[67,111750,938],{"class":73},[67,111752,2319],{"class":84},[67,111754,7571],{"class":77},[67,111756,1102],{"class":84},[67,111758,5913],{"class":77},[67,111760,813],{"class":73},[67,111762,111763,111765,111767,111770,111773,111776,111779,111781,111784,111787,111789,111791,111793,111795,111798,111800],{"class":69,"line":11720},[67,111764,36419],{"class":77},[67,111766,854],{"class":73},[67,111768,111769],{"class":114},"\"step:\"",[67,111771,111772],{"class":73},", step, ",[67,111774,111775],{"class":114},"\"obs:\"",[67,111777,111778],{"class":73},", np.round(obs, ",[67,111780,2071],{"class":77},[67,111782,111783],{"class":73},"), ",[67,111785,111786],{"class":114},"\"action:\"",[67,111788,1868],{"class":73},[67,111790,33788],{"class":77},[67,111792,854],{"class":73},[67,111794,2041],{"class":77},[67,111796,111797],{"class":73},"(action), ",[67,111799,2071],{"class":77},[67,111801,1050],{"class":73},[67,111803,111804],{"class":69,"line":11725},[67,111805,631],{"emptyLinePlaceholder":630},[67,111807,111808,111810,111812,111815,111817,111819,111822,111824],{"class":69,"line":18401},[67,111809,851],{"class":77},[67,111811,854],{"class":73},[67,111813,111814],{"class":114},"\"total_reward:\"",[67,111816,1868],{"class":73},[67,111818,33788],{"class":77},[67,111820,111821],{"class":73},"(total_reward, ",[67,111823,2071],{"class":77},[67,111825,1050],{"class":73},[67,111827,111828,111830,111832,111835,111838,111840],{"class":69,"line":18407},[67,111829,851],{"class":77},[67,111831,854],{"class":73},[67,111833,111834],{"class":114},"\"final obs:\"",[67,111836,111837],{"class":73},", np.round(get_observation(data), ",[67,111839,2071],{"class":77},[67,111841,1050],{"class":73},[67,111843,111844],{"class":69,"line":18430},[67,111845,631],{"emptyLinePlaceholder":630},[67,111847,111848],{"class":69,"line":18436},[67,111849,631],{"emptyLinePlaceholder":630},[67,111851,111852,111854,111856,111858,111860],{"class":69,"line":18459},[67,111853,1096],{"class":84},[67,111855,1099],{"class":77},[67,111857,1102],{"class":84},[67,111859,1105],{"class":114},[67,111861,813],{"class":73},[67,111863,111864],{"class":69,"line":18473},[67,111865,1113],{"class":73},[19,111867,1116],{},[58,111869,111871],{"className":101,"code":111870,"language":103,"meta":63,"style":63},"touch ch6_cartpole.py\n",[32,111872,111873],{"__ignoreMap":63},[67,111874,111875,111877],{"class":69,"line":70},[67,111876,1126],{"class":110},[67,111878,111879],{"class":114}," ch6_cartpole.py\n",[19,111881,111882],{},"运行：",[58,111884,111886],{"className":101,"code":111885,"language":103,"meta":63,"style":63},"python ch6_cartpole.py\n",[32,111887,111888],{"__ignoreMap":63},[67,111889,111890,111892],{"class":69,"line":70},[67,111891,62],{"class":110},[67,111893,111879],{"class":114},[391,111895,1146],{"id":1146},[19,111897,111898],{},"构造观测：",[58,111900,111902],{"className":60,"code":111901,"language":62,"meta":63,"style":63},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[32,111903,111904,111912],{"__ignoreMap":63},[67,111905,111906,111908,111910],{"class":69,"line":70},[67,111907,801],{"class":84},[67,111909,111432],{"class":110},[67,111911,111435],{"class":73},[67,111913,111914,111916],{"class":69,"line":191},[67,111915,5910],{"class":84},[67,111917,111442],{"class":73},[19,111919,111920,111923,111924,111926,111927,111929],{},[32,111921,111922],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[32,111925,1687],{}," 2 维，",[32,111928,106033],{}," 2 维，所以 obs 是 4 维。",[19,111931,111932],{},"设置初始角度：",[58,111934,111936],{"className":60,"code":111935,"language":62,"meta":63,"style":63},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[32,111937,111938,111950],{"__ignoreMap":63},[67,111939,111940,111942,111944,111946,111948],{"class":69,"line":70},[67,111941,106368],{"class":73},[67,111943,2209],{"class":77},[67,111945,81],{"class":73},[67,111947,85],{"class":84},[67,111949,111578],{"class":77},[67,111951,111952],{"class":69,"line":191},[67,111953,106212],{"class":73},[19,111955,111956],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111958,111959],{},"简单反馈控制：",[58,111961,111963],{"className":60,"code":111962,"language":62,"meta":63,"style":63},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[32,111964,111965,111985],{"__ignoreMap":63},[67,111966,111967,111969,111971,111973,111975,111977,111979,111981,111983],{"class":69,"line":70},[67,111968,1855],{"class":73},[67,111970,85],{"class":84},[67,111972,111665],{"class":77},[67,111974,986],{"class":84},[67,111976,111258],{"class":73},[67,111978,2471],{"class":84},[67,111980,1002],{"class":77},[67,111982,986],{"class":84},[67,111984,111678],{"class":73},[67,111986,111987,111989,111991,111993,111995,111997,111999,112001],{"class":69,"line":191},[67,111988,1855],{"class":73},[67,111990,85],{"class":84},[67,111992,1860],{"class":73},[67,111994,1863],{"class":84},[67,111996,104100],{"class":77},[67,111998,1868],{"class":73},[67,112000,104100],{"class":77},[67,112002,829],{"class":73},[19,112004,112005],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112007,112008],{},"限制动作：",[58,112010,112012],{"className":60,"code":112011,"language":62,"meta":63,"style":63},"np.clip(action, -1.0, 1.0)\n",[32,112013,112014],{"__ignoreMap":63},[67,112015,112016,112019,112021,112023,112025,112027],{"class":69,"line":70},[67,112017,112018],{"class":73},"np.clip(action, ",[67,112020,1863],{"class":84},[67,112022,104100],{"class":77},[67,112024,1868],{"class":73},[67,112026,104100],{"class":77},[67,112028,829],{"class":73},[19,112030,112031,112032,112035],{},"因为 XML 里 ",[32,112033,112034],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[391,112037,1246],{"id":1246},[58,112039,112040],{"className":60,"code":111901,"language":62,"meta":63,"style":63},[32,112041,112042,112050],{"__ignoreMap":63},[67,112043,112044,112046,112048],{"class":69,"line":70},[67,112045,801],{"class":84},[67,112047,111432],{"class":110},[67,112049,111435],{"class":73},[67,112051,112052,112054],{"class":69,"line":191},[67,112053,5910],{"class":84},[67,112055,111442],{"class":73},[19,112057,112058,112059,112062,112063,112066,112067,112070],{},"这段定义了一个函数，用来获取当前观测。",[32,112060,112061],{},"data.qpos.copy()"," 是位置数组副本，",[32,112064,112065],{},"data.qvel.copy()"," 是速度数组副本。",[32,112068,112069],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112072,112073],{},"在本章模型里：",[58,112075,112078],{"className":112076,"code":112077,"language":603,"meta":63},[601],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[32,112079,112077],{"__ignoreMap":63},[19,112081,112082],{},"所以返回的 obs 是：",[58,112084,112087],{"className":112085,"code":112086,"language":603,"meta":63},[601],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[32,112088,112086],{"__ignoreMap":63},[58,112090,112092],{"className":60,"code":112091,"language":62,"meta":63,"style":63},"def compute_reward(obs: np.ndarray) -> float:\n",[32,112093,112094],{"__ignoreMap":63},[67,112095,112096,112098,112100,112102,112104],{"class":69,"line":70},[67,112097,801],{"class":84},[67,112099,111457],{"class":110},[67,112101,111460],{"class":73},[67,112103,2041],{"class":77},[67,112105,813],{"class":73},[19,112107,112108,112109,112112],{},"这行定义奖励函数。输入是观测 ",[32,112110,112111],{},"obs","，输出是一个浮点数奖励。",[58,112114,112116],{"className":60,"code":112115,"language":62,"meta":63,"style":63},"cart_x = obs[0]\npole_angle = obs[1]\n",[32,112117,112118,112131],{"__ignoreMap":63},[67,112119,112120,112123,112125,112127,112129],{"class":69,"line":70},[67,112121,112122],{"class":73},"cart_x ",[67,112124,85],{"class":84},[67,112126,111474],{"class":73},[67,112128,78],{"class":77},[67,112130,35015],{"class":73},[67,112132,112133,112136,112138,112140,112142],{"class":69,"line":191},[67,112134,112135],{"class":73},"pole_angle ",[67,112137,85],{"class":84},[67,112139,111474],{"class":73},[67,112141,2209],{"class":77},[67,112143,35015],{"class":73},[19,112145,112146,112147,112150,112151,112154],{},"数组索引从 0 开始。",[32,112148,112149],{},"obs[0]"," 是第一个元素，也就是小车位置。",[32,112152,112153],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[58,112156,112157],{"className":60,"code":111226,"language":62,"meta":63,"style":63},[32,112158,112159],{"__ignoreMap":63},[67,112160,112161,112163,112165,112167,112169,112171,112173,112175,112177,112179,112181,112183,112185,112187],{"class":69,"line":70},[67,112162,18843],{"class":84},[67,112164,111235],{"class":77},[67,112166,854],{"class":73},[67,112168,104100],{"class":77},[67,112170,54035],{"class":84},[67,112172,111244],{"class":77},[67,112174,986],{"class":84},[67,112176,111249],{"class":73},[67,112178,965],{"class":84},[67,112180,111249],{"class":73},[67,112182,1863],{"class":84},[67,112184,111258],{"class":73},[67,112186,965],{"class":84},[67,112188,111263],{"class":73},[19,112190,112191,112192,112195,112196,112199],{},"这行计算奖励。",[32,112193,112194],{},"cart_x * cart_x"," 是小车位置的平方，",[32,112197,112198],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[58,112201,112203],{"className":60,"code":112202,"language":62,"meta":63,"style":63},"data.qpos[1] = 0.1\n",[32,112204,112205],{"__ignoreMap":63},[67,112206,112207,112209,112211,112213,112215],{"class":69,"line":70},[67,112208,106368],{"class":73},[67,112210,2209],{"class":77},[67,112212,81],{"class":73},[67,112214,85],{"class":84},[67,112216,111578],{"class":77},[19,112218,112219,112220,112222,112223,112225],{},"手动设置杆子的初始角度。因为 ",[32,112221,107122],{}," 是小车位置，",[32,112224,107125],{}," 是杆子角度，所以这里改的是杆子。",[58,112227,112228],{"className":60,"code":106212,"language":62,"meta":63,"style":63},[32,112229,112230],{"__ignoreMap":63},[67,112231,112232],{"class":69,"line":70},[67,112233,106212],{"class":73},[19,112235,107168,112236,112238],{},[32,112237,1687],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[58,112240,112242],{"className":60,"code":112241,"language":62,"meta":63,"style":63},"total_reward = 0.0\n",[32,112243,112244],{"__ignoreMap":63},[67,112245,112246,112249,112251],{"class":69,"line":70},[67,112247,112248],{"class":73},"total_reward ",[67,112250,85],{"class":84},[67,112252,106430],{"class":77},[19,112254,112255],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[58,112257,112259],{"className":60,"code":112258,"language":62,"meta":63,"style":63},"for step in range(1000):\n",[32,112260,112261],{"__ignoreMap":63},[67,112262,112263,112265,112267,112269,112271,112273,112275],{"class":69,"line":70},[67,112264,1512],{"class":84},[67,112266,938],{"class":73},[67,112268,941],{"class":84},[67,112270,944],{"class":77},[67,112272,854],{"class":73},[67,112274,8227],{"class":77},[67,112276,952],{"class":73},[19,112278,112279,112280,112282],{},"循环 1000 步。",[32,112281,1534],{}," 是当前步数，从 0 到 999。",[58,112284,112286],{"className":60,"code":112285,"language":62,"meta":63,"style":63},"obs = get_observation(data)\n",[32,112287,112288],{"__ignoreMap":63},[67,112289,112290,112293,112295],{"class":69,"line":70},[67,112291,112292],{"class":73},"obs ",[67,112294,85],{"class":84},[67,112296,111625],{"class":73},[19,112298,112299,112300,230],{},"读取当前状态，保存到 ",[32,112301,112111],{},[58,112303,112305],{"className":60,"code":112304,"language":62,"meta":63,"style":63},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[32,112306,112307,112319],{"__ignoreMap":63},[67,112308,112309,112311,112313,112315,112317],{"class":69,"line":70},[67,112310,112135],{"class":73},[67,112312,85],{"class":84},[67,112314,111474],{"class":73},[67,112316,2209],{"class":77},[67,112318,35015],{"class":73},[67,112320,112321,112324,112326,112328,112330],{"class":69,"line":191},[67,112322,112323],{"class":73},"pole_angular_velocity ",[67,112325,85],{"class":84},[67,112327,111474],{"class":73},[67,112329,2071],{"class":77},[67,112331,35015],{"class":73},[19,112333,112334,112335,112338,112339,230],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[32,112336,112337],{},"obs[3]","？因为 obs 的顺序是 ",[32,112340,112341],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[58,112343,112345],{"className":60,"code":112344,"language":62,"meta":63,"style":63},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[32,112346,112347],{"__ignoreMap":63},[67,112348,112349,112351,112353,112355,112357,112359,112361,112363,112365],{"class":69,"line":70},[67,112350,1855],{"class":73},[67,112352,85],{"class":84},[67,112354,111665],{"class":77},[67,112356,986],{"class":84},[67,112358,111258],{"class":73},[67,112360,2471],{"class":84},[67,112362,1002],{"class":77},[67,112364,986],{"class":84},[67,112366,111678],{"class":73},[19,112368,112369,112370,1264,112372,112374],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[32,112371,992],{},[32,112373,1691],{}," 是人为设置的系数，不是固定公式。",[58,112376,112378],{"className":60,"code":112377,"language":62,"meta":63,"style":63},"action = np.clip(action, -1.0, 1.0)\n",[32,112379,112380],{"__ignoreMap":63},[67,112381,112382,112384,112386,112388,112390,112392,112394,112396],{"class":69,"line":70},[67,112383,1855],{"class":73},[67,112385,85],{"class":84},[67,112387,1860],{"class":73},[67,112389,1863],{"class":84},[67,112391,104100],{"class":77},[67,112393,1868],{"class":73},[67,112395,104100],{"class":77},[67,112397,829],{"class":73},[19,112399,112400],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[58,112402,112403],{"className":60,"code":111211,"language":62,"meta":63,"style":63},[32,112404,112405],{"__ignoreMap":63},[67,112406,112407,112409,112411,112413,112415],{"class":69,"line":70},[67,112408,74],{"class":73},[67,112410,78],{"class":77},[67,112412,81],{"class":73},[67,112414,85],{"class":84},[67,112416,1885],{"class":73},[19,112418,112419],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[58,112421,112422],{"className":60,"code":1234,"language":62,"meta":63,"style":63},[32,112423,112424],{"__ignoreMap":63},[67,112425,112426],{"class":69,"line":70},[67,112427,1234],{"class":73},[19,112429,112430,112431,112433],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[32,112432,385],{}," 计算小车和杆子的下一刻状态。",[58,112435,112437],{"className":60,"code":112436,"language":62,"meta":63,"style":63},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[32,112438,112439,112448],{"__ignoreMap":63},[67,112440,112441,112444,112446],{"class":69,"line":70},[67,112442,112443],{"class":73},"reward ",[67,112445,85],{"class":84},[67,112447,111730],{"class":73},[67,112449,112450,112452,112454],{"class":69,"line":191},[67,112451,112248],{"class":73},[67,112453,11283],{"class":84},[67,112455,111740],{"class":73},[19,112457,112458,112459,112461,112462,112465,112466,230],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[32,112460,11283],{}," 是简写，",[32,112463,112464],{},"total_reward += reward"," 等价于 ",[32,112467,112468],{},"total_reward = total_reward + reward",[58,112470,112472],{"className":60,"code":112471,"language":62,"meta":63,"style":63},"if step % 100 == 0:\n",[32,112473,112474],{"__ignoreMap":63},[67,112475,112476,112478,112480,112482,112484,112486,112488],{"class":69,"line":70},[67,112477,1096],{"class":84},[67,112479,938],{"class":73},[67,112481,2319],{"class":84},[67,112483,7571],{"class":77},[67,112485,1102],{"class":84},[67,112487,5913],{"class":77},[67,112489,813],{"class":73},[19,112491,112492,112494,112495,112498],{},[32,112493,2319],{}," 是取余数。",[32,112496,112497],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[58,112500,112502],{"className":60,"code":112501,"language":62,"meta":63,"style":63},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[32,112503,112504],{"__ignoreMap":63},[67,112505,112506,112508,112510,112512,112514,112516,112518,112520,112522,112524,112526,112528,112530,112532,112534,112536],{"class":69,"line":70},[67,112507,1626],{"class":77},[67,112509,854],{"class":73},[67,112511,111769],{"class":114},[67,112513,111772],{"class":73},[67,112515,111775],{"class":114},[67,112517,111778],{"class":73},[67,112519,2071],{"class":77},[67,112521,111783],{"class":73},[67,112523,111786],{"class":114},[67,112525,1868],{"class":73},[67,112527,33788],{"class":77},[67,112529,854],{"class":73},[67,112531,2041],{"class":77},[67,112533,111797],{"class":73},[67,112535,2071],{"class":77},[67,112537,1050],{"class":73},[19,112539,112540,112541,112544,112545,112548],{},"打印当前步数、观测和动作。",[32,112542,112543],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[32,112546,112547],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112550,1647],{"id":1646},[19,112552,112553],{},"观测向量:",[58,112555,112558],{"className":112556,"code":112557,"language":603,"meta":63},[601],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[32,112559,112557],{"__ignoreMap":63},[19,112561,112562],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112564,112565],{},"每隔 100 步会打印一次：",[58,112567,112570],{"className":112568,"code":112569,"language":603,"meta":63},[601],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[32,112571,112569],{"__ignoreMap":63},[19,112573,112574],{},"重点观察：",[26,112576,112577,112583,112588],{},[29,112578,112579,112582],{},[32,112580,112581],{},"pole_angle"," 是否越来越大。",[29,112584,112585,112587],{},[32,112586,111164],{}," 是否跑得太远。",[29,112589,112590,112591,84298,112593,230],{},"action 是否经常被 clip 到 ",[32,112592,105590],{},[32,112594,2209],{},[19,112596,112597],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112599,1696],{"id":1695},[26,112601,112602,112608,112611,112617,112627,112633,112636],{},[29,112603,112604,112605,230],{},"把初始角度改为 ",[32,112606,112607],{},"data.qpos[1] = 0.3",[29,112609,112610],{},"重新运行，观察控制是否变差。",[29,112612,112613,112614,112616],{},"把 actuator ",[32,112615,1465],{}," 改小。",[29,112618,112619,112620,112623,112624,230],{},"打印 ",[32,112621,112622],{},"model.nq, model.nv, model.nu","，应为 ",[32,112625,112626],{},"2 2 1",[29,112628,112629,112630,112632],{},"把 reward 里的 ",[32,112631,112198],{}," 系数改大，观察总奖励变化。",[29,112634,112635],{},"把控制器改成反号，观察杆子是否更容易倒。",[29,112637,112638],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112640,1748],{"id":1747},[391,112642,112643],{"id":112643},"杆子方向和预期不一致",[19,112645,104093,112646,112648,112649,112651],{},[32,112647,509],{}," 和 capsule 的 ",[32,112650,1402],{},"，必要时用 viewer 可视化确认。",[391,112653,112654],{"id":112654},"控制器越控越倒",[19,112656,112657],{},"说明反馈符号可能反了，尝试:",[58,112659,112661],{"className":60,"code":112660,"language":62,"meta":63,"style":63},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[32,112662,112663],{"__ignoreMap":63},[67,112664,112665,112667,112669,112671,112673,112675,112677,112679,112681,112683],{"class":69,"line":70},[67,112666,1855],{"class":73},[67,112668,85],{"class":84},[67,112670,54035],{"class":84},[67,112672,992],{"class":77},[67,112674,986],{"class":84},[67,112676,111258],{"class":73},[67,112678,1863],{"class":84},[67,112680,1002],{"class":77},[67,112682,986],{"class":84},[67,112684,111678],{"class":73},[391,112686,112687],{"id":112687},"小车飞走",[19,112689,112690,112691,112693,112694,112697],{},"降低 ",[32,112692,1465],{}," 或缩小 ",[32,112695,112696],{},"action"," 的 clip 范围。",[391,112699,112701,112703],{"id":112700},"obs3-为什么是杆子角速度",[32,112702,112337],{}," 为什么是杆子角速度",[19,112705,112706],{},"因为这个模型里：",[58,112708,112711],{"className":112709,"code":112710,"language":603,"meta":63},[601],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[32,112712,112710],{"__ignoreMap":63},[19,112714,111185],{},[58,112716,112719],{"className":112717,"code":112718,"language":603,"meta":63},[601],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[32,112720,112718],{"__ignoreMap":63},[391,112722,112724],{"id":112723},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112726,112727],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112729,1889],{"id":1888},[19,112731,112732],{},"一个控制任务通常包含：",[26,112734,112735,112738,112746,112751,112754],{},[29,112736,112737],{},"模型：Cartpole 的 body、joint、actuator。",[29,112739,112740,112741,2204,112743,112745],{},"观测：从 ",[32,112742,1687],{},[32,112744,106033],{}," 里取状态。",[29,112747,112748,112749,230],{},"动作：写入 ",[32,112750,45],{},[29,112752,112753],{},"奖励：根据任务目标打分。",[29,112755,112756],{},"循环：obs -> action -> step -> reward。",[19,112758,112759],{},"这就是后面 Gymnasium 环境的基本骨架。",[1903,112761,105960],{},{"title":63,"searchDepth":191,"depth":191,"links":112763},[112764,112765,112766,112771,112775,112776,112777,112785],{"id":16,"depth":191,"text":17},{"id":94,"depth":191,"text":95},{"id":243,"depth":191,"text":244,"children":112767},[112768,112769,112770],{"id":111138,"depth":202,"text":111139},{"id":111203,"depth":202,"text":111204},{"id":111219,"depth":202,"text":111220},{"id":611,"depth":191,"text":612,"children":112772},[112773,112774],{"id":1146,"depth":202,"text":1146},{"id":1246,"depth":202,"text":1246},{"id":1646,"depth":191,"text":1647},{"id":1695,"depth":191,"text":1696},{"id":1747,"depth":191,"text":1748,"children":112778},[112779,112780,112781,112782,112784],{"id":112643,"depth":202,"text":112643},{"id":112654,"depth":202,"text":112654},{"id":112687,"depth":202,"text":112687},{"id":112700,"depth":202,"text":112783},"obs[3] 为什么是杆子角速度",{"id":112723,"depth":202,"text":112724},{"id":1888,"depth":191,"text":1889},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110874,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112792,"title":112793,"body":112794,"description":63,"extension":1930,"meta":114808,"navigation":630,"path":114809,"seo":114810,"stem":114811,"__hash__":114812},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112795,"toc":114784},[112796,112799,112801,112804,112806,112823,112826,112829,112835,112838,112840,112842,112866,112868,112882,112884,112925,112927,112945,112947,112950,112956,112959,112987,112991,112997,113022,113025,113056,113063,113066,113069,113075,113078,113084,113087,113093,113097,113100,113125,113128,113130,113890,113892,113904,113906,113917,113919,113922,113939,113942,113944,113955,113958,113960,114006,114009,114022,114025,114107,114110,114112,114128,114138,114151,114154,114193,114203,114214,114224,114237,114240,114269,114272,114282,114285,114291,114308,114319,114321,114327,114344,114355,114376,114379,114391,114394,114415,114418,114426,114434,114451,114454,114523,114530,114538,114541,114554,114561,114563,114566,114572,114575,114578,114584,114590,114592,114632,114634,114640,114649,114652,114654,114674,114677,114680,114686,114690,114692,114719,114722,114725,114752,114758,114761,114764,114766,114769,114772,114778,114781],[10,112797,112793],{"id":112798},"_7控制任务reacher-机械臂到达目标",[14,112800,17],{"id":16},[19,112802,112803],{},"本章搭建一个二维两关节 reacher 任务。",[19,112805,24],{},[26,112807,112808,112811,112814,112817,112820],{},[29,112809,112810],{},"两个 hinge joint",[29,112812,112813],{},"两个 motor actuator",[29,112815,112816],{},"site 作为末端点和目标点",[29,112818,112819],{},"根据末端和目标距离设计 reward",[29,112821,112822],{},"构造机械臂任务的基本形式",[19,112824,112825],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112827,112828],{},"Reacher 任务可以理解为：",[58,112830,112833],{"className":112831,"code":112832,"language":603,"meta":63},[601],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[32,112834,112832],{"__ignoreMap":63},[19,112836,112837],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112839,95],{"id":94},[19,112841,98],{},[58,112843,112844],{"className":101,"code":102,"language":103,"meta":63,"style":63},[32,112845,112846],{"__ignoreMap":63},[67,112847,112848,112850,112852,112854,112856,112858,112860,112862,112864],{"class":69,"line":70},[67,112849,111],{"class":110},[67,112851,115],{"class":114},[67,112853,118],{"class":114},[67,112855,121],{"class":77},[67,112857,124],{"class":114},[67,112859,127],{"class":114},[67,112861,130],{"class":114},[67,112863,133],{"class":114},[67,112865,136],{"class":114},[19,112867,139],{},[58,112869,112870],{"className":101,"code":142,"language":103,"meta":63,"style":63},[32,112871,112872],{"__ignoreMap":63},[67,112873,112874,112876,112878,112880],{"class":69,"line":70},[67,112875,149],{"class":110},[67,112877,118],{"class":114},[67,112879,154],{"class":114},[67,112881,157],{"class":114},[19,112883,160],{},[58,112885,112887],{"className":101,"code":112886,"language":103,"meta":63,"style":63},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[32,112888,112889,112906,112915],{"__ignoreMap":63},[67,112890,112891,112893,112895,112897,112900,112902,112904],{"class":69,"line":70},[67,112892,170],{"class":110},[67,112894,173],{"class":114},[67,112896,176],{"class":77},[67,112898,112899],{"class":114}," mujoco-reacher",[67,112901,182],{"class":114},[67,112903,185],{"class":77},[67,112905,188],{"class":77},[67,112907,112908,112910,112912],{"class":69,"line":191},[67,112909,170],{"class":110},[67,112911,196],{"class":114},[67,112913,112914],{"class":114}," mujoco-reacher\n",[67,112916,112917,112919,112921,112923],{"class":69,"line":202},[67,112918,149],{"class":110},[67,112920,118],{"class":114},[67,112922,154],{"class":114},[67,112924,157],{"class":114},[19,112926,213],{},[26,112928,112929,112932,112935],{},[29,112930,112931],{},"本章使用低维状态，不使用图像输入。",[29,112933,112934],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[29,112936,112937,112938,2204,112940,2204,112942,112944],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[32,112939,1687],{},[32,112941,106033],{},[32,112943,105358],{}," 的方法一致。",[14,112946,244],{"id":243},[19,112948,112949],{},"Reacher 任务核心:",[58,112951,112954],{"className":112952,"code":112953,"language":603,"meta":63},[601],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[32,112955,112953],{"__ignoreMap":63},[19,112957,112958],{},"读取 site 世界坐标:",[58,112960,112962],{"className":60,"code":112961,"language":62,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[32,112963,112964,112977],{"__ignoreMap":63},[67,112965,112966,112968,112970,112972,112975],{"class":69,"line":70},[67,112967,105312],{"class":73},[67,112969,85],{"class":84},[67,112971,105086],{"class":73},[67,112973,112974],{"class":114},"\"tip\"",[67,112976,829],{"class":73},[67,112978,112979,112982,112984],{"class":69,"line":191},[67,112980,112981],{"class":73},"tip_pos ",[67,112983,85],{"class":84},[67,112985,112986],{"class":73}," data.site_xpos[site_id]\n",[391,112988,112990],{"id":112989},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112992,112993,112994,112996],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[32,112995,1687],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[58,112998,113000],{"className":60,"code":112999,"language":62,"meta":63,"style":63},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[32,113001,113002,113012],{"__ignoreMap":63},[67,113003,113004,113007,113009],{"class":69,"line":70},[67,113005,113006],{"class":73},"tip ",[67,113008,85],{"class":84},[67,113010,113011],{"class":73}," data.site_xpos[tip_site_id]\n",[67,113013,113014,113017,113019],{"class":69,"line":191},[67,113015,113016],{"class":73},"target ",[67,113018,85],{"class":84},[67,113020,113021],{"class":73}," data.site_xpos[target_site_id]\n",[19,113023,113024],{},"这样 reward 就很容易写：",[58,113026,113028],{"className":60,"code":113027,"language":62,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[32,113029,113030,113045],{"__ignoreMap":63},[67,113031,113032,113035,113037,113040,113042],{"class":69,"line":70},[67,113033,113034],{"class":73},"dist ",[67,113036,85],{"class":84},[67,113038,113039],{"class":73}," np.linalg.norm(tip ",[67,113041,1863],{"class":84},[67,113043,113044],{"class":73}," target)\n",[67,113046,113047,113049,113051,113053],{"class":69,"line":191},[67,113048,112443],{"class":73},[67,113050,85],{"class":84},[67,113052,54035],{"class":84},[67,113054,113055],{"class":73},"dist\n",[19,113057,113058,113059,113062],{},"距离越小，",[32,113060,113061],{},"-dist"," 越接近 0，奖励越高。",[391,113064,113065],{"id":113065},"两关节机械臂的状态",[19,113067,113068],{},"这个模型有两个 hinge joint：",[58,113070,113073],{"className":113071,"code":113072,"language":603,"meta":63},[601],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[32,113074,113072],{"__ignoreMap":63},[19,113076,113077],{},"再加上末端和目标位置：",[58,113079,113082],{"className":113080,"code":113081,"language":603,"meta":63},[601],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[32,113083,113081],{"__ignoreMap":63},[19,113085,113086],{},"总维度：",[58,113088,113091],{"className":113089,"code":113090,"language":603,"meta":63},[601],"2 + 2 + 3 + 3 = 10\n",[32,113092,113090],{"__ignoreMap":63},[391,113094,113096],{"id":113095},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113098,113099],{},"本章把重力设为：",[58,113101,113103],{"className":250,"code":113102,"language":252,"meta":63,"style":63},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[32,113104,113105],{"__ignoreMap":63},[67,113106,113107,113109,113111,113113,113115,113117,113119,113121,113123],{"class":69,"line":70},[67,113108,259],{"class":73},[67,113110,70926],{"class":262},[67,113112,102927],{"class":110},[67,113114,85],{"class":73},[67,113116,102932],{"class":114},[67,113118,102935],{"class":110},[67,113120,85],{"class":73},[67,113122,105448],{"class":114},[67,113124,289],{"class":73},[19,113126,113127],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113129,612],{"id":611},[58,113131,113133],{"className":60,"code":113132,"language":62,"meta":63,"style":63},"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",[32,113134,113135,113141,113151,113155,113159,113167,113172,113177,113181,113185,113190,113195,113199,113204,113209,113214,113218,113223,113228,113233,113238,113242,113246,113250,113254,113258,113263,113268,113272,113276,113280,113284,113288,113303,113312,113324,113347,113354,113358,113362,113372,113386,113400,113407,113411,113415,113429,113441,113453,113466,113481,113498,113502,113506,113518,113530,113538,113546,113550,113566,113571,113584,113597,113612,113616,113651,113683,113687,113691,113700,113704,113720,113730,113741,113757,113773,113789,113805,113809,113827,113847,113866,113870,113874,113886],{"__ignoreMap":63},[67,113136,113137,113139],{"class":69,"line":70},[67,113138,622],{"class":84},[67,113140,638],{"class":73},[67,113142,113143,113145,113147,113149],{"class":69,"line":191},[67,113144,622],{"class":84},[67,113146,646],{"class":73},[67,113148,649],{"class":84},[67,113150,652],{"class":73},[67,113152,113153],{"class":69,"line":202},[67,113154,631],{"emptyLinePlaceholder":630},[67,113156,113157],{"class":69,"line":641},[67,113158,631],{"emptyLinePlaceholder":630},[67,113160,113161,113163,113165],{"class":69,"line":655},[67,113162,668],{"class":77},[67,113164,671],{"class":84},[67,113166,674],{"class":114},[67,113168,113169],{"class":69,"line":660},[67,113170,113171],{"class":114},"\u003Cmujoco model=\"two_link_reacher\">\n",[67,113173,113174],{"class":69,"line":665},[67,113175,113176],{"class":114},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[67,113178,113179],{"class":69,"line":677},[67,113180,631],{"emptyLinePlaceholder":630},[67,113182,113183],{"class":69,"line":683},[67,113184,697],{"class":114},[67,113186,113187],{"class":69,"line":689},[67,113188,113189],{"class":114},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[67,113191,113192],{"class":69,"line":694},[67,113193,113194],{"class":114},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[67,113196,113197],{"class":69,"line":700},[67,113198,631],{"emptyLinePlaceholder":630},[67,113200,113201],{"class":69,"line":706},[67,113202,113203],{"class":114},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[67,113205,113206],{"class":69,"line":712},[67,113207,113208],{"class":114},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[67,113210,113211],{"class":69,"line":717},[67,113212,113213],{"class":114},"      \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",[67,113215,113216],{"class":69,"line":723},[67,113217,631],{"emptyLinePlaceholder":630},[67,113219,113220],{"class":69,"line":729},[67,113221,113222],{"class":114},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[67,113224,113225],{"class":69,"line":735},[67,113226,113227],{"class":114},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[67,113229,113230],{"class":69,"line":741},[67,113231,113232],{"class":114},"        \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",[67,113234,113235],{"class":69,"line":747},[67,113236,113237],{"class":114},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[67,113239,113240],{"class":69,"line":753},[67,113241,738],{"class":114},[67,113243,113244],{"class":69,"line":758},[67,113245,744],{"class":114},[67,113247,113248],{"class":69,"line":764},[67,113249,750],{"class":114},[67,113251,113252],{"class":69,"line":770},[67,113253,631],{"emptyLinePlaceholder":630},[67,113255,113256],{"class":69,"line":776},[67,113257,761],{"class":114},[67,113259,113260],{"class":69,"line":782},[67,113261,113262],{"class":114},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[67,113264,113265],{"class":69,"line":788},[67,113266,113267],{"class":114},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[67,113269,113270],{"class":69,"line":793},[67,113271,773],{"class":114},[67,113273,113274],{"class":69,"line":798},[67,113275,779],{"class":114},[67,113277,113278],{"class":69,"line":816},[67,113279,785],{"class":114},[67,113281,113282],{"class":69,"line":832},[67,113283,631],{"emptyLinePlaceholder":630},[67,113285,113286],{"class":69,"line":843},[67,113287,631],{"emptyLinePlaceholder":630},[67,113289,113290,113292,113295,113298,113300],{"class":69,"line":848},[67,113291,801],{"class":84},[67,113293,113294],{"class":110}," site_position",[67,113296,113297],{"class":73},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[67,113299,3157],{"class":77},[67,113301,113302],{"class":73},") -> np.ndarray:\n",[67,113304,113305,113307,113309],{"class":69,"line":863},[67,113306,105081],{"class":73},[67,113308,85],{"class":84},[67,113310,113311],{"class":73}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[67,113313,113314,113316,113318,113320,113322],{"class":69,"line":876},[67,113315,897],{"class":84},[67,113317,105128],{"class":73},[67,113319,259],{"class":84},[67,113321,5913],{"class":77},[67,113323,813],{"class":73},[67,113325,113326,113328,113330,113332,113334,113337,113339,113341,113343,113345],{"class":69,"line":889},[67,113327,914],{"class":84},[67,113329,917],{"class":77},[67,113331,854],{"class":73},[67,113333,2052],{"class":84},[67,113335,113336],{"class":114},"\"site not found: ",[67,113338,2885],{"class":77},[67,113340,81570],{"class":73},[67,113342,2934],{"class":77},[67,113344,2243],{"class":114},[67,113346,829],{"class":73},[67,113348,113349,113351],{"class":69,"line":894},[67,113350,5910],{"class":84},[67,113352,113353],{"class":73}," data.site_xpos[site_id].copy()\n",[67,113355,113356],{"class":69,"line":911},[67,113357,631],{"emptyLinePlaceholder":630},[67,113359,113360],{"class":69,"line":927},[67,113361,631],{"emptyLinePlaceholder":630},[67,113363,113364,113366,113369],{"class":69,"line":932},[67,113365,801],{"class":84},[67,113367,113368],{"class":110}," get_obs",[67,113370,113371],{"class":73},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[67,113373,113374,113377,113379,113382,113384],{"class":69,"line":955},[67,113375,113376],{"class":73},"    tip ",[67,113378,85],{"class":84},[67,113380,113381],{"class":73}," site_position(model, data, ",[67,113383,112974],{"class":114},[67,113385,829],{"class":73},[67,113387,113388,113391,113393,113395,113398],{"class":69,"line":971},[67,113389,113390],{"class":73},"    target ",[67,113392,85],{"class":84},[67,113394,113381],{"class":73},[67,113396,113397],{"class":114},"\"target\"",[67,113399,829],{"class":73},[67,113401,113402,113404],{"class":69,"line":1010},[67,113403,5910],{"class":84},[67,113405,113406],{"class":73}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[67,113408,113409],{"class":69,"line":1016},[67,113410,631],{"emptyLinePlaceholder":630},[67,113412,113413],{"class":69,"line":1021},[67,113414,631],{"emptyLinePlaceholder":630},[67,113416,113417,113419,113422,113425,113427],{"class":69,"line":1034},[67,113418,801],{"class":84},[67,113420,113421],{"class":110}," reward",[67,113423,113424],{"class":73},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[67,113426,2041],{"class":77},[67,113428,813],{"class":73},[67,113430,113431,113433,113435,113437,113439],{"class":69,"line":1053},[67,113432,113376],{"class":73},[67,113434,85],{"class":84},[67,113436,113381],{"class":73},[67,113438,112974],{"class":114},[67,113440,829],{"class":73},[67,113442,113443,113445,113447,113449,113451],{"class":69,"line":1070},[67,113444,113390],{"class":73},[67,113446,85],{"class":84},[67,113448,113381],{"class":73},[67,113450,113397],{"class":114},[67,113452,829],{"class":73},[67,113454,113455,113458,113460,113462,113464],{"class":69,"line":1083},[67,113456,113457],{"class":73},"    dist ",[67,113459,85],{"class":84},[67,113461,113039],{"class":73},[67,113463,1863],{"class":84},[67,113465,113044],{"class":73},[67,113467,113468,113471,113473,113476,113478],{"class":69,"line":1088},[67,113469,113470],{"class":73},"    control_cost ",[67,113472,85],{"class":84},[67,113474,113475],{"class":77}," 0.01",[67,113477,986],{"class":84},[67,113479,113480],{"class":73}," np.sum(np.square(data.ctrl))\n",[67,113482,113483,113485,113487,113489,113491,113493,113495],{"class":69,"line":1093},[67,113484,5910],{"class":84},[67,113486,111235],{"class":77},[67,113488,854],{"class":73},[67,113490,1863],{"class":84},[67,113492,113034],{"class":73},[67,113494,1863],{"class":84},[67,113496,113497],{"class":73}," control_cost)\n",[67,113499,113500],{"class":69,"line":1110},[67,113501,631],{"emptyLinePlaceholder":630},[67,113503,113504],{"class":69,"line":11603},[67,113505,631],{"emptyLinePlaceholder":630},[67,113507,113508,113510,113512,113514,113516],{"class":69,"line":11612},[67,113509,801],{"class":84},[67,113511,804],{"class":110},[67,113513,807],{"class":73},[67,113515,810],{"class":77},[67,113517,813],{"class":73},[67,113519,113520,113522,113524,113526,113528],{"class":69,"line":11617},[67,113521,819],{"class":73},[67,113523,85],{"class":84},[67,113525,824],{"class":73},[67,113527,668],{"class":77},[67,113529,829],{"class":73},[67,113531,113532,113534,113536],{"class":69,"line":11623},[67,113533,835],{"class":73},[67,113535,85],{"class":84},[67,113537,840],{"class":73},[67,113539,113540,113542,113544],{"class":69,"line":11644},[67,113541,111591],{"class":73},[67,113543,85],{"class":84},[67,113545,106430],{"class":77},[67,113547,113548],{"class":69,"line":11650},[67,113549,631],{"emptyLinePlaceholder":630},[67,113551,113552,113554,113556,113558,113560,113562,113564],{"class":69,"line":11664},[67,113553,935],{"class":84},[67,113555,938],{"class":73},[67,113557,941],{"class":84},[67,113559,944],{"class":77},[67,113561,854],{"class":73},[67,113563,66834],{"class":77},[67,113565,952],{"class":73},[67,113567,113568],{"class":69,"line":11670},[67,113569,113570],{"class":73},"        mujoco.mj_forward(model, data)\n",[67,113572,113573,113576,113578,113580,113582],{"class":69,"line":11697},[67,113574,113575],{"class":73},"        tip ",[67,113577,85],{"class":84},[67,113579,113381],{"class":73},[67,113581,112974],{"class":114},[67,113583,829],{"class":73},[67,113585,113586,113589,113591,113593,113595],{"class":69,"line":11706},[67,113587,113588],{"class":73},"        target ",[67,113590,85],{"class":84},[67,113592,113381],{"class":73},[67,113594,113397],{"class":114},[67,113596,829],{"class":73},[67,113598,113599,113602,113604,113607,113609],{"class":69,"line":11712},[67,113600,113601],{"class":73},"        error ",[67,113603,85],{"class":84},[67,113605,113606],{"class":73}," target ",[67,113608,1863],{"class":84},[67,113610,113611],{"class":73}," tip\n",[67,113613,113614],{"class":69,"line":11720},[67,113615,631],{"emptyLinePlaceholder":630},[67,113617,113618,113620,113622,113624,113626,113629,113631,113633,113636,113638,113641,113643,113645,113647,113649],{"class":69,"line":11725},[67,113619,974],{"class":73},[67,113621,78],{"class":77},[67,113623,81],{"class":73},[67,113625,85],{"class":84},[67,113627,113628],{"class":73}," np.clip(",[67,113630,992],{"class":77},[67,113632,986],{"class":84},[67,113634,113635],{"class":73}," error[",[67,113637,2077],{"class":77},[67,113639,113640],{"class":73},"], ",[67,113642,1863],{"class":84},[67,113644,104100],{"class":77},[67,113646,1868],{"class":73},[67,113648,104100],{"class":77},[67,113650,829],{"class":73},[67,113652,113653,113655,113657,113659,113661,113663,113665,113667,113669,113671,113673,113675,113677,113679,113681],{"class":69,"line":18401},[67,113654,974],{"class":73},[67,113656,2209],{"class":77},[67,113658,81],{"class":73},[67,113660,85],{"class":84},[67,113662,113628],{"class":73},[67,113664,992],{"class":77},[67,113666,986],{"class":84},[67,113668,113635],{"class":73},[67,113670,78],{"class":77},[67,113672,113640],{"class":73},[67,113674,1863],{"class":84},[67,113676,104100],{"class":77},[67,113678,1868],{"class":73},[67,113680,104100],{"class":77},[67,113682,829],{"class":73},[67,113684,113685],{"class":69,"line":18407},[67,113686,631],{"emptyLinePlaceholder":630},[67,113688,113689],{"class":69,"line":18430},[67,113690,1013],{"class":73},[67,113692,113693,113695,113697],{"class":69,"line":18436},[67,113694,111735],{"class":73},[67,113696,11283],{"class":84},[67,113698,113699],{"class":73}," reward(model, data)\n",[67,113701,113702],{"class":69,"line":18459},[67,113703,631],{"emptyLinePlaceholder":630},[67,113705,113706,113708,113710,113712,113714,113716,113718],{"class":69,"line":18473},[67,113707,4329],{"class":84},[67,113709,938],{"class":73},[67,113711,2319],{"class":84},[67,113713,7571],{"class":77},[67,113715,1102],{"class":84},[67,113717,5913],{"class":77},[67,113719,813],{"class":73},[67,113721,113722,113725,113727],{"class":69,"line":18493},[67,113723,113724],{"class":73},"            obs ",[67,113726,85],{"class":84},[67,113728,113729],{"class":73}," get_obs(model, data)\n",[67,113731,113732,113734,113736,113738],{"class":69,"line":18499},[67,113733,36419],{"class":77},[67,113735,854],{"class":73},[67,113737,111769],{"class":114},[67,113739,113740],{"class":73},", step)\n",[67,113742,113743,113745,113747,113750,113753,113755],{"class":69,"line":18510},[67,113744,36419],{"class":77},[67,113746,854],{"class":73},[67,113748,113749],{"class":114},"\"  tip:\"",[67,113751,113752],{"class":73},", np.round(tip, ",[67,113754,2071],{"class":77},[67,113756,1050],{"class":73},[67,113758,113759,113761,113763,113766,113769,113771],{"class":69,"line":18533},[67,113760,36419],{"class":77},[67,113762,854],{"class":73},[67,113764,113765],{"class":114},"\"  target:\"",[67,113767,113768],{"class":73},", np.round(target, ",[67,113770,2071],{"class":77},[67,113772,1050],{"class":73},[67,113774,113775,113777,113779,113782,113785,113787],{"class":69,"line":18555},[67,113776,36419],{"class":77},[67,113778,854],{"class":73},[67,113780,113781],{"class":114},"\"  ctrl:\"",[67,113783,113784],{"class":73},", np.round(data.ctrl.copy(), ",[67,113786,2071],{"class":77},[67,113788,1050],{"class":73},[67,113790,113791,113793,113795,113798,113801,113803],{"class":69,"line":18560},[67,113792,36419],{"class":77},[67,113794,854],{"class":73},[67,113796,113797],{"class":114},"\"  obs_dim:\"",[67,113799,113800],{"class":73},", obs.shape[",[67,113802,78],{"class":77},[67,113804,6476],{"class":73},[67,113806,113807],{"class":69,"line":18566},[67,113808,631],{"emptyLinePlaceholder":630},[67,113810,113811,113813,113815,113817,113819,113821,113823,113825],{"class":69,"line":18580},[67,113812,851],{"class":77},[67,113814,854],{"class":73},[67,113816,111814],{"class":114},[67,113818,1868],{"class":73},[67,113820,33788],{"class":77},[67,113822,111821],{"class":73},[67,113824,2071],{"class":77},[67,113826,1050],{"class":73},[67,113828,113829,113831,113833,113836,113839,113841,113843,113845],{"class":69,"line":18593},[67,113830,851],{"class":77},[67,113832,854],{"class":73},[67,113834,113835],{"class":114},"\"final tip:\"",[67,113837,113838],{"class":73},", np.round(site_position(model, data, ",[67,113840,112974],{"class":114},[67,113842,111783],{"class":73},[67,113844,2071],{"class":77},[67,113846,1050],{"class":73},[67,113848,113849,113851,113853,113856,113858,113860,113862,113864],{"class":69,"line":18598},[67,113850,851],{"class":77},[67,113852,854],{"class":73},[67,113854,113855],{"class":114},"\"target:\"",[67,113857,113838],{"class":73},[67,113859,113397],{"class":114},[67,113861,111783],{"class":73},[67,113863,2071],{"class":77},[67,113865,1050],{"class":73},[67,113867,113868],{"class":69,"line":18612},[67,113869,631],{"emptyLinePlaceholder":630},[67,113871,113872],{"class":69,"line":18617},[67,113873,631],{"emptyLinePlaceholder":630},[67,113875,113876,113878,113880,113882,113884],{"class":69,"line":18623},[67,113877,1096],{"class":84},[67,113879,1099],{"class":77},[67,113881,1102],{"class":84},[67,113883,1105],{"class":114},[67,113885,813],{"class":73},[67,113887,113888],{"class":69,"line":18628},[67,113889,1113],{"class":73},[19,113891,1116],{},[58,113893,113895],{"className":101,"code":113894,"language":103,"meta":63,"style":63},"touch ch7_reacher.py\n",[32,113896,113897],{"__ignoreMap":63},[67,113898,113899,113901],{"class":69,"line":70},[67,113900,1126],{"class":110},[67,113902,113903],{"class":114}," ch7_reacher.py\n",[19,113905,111882],{},[58,113907,113909],{"className":101,"code":113908,"language":103,"meta":63,"style":63},"python ch7_reacher.py\n",[32,113910,113911],{"__ignoreMap":63},[67,113912,113913,113915],{"class":69,"line":70},[67,113914,62],{"class":110},[67,113916,113903],{"class":114},[391,113918,1146],{"id":1146},[19,113920,113921],{},"读取 site 坐标：",[58,113923,113925],{"className":60,"code":113924,"language":62,"meta":63,"style":63},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[32,113926,113927],{"__ignoreMap":63},[67,113928,113929,113931,113933,113935,113937],{"class":69,"line":70},[67,113930,801],{"class":84},[67,113932,113294],{"class":110},[67,113934,113297],{"class":73},[67,113936,3157],{"class":77},[67,113938,113302],{"class":73},[19,113940,113941],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113943,111898],{},[58,113945,113947],{"className":60,"code":113946,"language":62,"meta":63,"style":63},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[32,113948,113949],{"__ignoreMap":63},[67,113950,113951,113953],{"class":69,"line":70},[67,113952,18843],{"class":84},[67,113954,113406],{"class":73},[19,113956,113957],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113959,111223],{},[58,113961,113963],{"className":60,"code":113962,"language":62,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[32,113964,113965,113977,113990],{"__ignoreMap":63},[67,113966,113967,113969,113971,113973,113975],{"class":69,"line":70},[67,113968,113034],{"class":73},[67,113970,85],{"class":84},[67,113972,113039],{"class":73},[67,113974,1863],{"class":84},[67,113976,113044],{"class":73},[67,113978,113979,113982,113984,113986,113988],{"class":69,"line":191},[67,113980,113981],{"class":73},"control_cost ",[67,113983,85],{"class":84},[67,113985,113475],{"class":77},[67,113987,986],{"class":84},[67,113989,113480],{"class":73},[67,113991,113992,113994,113996,113998,114000,114002,114004],{"class":69,"line":202},[67,113993,18843],{"class":84},[67,113995,111235],{"class":77},[67,113997,854],{"class":73},[67,113999,1863],{"class":84},[67,114001,113034],{"class":73},[67,114003,1863],{"class":84},[67,114005,113497],{"class":73},[19,114007,114008],{},"奖励由两部分组成：",[26,114010,114011,114016],{},[29,114012,114013,114015],{},[32,114014,113061],{},"：末端离目标越远，奖励越低。",[29,114017,114018,114021],{},[32,114019,114020],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114023,114024],{},"简单控制器：",[58,114026,114028],{"className":60,"code":114027,"language":62,"meta":63,"style":63},"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",[32,114029,114030,114043,114075],{"__ignoreMap":63},[67,114031,114032,114035,114037,114039,114041],{"class":69,"line":70},[67,114033,114034],{"class":73},"error ",[67,114036,85],{"class":84},[67,114038,113606],{"class":73},[67,114040,1863],{"class":84},[67,114042,113611],{"class":73},[67,114044,114045,114047,114049,114051,114053,114055,114057,114059,114061,114063,114065,114067,114069,114071,114073],{"class":69,"line":191},[67,114046,74],{"class":73},[67,114048,78],{"class":77},[67,114050,81],{"class":73},[67,114052,85],{"class":84},[67,114054,113628],{"class":73},[67,114056,992],{"class":77},[67,114058,986],{"class":84},[67,114060,113635],{"class":73},[67,114062,2077],{"class":77},[67,114064,113640],{"class":73},[67,114066,1863],{"class":84},[67,114068,104100],{"class":77},[67,114070,1868],{"class":73},[67,114072,104100],{"class":77},[67,114074,829],{"class":73},[67,114076,114077,114079,114081,114083,114085,114087,114089,114091,114093,114095,114097,114099,114101,114103,114105],{"class":69,"line":202},[67,114078,74],{"class":73},[67,114080,2209],{"class":77},[67,114082,81],{"class":73},[67,114084,85],{"class":84},[67,114086,113628],{"class":73},[67,114088,992],{"class":77},[67,114090,986],{"class":84},[67,114092,113635],{"class":73},[67,114094,78],{"class":77},[67,114096,113640],{"class":73},[67,114098,1863],{"class":84},[67,114100,104100],{"class":77},[67,114102,1868],{"class":73},[67,114104,104100],{"class":77},[67,114106,829],{"class":73},[19,114108,114109],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[391,114111,1246],{"id":1246},[58,114113,114114],{"className":60,"code":113924,"language":62,"meta":63,"style":63},[32,114115,114116],{"__ignoreMap":63},[67,114117,114118,114120,114122,114124,114126],{"class":69,"line":70},[67,114119,801],{"class":84},[67,114121,113294],{"class":110},[67,114123,113297],{"class":73},[67,114125,3157],{"class":77},[67,114127,113302],{"class":73},[19,114129,114130,114131,114133,114134,84298,114136,230],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[32,114132,81570],{}," 是 site 的名字，比如 ",[32,114135,112974],{},[32,114137,113397],{},[58,114139,114141],{"className":60,"code":114140,"language":62,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[32,114142,114143],{"__ignoreMap":63},[67,114144,114145,114147,114149],{"class":69,"line":70},[67,114146,105312],{"class":73},[67,114148,85],{"class":84},[67,114150,113311],{"class":73},[19,114152,114153],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[58,114155,114157],{"className":60,"code":114156,"language":62,"meta":63,"style":63},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[32,114158,114159,114171],{"__ignoreMap":63},[67,114160,114161,114163,114165,114167,114169],{"class":69,"line":70},[67,114162,1096],{"class":84},[67,114164,105128],{"class":73},[67,114166,259],{"class":84},[67,114168,5913],{"class":77},[67,114170,813],{"class":73},[67,114172,114173,114175,114177,114179,114181,114183,114185,114187,114189,114191],{"class":69,"line":191},[67,114174,1171],{"class":84},[67,114176,917],{"class":77},[67,114178,854],{"class":73},[67,114180,2052],{"class":84},[67,114182,113336],{"class":114},[67,114184,2885],{"class":77},[67,114186,81570],{"class":73},[67,114188,2934],{"class":77},[67,114190,2243],{"class":114},[67,114192,829],{"class":73},[19,114194,114195,114196,114199,114200,114202],{},"如果 site 没找到，就主动报错。",[32,114197,114198],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[32,114201,81570],{}," 的值放进字符串里。",[58,114204,114206],{"className":60,"code":114205,"language":62,"meta":63,"style":63},"return data.site_xpos[site_id].copy()\n",[32,114207,114208],{"__ignoreMap":63},[67,114209,114210,114212],{"class":69,"line":70},[67,114211,18843],{"class":84},[67,114213,113353],{"class":73},[19,114215,114216,114217,114219,114220,114223],{},"返回这个 site 的世界坐标。",[32,114218,105358],{}," 里的每一行都是一个 site 的 ",[32,114221,114222],{},"(x, y, z)"," 坐标。",[58,114225,114227],{"className":60,"code":114226,"language":62,"meta":63,"style":63},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[32,114228,114229],{"__ignoreMap":63},[67,114230,114231,114233,114235],{"class":69,"line":70},[67,114232,801],{"class":84},[67,114234,113368],{"class":110},[67,114236,113371],{"class":73},[19,114238,114239],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[58,114241,114243],{"className":60,"code":114242,"language":62,"meta":63,"style":63},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[32,114244,114245,114257],{"__ignoreMap":63},[67,114246,114247,114249,114251,114253,114255],{"class":69,"line":70},[67,114248,113006],{"class":73},[67,114250,85],{"class":84},[67,114252,113381],{"class":73},[67,114254,112974],{"class":114},[67,114256,829],{"class":73},[67,114258,114259,114261,114263,114265,114267],{"class":69,"line":191},[67,114260,113016],{"class":73},[67,114262,85],{"class":84},[67,114264,113381],{"class":73},[67,114266,113397],{"class":114},[67,114268,829],{"class":73},[19,114270,114271],{},"分别读取末端点和目标点的世界坐标。",[58,114273,114274],{"className":60,"code":113946,"language":62,"meta":63,"style":63},[32,114275,114276],{"__ignoreMap":63},[67,114277,114278,114280],{"class":69,"line":70},[67,114279,18843],{"class":84},[67,114281,113406],{"class":73},[19,114283,114284],{},"把四部分拼成一个观测数组：",[58,114286,114289],{"className":114287,"code":114288,"language":603,"meta":63},[601],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[32,114290,114288],{"__ignoreMap":63},[58,114292,114294],{"className":60,"code":114293,"language":62,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\n",[32,114295,114296],{"__ignoreMap":63},[67,114297,114298,114300,114302,114304,114306],{"class":69,"line":70},[67,114299,113034],{"class":73},[67,114301,85],{"class":84},[67,114303,113039],{"class":73},[67,114305,1863],{"class":84},[67,114307,113044],{"class":73},[19,114309,114310,114311,114314,114315,114318],{},"计算 tip 到 target 的距离。",[32,114312,114313],{},"tip - target"," 得到一个三维向量，",[32,114316,114317],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114320,16431],{},[58,114322,114325],{"className":114323,"code":114324,"language":603,"meta":63},[601],"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",[32,114326,114324],{"__ignoreMap":63},[58,114328,114330],{"className":60,"code":114329,"language":62,"meta":63,"style":63},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[32,114331,114332],{"__ignoreMap":63},[67,114333,114334,114336,114338,114340,114342],{"class":69,"line":70},[67,114335,113981],{"class":73},[67,114337,85],{"class":84},[67,114339,113475],{"class":77},[67,114341,986],{"class":84},[67,114343,113480],{"class":73},[19,114345,114346,114347,114350,114351,114354],{},"计算动作惩罚。",[32,114348,114349],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[32,114352,114353],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[58,114356,114358],{"className":60,"code":114357,"language":62,"meta":63,"style":63},"return float(-dist - control_cost)\n",[32,114359,114360],{"__ignoreMap":63},[67,114361,114362,114364,114366,114368,114370,114372,114374],{"class":69,"line":70},[67,114363,18843],{"class":84},[67,114365,111235],{"class":77},[67,114367,854],{"class":73},[67,114369,1863],{"class":84},[67,114371,113034],{"class":73},[67,114373,1863],{"class":84},[67,114375,113497],{"class":73},[19,114377,114378],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[58,114380,114381],{"className":60,"code":112241,"language":62,"meta":63,"style":63},[32,114382,114383],{"__ignoreMap":63},[67,114384,114385,114387,114389],{"class":69,"line":70},[67,114386,112248],{"class":73},[67,114388,85],{"class":84},[67,114390,106430],{"class":77},[19,114392,114393],{},"累计奖励变量，记录整个运行过程的总分。",[58,114395,114397],{"className":60,"code":114396,"language":62,"meta":63,"style":63},"for step in range(500):\n",[32,114398,114399],{"__ignoreMap":63},[67,114400,114401,114403,114405,114407,114409,114411,114413],{"class":69,"line":70},[67,114402,1512],{"class":84},[67,114404,938],{"class":73},[67,114406,941],{"class":84},[67,114408,944],{"class":77},[67,114410,854],{"class":73},[67,114412,66834],{"class":77},[67,114414,952],{"class":73},[19,114416,114417],{},"运行 500 个控制步。",[58,114419,114420],{"className":60,"code":106212,"language":62,"meta":63,"style":63},[32,114421,114422],{"__ignoreMap":63},[67,114423,114424],{"class":69,"line":70},[67,114425,106212],{"class":73},[19,114427,114428,114429,1264,114431,114433],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[32,114430,104912],{},[32,114432,104915],{}," 是当前状态下的坐标。",[58,114435,114437],{"className":60,"code":114436,"language":62,"meta":63,"style":63},"error = target - tip\n",[32,114438,114439],{"__ignoreMap":63},[67,114440,114441,114443,114445,114447,114449],{"class":69,"line":70},[67,114442,114034],{"class":73},[67,114444,85],{"class":84},[67,114446,113606],{"class":73},[67,114448,1863],{"class":84},[67,114450,113611],{"class":73},[19,114452,114453],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[58,114455,114457],{"className":60,"code":114456,"language":62,"meta":63,"style":63},"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",[32,114458,114459,114491],{"__ignoreMap":63},[67,114460,114461,114463,114465,114467,114469,114471,114473,114475,114477,114479,114481,114483,114485,114487,114489],{"class":69,"line":70},[67,114462,74],{"class":73},[67,114464,78],{"class":77},[67,114466,81],{"class":73},[67,114468,85],{"class":84},[67,114470,113628],{"class":73},[67,114472,992],{"class":77},[67,114474,986],{"class":84},[67,114476,113635],{"class":73},[67,114478,2077],{"class":77},[67,114480,113640],{"class":73},[67,114482,1863],{"class":84},[67,114484,104100],{"class":77},[67,114486,1868],{"class":73},[67,114488,104100],{"class":77},[67,114490,829],{"class":73},[67,114492,114493,114495,114497,114499,114501,114503,114505,114507,114509,114511,114513,114515,114517,114519,114521],{"class":69,"line":191},[67,114494,74],{"class":73},[67,114496,2209],{"class":77},[67,114498,81],{"class":73},[67,114500,85],{"class":84},[67,114502,113628],{"class":73},[67,114504,992],{"class":77},[67,114506,986],{"class":84},[67,114508,113635],{"class":73},[67,114510,78],{"class":77},[67,114512,113640],{"class":73},[67,114514,1863],{"class":84},[67,114516,104100],{"class":77},[67,114518,1868],{"class":73},[67,114520,104100],{"class":77},[67,114522,829],{"class":73},[19,114524,114525,114526,114529],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[32,114527,114528],{},"error -> ctrl -> step"," 的流程。",[58,114531,114532],{"className":60,"code":1234,"language":62,"meta":63,"style":63},[32,114533,114534],{"__ignoreMap":63},[67,114535,114536],{"class":69,"line":70},[67,114537,1234],{"class":73},[19,114539,114540],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[58,114542,114544],{"className":60,"code":114543,"language":62,"meta":63,"style":63},"obs = get_obs(model, data)\n",[32,114545,114546],{"__ignoreMap":63},[67,114547,114548,114550,114552],{"class":69,"line":70},[67,114549,112292],{"class":73},[67,114551,85],{"class":84},[67,114553,113729],{"class":73},[19,114555,114556,114557,114560],{},"读取最新观测。后面打印 ",[32,114558,114559],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114562,1647],{"id":1646},[19,114564,114565],{},"观测维度为:",[58,114567,114570],{"className":114568,"code":114569,"language":603,"meta":63},[601],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[32,114571,114569],{"__ignoreMap":63},[19,114573,114574],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114576,114577],{},"程序每 100 步打印：",[58,114579,114582],{"className":114580,"code":114581,"language":603,"meta":63},[601],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[32,114583,114581],{"__ignoreMap":63},[19,114585,114586,114587,114589],{},"如果控制有效，你应该看到最终 ",[32,114588,104912],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114591,1696],{"id":1695},[26,114593,114594,114597,114600,114606,114612,114619,114629],{},[29,114595,114596],{},"修改目标点位置。",[29,114598,114599],{},"重新运行，观察最终 tip 是否变化。",[29,114601,114602,114603,114605],{},"把 gravity 改成 ",[32,114604,104280],{},"，观察控制是否变差。",[29,114607,112619,114608,112623,114610,230],{},[32,114609,229],{},[32,114611,2077],{},[29,114613,1701,114614,1704,114616,114618],{},[32,114615,112034],{},[32,114617,1717],{},"，观察机械臂是否更难移动。",[29,114620,1701,114621,84289,114623,1704,114625,114628],{},[32,114622,104915],{},[32,114624,105820],{},[32,114626,114627],{},"0.2 0 0.6","，观察 reward 和 final tip。",[29,114630,114631],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114633,1748],{"id":1747},[391,114635,114637],{"id":114636},"site-not-found",[32,114638,114639],{},"site not found",[19,114641,114642,114643,1264,114646,230],{},"检查 XML 中是否有 ",[32,114644,114645],{},"site name=\"tip\"",[32,114647,114648],{},"site name=\"target\"",[391,114650,114651],{"id":114651},"机械臂完全不动",[19,114653,104215],{},[26,114655,114656,114661,114664,114669],{},[29,114657,114658,114660],{},[32,114659,229],{}," 是否为 2",[29,114662,114663],{},"actuator 是否引用正确 joint",[29,114665,114666,114668],{},[32,114667,45],{}," 是否被赋值",[29,114670,114671,114672],{},"是否执行了 ",[32,114673,102440],{},[391,114675,114676],{"id":114676},"控制效果不好",[19,114678,114679],{},"正常。本章重点不是控制器最优，而是任务结构:",[58,114681,114684],{"className":114682,"code":114683,"language":603,"meta":63},[601],"obs → action → mj_step → reward → next_obs\n",[32,114685,114683],{"__ignoreMap":63},[391,114687,114689],{"id":114688},"tip-坐标不变化","tip 坐标不变化",[19,114691,1804],{},[26,114693,114694,114699,114707,114716],{},[29,114695,114696,114697,230],{},"是否每步调用了 ",[32,114698,102440],{},[29,114700,114701,114702,1264,114704,230],{},"是否写入了 ",[32,114703,385],{},[32,114705,114706],{},"data.ctrl[1]",[29,114708,114709,114710,2204,114713,230],{},"actuator 是否正确引用 ",[32,114711,114712],{},"joint1",[32,114714,114715],{},"joint2",[29,114717,114718],{},"控制输入是否太小。",[391,114720,114721],{"id":114721},"目标点不会动",[19,114723,114724],{},"本章的 target 是固定 site：",[58,114726,114728],{"className":250,"code":114727,"language":252,"meta":63,"style":63},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[32,114729,114730],{"__ignoreMap":63},[67,114731,114732,114734,114736,114738,114740,114742,114744,114746,114749],{"class":69,"line":70},[67,114733,259],{"class":73},[67,114735,104891],{"class":262},[67,114737,266],{"class":110},[67,114739,85],{"class":73},[67,114741,113397],{"class":114},[67,114743,102842],{"class":110},[67,114745,85],{"class":73},[67,114747,114748],{"class":114},"\"0.5 0 0.4\"",[67,114750,114751],{"class":73}," ...\u002F>\n",[19,114753,114754,114755,114757],{},"它直接挂在 ",[32,114756,103545],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[391,114759,114760],{"id":114760},"机械臂不像真实机械臂",[19,114762,114763],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114765,1889],{"id":1888},[19,114767,114768],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114770,114771],{},"核心公式：",[58,114773,114776],{"className":114774,"code":114775,"language":603,"meta":63},[601],"distance = ||tip - target||\nreward = -distance - action_cost\n",[32,114777,114775],{"__ignoreMap":63},[19,114779,114780],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1903,114782,114783],{},"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":63,"searchDepth":191,"depth":191,"links":114785},[114786,114787,114788,114793,114797,114798,114799,114807],{"id":16,"depth":191,"text":17},{"id":94,"depth":191,"text":95},{"id":243,"depth":191,"text":244,"children":114789},[114790,114791,114792],{"id":112989,"depth":202,"text":112990},{"id":113065,"depth":202,"text":113065},{"id":113095,"depth":202,"text":113096},{"id":611,"depth":191,"text":612,"children":114794},[114795,114796],{"id":1146,"depth":202,"text":1146},{"id":1246,"depth":202,"text":1246},{"id":1646,"depth":191,"text":1647},{"id":1695,"depth":191,"text":1696},{"id":1747,"depth":191,"text":1748,"children":114800},[114801,114802,114803,114804,114805,114806],{"id":114636,"depth":202,"text":114639},{"id":114651,"depth":202,"text":114651},{"id":114676,"depth":202,"text":114676},{"id":114688,"depth":202,"text":114689},{"id":114721,"depth":202,"text":114721},{"id":114760,"depth":202,"text":114760},{"id":1888,"depth":191,"text":1889},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112793,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114814,"title":114815,"body":114816,"description":63,"extension":1930,"meta":118278,"navigation":630,"path":118279,"seo":118280,"stem":118281,"__hash__":118282},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114817,"toc":118249},[114818,114821,114823,114826,114829,114854,114857,114863,114866,114872,114874,114876,114900,114902,114920,114922,114965,114967,114994,114996,114999,115051,115054,115060,115069,115072,115110,115113,115152,115155,115163,115170,115173,115179,115181,115235,115242,115287,115290,115294,115310,115320,115322,116583,116585,116597,116599,116610,116612,116615,116636,116639,116642,116675,116681,116684,116717,116720,116723,116764,116769,116783,116786,116799,116804,116827,116829,116844,116854,116869,116876,116896,116911,116929,116932,116949,116957,116973,116979,117011,117024,117056,117066,117101,117115,117161,117175,117217,117228,117241,117247,117280,117283,117310,117320,117360,117370,117387,117394,117412,117415,117456,117469,117484,117487,117510,117513,117525,117528,117547,117552,117573,117576,117591,117594,117628,117640,117655,117658,117683,117686,117705,117708,117740,117743,117767,117773,117803,117810,117823,117826,117828,117830,117836,117839,117842,117854,117857,117859,117913,117915,117919,117925,117934,117937,117944,117946,117969,117972,117976,117978,117996,118002,118004,118037,118040,118046,118050,118053,118073,118078,118082,118089,118109,118114,118118,118121,118141,118144,118230,118234,118237,118243,118246],[10,114819,114815],{"id":114820},"_8gymnasium-风格强化学习接口基础",[14,114822,17],{"id":16},[19,114824,114825],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114827,114828],{},"你将实现:",[58,114830,114832],{"className":60,"code":114831,"language":62,"meta":63,"style":63},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[32,114833,114834,114844],{"__ignoreMap":63},[67,114835,114836,114839,114841],{"class":69,"line":70},[67,114837,114838],{"class":73},"obs, info ",[67,114840,85],{"class":84},[67,114842,114843],{"class":73}," env.reset()\n",[67,114845,114846,114849,114851],{"class":69,"line":191},[67,114847,114848],{"class":73},"obs, reward, terminated, truncated, info ",[67,114850,85],{"class":84},[67,114852,114853],{"class":73}," env.step(action)\n",[19,114855,114856],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114858,114859,114860,114862],{},"前面章节的代码都是“脚本式”的：在 ",[32,114861,103997],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114864,114865],{},"可以先记住 Gymnasium 环境的核心交互：",[58,114867,114870],{"className":114868,"code":114869,"language":603,"meta":63},[601],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[32,114871,114869],{"__ignoreMap":63},[14,114873,95],{"id":94},[19,114875,98],{},[58,114877,114878],{"className":101,"code":102,"language":103,"meta":63,"style":63},[32,114879,114880],{"__ignoreMap":63},[67,114881,114882,114884,114886,114888,114890,114892,114894,114896,114898],{"class":69,"line":70},[67,114883,111],{"class":110},[67,114885,115],{"class":114},[67,114887,118],{"class":114},[67,114889,121],{"class":77},[67,114891,124],{"class":114},[67,114893,127],{"class":114},[67,114895,130],{"class":114},[67,114897,133],{"class":114},[67,114899,136],{"class":114},[19,114901,139],{},[58,114903,114905],{"className":101,"code":114904,"language":103,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[32,114906,114907],{"__ignoreMap":63},[67,114908,114909,114911,114913,114915,114917],{"class":69,"line":70},[67,114910,149],{"class":110},[67,114912,118],{"class":114},[67,114914,154],{"class":114},[67,114916,109149],{"class":114},[67,114918,114919],{"class":114}," gymnasium\n",[19,114921,160],{},[58,114923,114925],{"className":101,"code":114924,"language":103,"meta":63,"style":63},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[32,114926,114927,114944,114953],{"__ignoreMap":63},[67,114928,114929,114931,114933,114935,114938,114940,114942],{"class":69,"line":70},[67,114930,170],{"class":110},[67,114932,173],{"class":114},[67,114934,176],{"class":77},[67,114936,114937],{"class":114}," mujoco-gym-api",[67,114939,182],{"class":114},[67,114941,185],{"class":77},[67,114943,188],{"class":77},[67,114945,114946,114948,114950],{"class":69,"line":191},[67,114947,170],{"class":110},[67,114949,196],{"class":114},[67,114951,114952],{"class":114}," mujoco-gym-api\n",[67,114954,114955,114957,114959,114961,114963],{"class":69,"line":202},[67,114956,149],{"class":110},[67,114958,118],{"class":114},[67,114960,154],{"class":114},[67,114962,109149],{"class":114},[67,114964,114919],{"class":114},[19,114966,213],{},[26,114968,114969,114979,114982,114988],{},[29,114970,114971,114972,114975,114976,230],{},"本章使用 ",[32,114973,114974],{},"gymnasium","，不是旧版 ",[32,114977,114978],{},"gym",[29,114980,114981],{},"Gymnasium API 与旧 Gym API 有差异。",[29,114983,114984,114985,230],{},"旧 Gym 常见返回值是 4 个: ",[32,114986,114987],{},"obs, reward, done, info",[29,114989,114990,114991,230],{},"Gymnasium 返回值是 5 个: ",[32,114992,114993],{},"obs, reward, terminated, truncated, info",[14,114995,244],{"id":243},[19,114997,114998],{},"强化学习环境接口包含:",[399,115000,115001,115010],{},[402,115002,115003],{},[405,115004,115005,115008],{},[408,115006,115007],{"align":410},"方法",[408,115009,414],{"align":410},[419,115011,115012,115022,115032,115042],{},[405,115013,115014,115019],{},[424,115015,115016],{"align":410},[32,115017,115018],{},"reset()",[424,115020,115021],{"align":410},"重置环境",[405,115023,115024,115029],{},[424,115025,115026],{"align":410},[32,115027,115028],{},"step(action)",[424,115030,115031],{"align":410},"执行动作",[405,115033,115034,115039],{},[424,115035,115036],{"align":410},[32,115037,115038],{},"observation_space",[424,115040,115041],{"align":410},"观测空间",[405,115043,115044,115049],{},[424,115045,115046],{"align":410},[32,115047,115048],{},"action_space",[424,115050,25451],{"align":410},[19,115052,115053],{},"一个最小环境需要完成:",[58,115055,115058],{"className":115056,"code":115057,"language":603,"meta":63},[601],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[32,115059,115057],{"__ignoreMap":63},[391,115061,115063,1264,115066,106307],{"id":115062},"terminated-和-truncated-的区别",[32,115064,115065],{},"terminated",[32,115067,115068],{},"truncated",[19,115070,115071],{},"Gymnasium 把“结束”拆成两个概念：",[399,115073,115074,115084],{},[402,115075,115076],{},[405,115077,115078,115080,115082],{},[408,115079,106243],{"align":410},[408,115081,102455],{"align":410},[408,115083,22983],{"align":410},[419,115085,115086,115098],{},[405,115087,115088,115092,115095],{},[424,115089,115090],{"align":410},[32,115091,115065],{},[424,115093,115094],{"align":410},"任务自然结束",[424,115096,115097],{"align":410},"机械臂到达目标、机器人摔倒",[405,115099,115100,115104,115107],{},[424,115101,115102],{"align":410},[32,115103,115068],{},[424,115105,115106],{"align":410},"因外部限制截断",[424,115108,115109],{"align":410},"达到最大步数、时间限制",[19,115111,115112],{},"本章中：",[58,115114,115116],{"className":60,"code":115115,"language":62,"meta":63,"style":63},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[32,115117,115118,115133],{"__ignoreMap":63},[67,115119,115120,115123,115125,115128,115130],{"class":69,"line":70},[67,115121,115122],{"class":73},"terminated ",[67,115124,85],{"class":84},[67,115126,115127],{"class":73}," dist ",[67,115129,259],{"class":84},[67,115131,115132],{"class":77}," 0.05\n",[67,115134,115135,115138,115140,115142,115145,115147,115149],{"class":69,"line":191},[67,115136,115137],{"class":73},"truncated ",[67,115139,85],{"class":84},[67,115141,40641],{"class":77},[67,115143,115144],{"class":73},".steps ",[67,115146,3553],{"class":84},[67,115148,40641],{"class":77},[67,115150,115151],{"class":73},".max_steps\n",[19,115153,115154],{},"也就是：",[26,115156,115157,115160],{},[29,115158,115159],{},"末端距离目标小于 0.05，任务成功结束。",[29,115161,115162],{},"步数超过上限，episode 被截断。",[391,115164,115166,1264,115168],{"id":115165},"observation_space-和-action_space",[32,115167,115038],{},[32,115169,115048],{},[19,115171,115172],{},"这两个对象告诉算法：",[58,115174,115177],{"className":115175,"code":115176,"language":603,"meta":63},[601],"观测长什么样\n动作允许多大\n",[32,115178,115176],{"__ignoreMap":63},[19,115180,16431],{},[58,115182,115184],{"className":60,"code":115183,"language":62,"meta":63,"style":63},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[32,115185,115186],{"__ignoreMap":63},[67,115187,115188,115190,115193,115195,115198,115201,115204,115206,115208,115211,115213,115215,115217,115219,115221,115223,115225,115228,115230,115232],{"class":69,"line":70},[67,115189,32600],{"class":77},[67,115191,115192],{"class":73},".action_space ",[67,115194,85],{"class":84},[67,115196,115197],{"class":73}," spaces.Box(",[67,115199,115200],{"class":7033},"low",[67,115202,115203],{"class":84},"=-",[67,115205,104100],{"class":77},[67,115207,1868],{"class":73},[67,115209,115210],{"class":7033},"high",[67,115212,85],{"class":84},[67,115214,104100],{"class":77},[67,115216,1868],{"class":73},[67,115218,97720],{"class":7033},[67,115220,85],{"class":84},[67,115222,854],{"class":73},[67,115224,2077],{"class":77},[67,115226,115227],{"class":73},",), ",[67,115229,95259],{"class":7033},[67,115231,85],{"class":84},[67,115233,115234],{"class":73},"np.float32)\n",[19,115236,115237,115238,115241],{},"表示动作是 2 维数组，每个值都在 ",[32,115239,115240],{},"[-1, 1]"," 范围内。",[58,115243,115245],{"className":60,"code":115244,"language":62,"meta":63,"style":63},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[32,115246,115247],{"__ignoreMap":63},[67,115248,115249,115251,115254,115256,115258,115260,115262,115265,115267,115269,115271,115273,115275,115277,115279,115281,115283,115285],{"class":69,"line":70},[67,115250,32600],{"class":77},[67,115252,115253],{"class":73},".observation_space ",[67,115255,85],{"class":84},[67,115257,115197],{"class":73},[67,115259,115200],{"class":7033},[67,115261,115203],{"class":84},[67,115263,115264],{"class":73},"np.inf, ",[67,115266,115210],{"class":7033},[67,115268,85],{"class":84},[67,115270,115264],{"class":73},[67,115272,97720],{"class":7033},[67,115274,85],{"class":84},[67,115276,854],{"class":73},[67,115278,2437],{"class":77},[67,115280,115227],{"class":73},[67,115282,95259],{"class":7033},[67,115284,85],{"class":84},[67,115286,115234],{"class":73},[19,115288,115289],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[391,115291,115293],{"id":115292},"frame_skip-是什么","frame_skip 是什么",[58,115295,115297],{"className":60,"code":115296,"language":62,"meta":63,"style":63},"self.frame_skip = 5\n",[32,115298,115299],{"__ignoreMap":63},[67,115300,115301,115303,115306,115308],{"class":69,"line":70},[67,115302,32600],{"class":77},[67,115304,115305],{"class":73},".frame_skip ",[67,115307,85],{"class":84},[67,115309,56188],{"class":77},[19,115311,115312,115313,115316,115317,115319],{},"表示外部调用一次 ",[32,115314,115315],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[32,115318,102948],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115321,612],{"id":611},[58,115323,115325],{"className":60,"code":115324,"language":62,"meta":63,"style":63},"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",[32,115326,115327,115339,115345,115355,115366,115370,115374,115382,115387,115391,115395,115399,115403,115407,115411,115415,115420,115424,115428,115432,115437,115441,115445,115449,115453,115457,115461,115465,115469,115473,115477,115481,115485,115489,115507,115522,115526,115539,115549,115564,115581,115585,115606,115625,115650,115664,115668,115678,115690,115700,115704,115746,115784,115788,115798,115814,115829,115848,115855,115859,115872,115887,115902,115915,115934,115950,115954,115995,116010,116025,116029,116068,116079,116092,116096,116106,116115,116119,116129,116144,116162,116166,116177,116194,116207,116211,116221,116225,116236,116247,116251,116265,116279,116295,116299,116312,116329,116344,116351,116355,116359,116371,116381,116399,116411,116423,116427,116435,116451,116460,116469,116477,116519,116532,116537,116541,116559,116563,116567,116579],{"__ignoreMap":63},[67,115328,115329,115331,115334,115336],{"class":69,"line":70},[67,115330,622],{"class":84},[67,115332,115333],{"class":73}," gymnasium ",[67,115335,649],{"class":84},[67,115337,115338],{"class":73}," gym\n",[67,115340,115341,115343],{"class":69,"line":191},[67,115342,622],{"class":84},[67,115344,638],{"class":73},[67,115346,115347,115349,115351,115353],{"class":69,"line":202},[67,115348,622],{"class":84},[67,115350,646],{"class":73},[67,115352,649],{"class":84},[67,115354,652],{"class":73},[67,115356,115357,115359,115361,115363],{"class":69,"line":641},[67,115358,32515],{"class":84},[67,115360,115333],{"class":73},[67,115362,622],{"class":84},[67,115364,115365],{"class":73}," spaces\n",[67,115367,115368],{"class":69,"line":655},[67,115369,631],{"emptyLinePlaceholder":630},[67,115371,115372],{"class":69,"line":660},[67,115373,631],{"emptyLinePlaceholder":630},[67,115375,115376,115378,115380],{"class":69,"line":665},[67,115377,668],{"class":77},[67,115379,671],{"class":84},[67,115381,674],{"class":114},[67,115383,115384],{"class":69,"line":677},[67,115385,115386],{"class":114},"\u003Cmujoco model=\"gym_reacher\">\n",[67,115388,115389],{"class":69,"line":683},[67,115390,113176],{"class":114},[67,115392,115393],{"class":69,"line":689},[67,115394,631],{"emptyLinePlaceholder":630},[67,115396,115397],{"class":69,"line":694},[67,115398,697],{"class":114},[67,115400,115401],{"class":69,"line":700},[67,115402,113194],{"class":114},[67,115404,115405],{"class":69,"line":706},[67,115406,631],{"emptyLinePlaceholder":630},[67,115408,115409],{"class":69,"line":712},[67,115410,113203],{"class":114},[67,115412,115413],{"class":69,"line":717},[67,115414,113208],{"class":114},[67,115416,115417],{"class":69,"line":723},[67,115418,115419],{"class":114},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[67,115421,115422],{"class":69,"line":729},[67,115423,631],{"emptyLinePlaceholder":630},[67,115425,115426],{"class":69,"line":735},[67,115427,113222],{"class":114},[67,115429,115430],{"class":69,"line":741},[67,115431,113227],{"class":114},[67,115433,115434],{"class":69,"line":747},[67,115435,115436],{"class":114},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[67,115438,115439],{"class":69,"line":753},[67,115440,113237],{"class":114},[67,115442,115443],{"class":69,"line":758},[67,115444,738],{"class":114},[67,115446,115447],{"class":69,"line":764},[67,115448,744],{"class":114},[67,115450,115451],{"class":69,"line":770},[67,115452,750],{"class":114},[67,115454,115455],{"class":69,"line":776},[67,115456,631],{"emptyLinePlaceholder":630},[67,115458,115459],{"class":69,"line":782},[67,115460,761],{"class":114},[67,115462,115463],{"class":69,"line":788},[67,115464,113262],{"class":114},[67,115466,115467],{"class":69,"line":793},[67,115468,113267],{"class":114},[67,115470,115471],{"class":69,"line":798},[67,115472,773],{"class":114},[67,115474,115475],{"class":69,"line":816},[67,115476,779],{"class":114},[67,115478,115479],{"class":69,"line":832},[67,115480,785],{"class":114},[67,115482,115483],{"class":69,"line":843},[67,115484,631],{"emptyLinePlaceholder":630},[67,115486,115487],{"class":69,"line":848},[67,115488,631],{"emptyLinePlaceholder":630},[67,115490,115491,115493,115496,115498,115500,115502,115505],{"class":69,"line":863},[67,115492,16492],{"class":84},[67,115494,115495],{"class":110}," ReacherEnv",[67,115497,854],{"class":73},[67,115499,114978],{"class":110},[67,115501,2547],{"class":73},[67,115503,115504],{"class":110},"Env",[67,115506,952],{"class":73},[67,115508,115509,115512,115514,115516,115519],{"class":69,"line":876},[67,115510,115511],{"class":73},"    metadata ",[67,115513,85],{"class":84},[67,115515,6267],{"class":73},[67,115517,115518],{"class":114},"\"render_modes\"",[67,115520,115521],{"class":73},": []}\n",[67,115523,115524],{"class":69,"line":889},[67,115525,631],{"emptyLinePlaceholder":630},[67,115527,115528,115530,115532,115535,115537],{"class":69,"line":894},[67,115529,32578],{"class":84},[67,115531,32581],{"class":77},[67,115533,115534],{"class":73},"(self) -> ",[67,115536,810],{"class":77},[67,115538,813],{"class":73},[67,115540,115541,115543,115545,115547],{"class":69,"line":911},[67,115542,32594],{"class":77},[67,115544,19058],{"class":73},[67,115546,32606],{"class":77},[67,115548,3809],{"class":73},[67,115550,115551,115553,115556,115558,115560,115562],{"class":69,"line":927},[67,115552,32622],{"class":77},[67,115554,115555],{"class":73},".model ",[67,115557,85],{"class":84},[67,115559,824],{"class":73},[67,115561,668],{"class":77},[67,115563,829],{"class":73},[67,115565,115566,115568,115571,115573,115576,115578],{"class":69,"line":932},[67,115567,32622],{"class":77},[67,115569,115570],{"class":73},".data ",[67,115572,85],{"class":84},[67,115574,115575],{"class":73}," mujoco.MjData(",[67,115577,32600],{"class":77},[67,115579,115580],{"class":73},".model)\n",[67,115582,115583],{"class":69,"line":955},[67,115584,631],{"emptyLinePlaceholder":630},[67,115586,115587,115589,115592,115594,115597,115599,115602,115604],{"class":69,"line":971},[67,115588,32622],{"class":77},[67,115590,115591],{"class":73},".tip_site_id ",[67,115593,85],{"class":84},[67,115595,115596],{"class":73}," mujoco.mj_name2id(",[67,115598,32600],{"class":77},[67,115600,115601],{"class":73},".model, mujoco.mjtObj.mjOBJ_SITE, ",[67,115603,112974],{"class":114},[67,115605,829],{"class":73},[67,115607,115608,115610,115613,115615,115617,115619,115621,115623],{"class":69,"line":1010},[67,115609,32622],{"class":77},[67,115611,115612],{"class":73},".target_site_id ",[67,115614,85],{"class":84},[67,115616,115596],{"class":73},[67,115618,32600],{"class":77},[67,115620,115601],{"class":73},[67,115622,113397],{"class":114},[67,115624,829],{"class":73},[67,115626,115627,115629,115631,115633,115635,115637,115640,115642,115644,115646,115648],{"class":69,"line":1016},[67,115628,4329],{"class":84},[67,115630,40641],{"class":77},[67,115632,115591],{"class":73},[67,115634,259],{"class":84},[67,115636,5913],{"class":77},[67,115638,115639],{"class":84}," or",[67,115641,40641],{"class":77},[67,115643,115612],{"class":73},[67,115645,259],{"class":84},[67,115647,5913],{"class":77},[67,115649,813],{"class":73},[67,115651,115652,115655,115657,115659,115662],{"class":69,"line":1021},[67,115653,115654],{"class":84},"            raise",[67,115656,917],{"class":77},[67,115658,854],{"class":73},[67,115660,115661],{"class":114},"\"required sites not found\"",[67,115663,829],{"class":73},[67,115665,115666],{"class":69,"line":1034},[67,115667,631],{"emptyLinePlaceholder":630},[67,115669,115670,115672,115674,115676],{"class":69,"line":1053},[67,115671,32622],{"class":77},[67,115673,115305],{"class":73},[67,115675,85],{"class":84},[67,115677,56188],{"class":77},[67,115679,115680,115682,115685,115687],{"class":69,"line":1070},[67,115681,32622],{"class":77},[67,115683,115684],{"class":73},".max_steps ",[67,115686,85],{"class":84},[67,115688,115689],{"class":77}," 200\n",[67,115691,115692,115694,115696,115698],{"class":69,"line":1083},[67,115693,32622],{"class":77},[67,115695,115144],{"class":73},[67,115697,85],{"class":84},[67,115699,49101],{"class":77},[67,115701,115702],{"class":69,"line":1088},[67,115703,631],{"emptyLinePlaceholder":630},[67,115705,115706,115708,115710,115712,115714,115716,115718,115720,115722,115724,115726,115728,115730,115732,115734,115736,115738,115740,115742,115744],{"class":69,"line":1093},[67,115707,32622],{"class":77},[67,115709,115192],{"class":73},[67,115711,85],{"class":84},[67,115713,115197],{"class":73},[67,115715,115200],{"class":7033},[67,115717,115203],{"class":84},[67,115719,104100],{"class":77},[67,115721,1868],{"class":73},[67,115723,115210],{"class":7033},[67,115725,85],{"class":84},[67,115727,104100],{"class":77},[67,115729,1868],{"class":73},[67,115731,97720],{"class":7033},[67,115733,85],{"class":84},[67,115735,854],{"class":73},[67,115737,2077],{"class":77},[67,115739,115227],{"class":73},[67,115741,95259],{"class":7033},[67,115743,85],{"class":84},[67,115745,115234],{"class":73},[67,115747,115748,115750,115752,115754,115756,115758,115760,115762,115764,115766,115768,115770,115772,115774,115776,115778,115780,115782],{"class":69,"line":1110},[67,115749,32622],{"class":77},[67,115751,115253],{"class":73},[67,115753,85],{"class":84},[67,115755,115197],{"class":73},[67,115757,115200],{"class":7033},[67,115759,115203],{"class":84},[67,115761,115264],{"class":73},[67,115763,115210],{"class":7033},[67,115765,85],{"class":84},[67,115767,115264],{"class":73},[67,115769,97720],{"class":7033},[67,115771,85],{"class":84},[67,115773,854],{"class":73},[67,115775,2437],{"class":77},[67,115777,115227],{"class":73},[67,115779,95259],{"class":7033},[67,115781,85],{"class":84},[67,115783,115234],{"class":73},[67,115785,115786],{"class":69,"line":11603},[67,115787,631],{"emptyLinePlaceholder":630},[67,115789,115790,115792,115795],{"class":69,"line":11612},[67,115791,32578],{"class":84},[67,115793,115794],{"class":110}," _get_obs",[67,115796,115797],{"class":73},"(self) -> np.ndarray:\n",[67,115799,115800,115802,115804,115806,115809,115811],{"class":69,"line":11617},[67,115801,113575],{"class":73},[67,115803,85],{"class":84},[67,115805,40641],{"class":77},[67,115807,115808],{"class":73},".data.site_xpos[",[67,115810,32600],{"class":77},[67,115812,115813],{"class":73},".tip_site_id].copy()\n",[67,115815,115816,115818,115820,115822,115824,115826],{"class":69,"line":11623},[67,115817,113588],{"class":73},[67,115819,85],{"class":84},[67,115821,40641],{"class":77},[67,115823,115808],{"class":73},[67,115825,32600],{"class":77},[67,115827,115828],{"class":73},".target_site_id].copy()\n",[67,115830,115831,115833,115835,115838,115840,115843,115845],{"class":69,"line":11644},[67,115832,111620],{"class":73},[67,115834,85],{"class":84},[67,115836,115837],{"class":73}," np.concatenate([",[67,115839,32600],{"class":77},[67,115841,115842],{"class":73},".data.qpos.copy(), ",[67,115844,32600],{"class":77},[67,115846,115847],{"class":73},".data.qvel.copy(), tip, target])\n",[67,115849,115850,115852],{"class":69,"line":11650},[67,115851,16550],{"class":84},[67,115853,115854],{"class":73}," obs.astype(np.float32)\n",[67,115856,115857],{"class":69,"line":11664},[67,115858,631],{"emptyLinePlaceholder":630},[67,115860,115861,115863,115866,115868,115870],{"class":69,"line":11670},[67,115862,32578],{"class":84},[67,115864,115865],{"class":110}," _get_reward",[67,115867,115534],{"class":73},[67,115869,2041],{"class":77},[67,115871,813],{"class":73},[67,115873,115874,115876,115878,115880,115882,115884],{"class":69,"line":11697},[67,115875,113575],{"class":73},[67,115877,85],{"class":84},[67,115879,40641],{"class":77},[67,115881,115808],{"class":73},[67,115883,32600],{"class":77},[67,115885,115886],{"class":73},".tip_site_id]\n",[67,115888,115889,115891,115893,115895,115897,115899],{"class":69,"line":11706},[67,115890,113588],{"class":73},[67,115892,85],{"class":84},[67,115894,40641],{"class":77},[67,115896,115808],{"class":73},[67,115898,32600],{"class":77},[67,115900,115901],{"class":73},".target_site_id]\n",[67,115903,115904,115907,115909,115911,115913],{"class":69,"line":11712},[67,115905,115906],{"class":73},"        dist ",[67,115908,85],{"class":84},[67,115910,113039],{"class":73},[67,115912,1863],{"class":84},[67,115914,113044],{"class":73},[67,115916,115917,115920,115922,115924,115926,115929,115931],{"class":69,"line":11720},[67,115918,115919],{"class":73},"        control_cost ",[67,115921,85],{"class":84},[67,115923,113475],{"class":77},[67,115925,986],{"class":84},[67,115927,115928],{"class":73}," np.sum(np.square(",[67,115930,32600],{"class":77},[67,115932,115933],{"class":73},".data.ctrl))\n",[67,115935,115936,115938,115940,115942,115944,115946,115948],{"class":69,"line":11725},[67,115937,16550],{"class":84},[67,115939,111235],{"class":77},[67,115941,854],{"class":73},[67,115943,1863],{"class":84},[67,115945,113034],{"class":73},[67,115947,1863],{"class":84},[67,115949,113497],{"class":73},[67,115951,115952],{"class":69,"line":18401},[67,115953,631],{"emptyLinePlaceholder":630},[67,115955,115956,115958,115961,115964,115966,115969,115971,115973,115975,115977,115979,115982,115985,115987,115989,115991,115993],{"class":69,"line":18407},[67,115957,32578],{"class":84},[67,115959,115960],{"class":110}," reset",[67,115962,115963],{"class":73},"(self, ",[67,115965,965],{"class":84},[67,115967,115968],{"class":73},", seed: ",[67,115970,2006],{"class":77},[67,115972,26901],{"class":84},[67,115974,40701],{"class":77},[67,115976,671],{"class":84},[67,115978,40701],{"class":77},[67,115980,115981],{"class":73},", options: ",[67,115983,115984],{"class":77},"dict",[67,115986,26901],{"class":84},[67,115988,40701],{"class":77},[67,115990,671],{"class":84},[67,115992,40701],{"class":77},[67,115994,952],{"class":73},[67,115996,115997,115999,116002,116005,116007],{"class":69,"line":18430},[67,115998,32594],{"class":77},[67,116000,116001],{"class":73},"().reset(",[67,116003,116004],{"class":7033},"seed",[67,116006,85],{"class":84},[67,116008,116009],{"class":73},"seed)\n",[67,116011,116012,116015,116017,116020,116022],{"class":69,"line":18436},[67,116013,116014],{"class":73},"        mujoco.mj_resetData(",[67,116016,32600],{"class":77},[67,116018,116019],{"class":73},".model, ",[67,116021,32600],{"class":77},[67,116023,116024],{"class":73},".data)\n",[67,116026,116027],{"class":69,"line":18459},[67,116028,631],{"emptyLinePlaceholder":630},[67,116030,116031,116033,116036,116038,116040,116043,116045,116047,116049,116051,116053,116055,116057,116059,116061,116063,116065],{"class":69,"line":18473},[67,116032,32622],{"class":77},[67,116034,116035],{"class":73},".data.qpos[:] ",[67,116037,85],{"class":84},[67,116039,40641],{"class":77},[67,116041,116042],{"class":73},".np_random.uniform(",[67,116044,115200],{"class":7033},[67,116046,115203],{"class":84},[67,116048,87969],{"class":77},[67,116050,1868],{"class":73},[67,116052,115210],{"class":7033},[67,116054,85],{"class":84},[67,116056,87969],{"class":77},[67,116058,1868],{"class":73},[67,116060,33268],{"class":7033},[67,116062,85],{"class":84},[67,116064,32600],{"class":77},[67,116066,116067],{"class":73},".model.nq)\n",[67,116069,116070,116072,116075,116077],{"class":69,"line":18493},[67,116071,32622],{"class":77},[67,116073,116074],{"class":73},".data.qvel[:] ",[67,116076,85],{"class":84},[67,116078,106430],{"class":77},[67,116080,116081,116084,116086,116088,116090],{"class":69,"line":18499},[67,116082,116083],{"class":73},"        mujoco.mj_forward(",[67,116085,32600],{"class":77},[67,116087,116019],{"class":73},[67,116089,32600],{"class":77},[67,116091,116024],{"class":73},[67,116093,116094],{"class":69,"line":18510},[67,116095,631],{"emptyLinePlaceholder":630},[67,116097,116098,116100,116102,116104],{"class":69,"line":18533},[67,116099,32622],{"class":77},[67,116101,115144],{"class":73},[67,116103,85],{"class":84},[67,116105,49101],{"class":77},[67,116107,116108,116110,116112],{"class":69,"line":18555},[67,116109,16550],{"class":84},[67,116111,40641],{"class":77},[67,116113,116114],{"class":73},"._get_obs(), {}\n",[67,116116,116117],{"class":69,"line":18560},[67,116118,631],{"emptyLinePlaceholder":630},[67,116120,116121,116123,116126],{"class":69,"line":18566},[67,116122,32578],{"class":84},[67,116124,116125],{"class":110}," step",[67,116127,116128],{"class":73},"(self, action):\n",[67,116130,116131,116133,116135,116138,116140,116142],{"class":69,"line":18580},[67,116132,111660],{"class":73},[67,116134,85],{"class":84},[67,116136,116137],{"class":73}," np.asarray(action, ",[67,116139,95259],{"class":7033},[67,116141,85],{"class":84},[67,116143,115234],{"class":73},[67,116145,116146,116148,116150,116152,116154,116157,116159],{"class":69,"line":18593},[67,116147,111660],{"class":73},[67,116149,85],{"class":84},[67,116151,1860],{"class":73},[67,116153,32600],{"class":77},[67,116155,116156],{"class":73},".action_space.low, ",[67,116158,32600],{"class":77},[67,116160,116161],{"class":73},".action_space.high)\n",[67,116163,116164],{"class":69,"line":18598},[67,116165,631],{"emptyLinePlaceholder":630},[67,116167,116168,116170,116173,116175],{"class":69,"line":18612},[67,116169,32622],{"class":77},[67,116171,116172],{"class":73},".data.ctrl[:] ",[67,116174,85],{"class":84},[67,116176,1885],{"class":73},[67,116178,116179,116181,116183,116185,116187,116189,116191],{"class":69,"line":18617},[67,116180,5225],{"class":84},[67,116182,103212],{"class":73},[67,116184,941],{"class":84},[67,116186,944],{"class":77},[67,116188,854],{"class":73},[67,116190,32600],{"class":77},[67,116192,116193],{"class":73},".frame_skip):\n",[67,116195,116196,116199,116201,116203,116205],{"class":69,"line":18623},[67,116197,116198],{"class":73},"            mujoco.mj_step(",[67,116200,32600],{"class":77},[67,116202,116019],{"class":73},[67,116204,32600],{"class":77},[67,116206,116024],{"class":73},[67,116208,116209],{"class":69,"line":18628},[67,116210,631],{"emptyLinePlaceholder":630},[67,116212,116213,116215,116217,116219],{"class":69,"line":18642},[67,116214,32622],{"class":77},[67,116216,115144],{"class":73},[67,116218,11283],{"class":84},[67,116220,57460],{"class":77},[67,116222,116223],{"class":69,"line":18647},[67,116224,631],{"emptyLinePlaceholder":630},[67,116226,116227,116229,116231,116233],{"class":69,"line":18652},[67,116228,111620],{"class":73},[67,116230,85],{"class":84},[67,116232,40641],{"class":77},[67,116234,116235],{"class":73},"._get_obs()\n",[67,116237,116238,116240,116242,116244],{"class":69,"line":18666},[67,116239,111725],{"class":73},[67,116241,85],{"class":84},[67,116243,40641],{"class":77},[67,116245,116246],{"class":73},"._get_reward()\n",[67,116248,116249],{"class":69,"line":18678},[67,116250,631],{"emptyLinePlaceholder":630},[67,116252,116253,116255,116257,116259,116261,116263],{"class":69,"line":18683},[67,116254,113575],{"class":73},[67,116256,85],{"class":84},[67,116258,40641],{"class":77},[67,116260,115808],{"class":73},[67,116262,32600],{"class":77},[67,116264,115886],{"class":73},[67,116266,116267,116269,116271,116273,116275,116277],{"class":69,"line":18696},[67,116268,113588],{"class":73},[67,116270,85],{"class":84},[67,116272,40641],{"class":77},[67,116274,115808],{"class":73},[67,116276,32600],{"class":77},[67,116278,115901],{"class":73},[67,116280,116281,116283,116285,116287,116290,116292],{"class":69,"line":18701},[67,116282,115906],{"class":73},[67,116284,85],{"class":84},[67,116286,111235],{"class":77},[67,116288,116289],{"class":73},"(np.linalg.norm(tip ",[67,116291,1863],{"class":84},[67,116293,116294],{"class":73}," target))\n",[67,116296,116297],{"class":69,"line":18706},[67,116298,631],{"emptyLinePlaceholder":630},[67,116300,116301,116304,116306,116308,116310],{"class":69,"line":18711},[67,116302,116303],{"class":73},"        terminated ",[67,116305,85],{"class":84},[67,116307,115127],{"class":73},[67,116309,259],{"class":84},[67,116311,115132],{"class":77},[67,116313,116314,116317,116319,116321,116323,116325,116327],{"class":69,"line":18724},[67,116315,116316],{"class":73},"        truncated ",[67,116318,85],{"class":84},[67,116320,40641],{"class":77},[67,116322,115144],{"class":73},[67,116324,3553],{"class":84},[67,116326,40641],{"class":77},[67,116328,115151],{"class":73},[67,116330,116331,116334,116336,116338,116341],{"class":69,"line":18729},[67,116332,116333],{"class":73},"        info ",[67,116335,85],{"class":84},[67,116337,6267],{"class":73},[67,116339,116340],{"class":114},"\"distance\"",[67,116342,116343],{"class":73},": dist}\n",[67,116345,116346,116348],{"class":69,"line":34402},[67,116347,16550],{"class":84},[67,116349,116350],{"class":73}," obs, reward, terminated, truncated, info\n",[67,116352,116353],{"class":69,"line":34408},[67,116354,631],{"emptyLinePlaceholder":630},[67,116356,116357],{"class":69,"line":34414},[67,116358,631],{"emptyLinePlaceholder":630},[67,116360,116361,116363,116365,116367,116369],{"class":69,"line":34420},[67,116362,801],{"class":84},[67,116364,804],{"class":110},[67,116366,807],{"class":73},[67,116368,810],{"class":77},[67,116370,813],{"class":73},[67,116372,116373,116376,116378],{"class":69,"line":34426},[67,116374,116375],{"class":73},"    env ",[67,116377,85],{"class":84},[67,116379,116380],{"class":73}," ReacherEnv()\n",[67,116382,116383,116386,116388,116391,116393,116395,116397],{"class":69,"line":34437},[67,116384,116385],{"class":73},"    obs, info ",[67,116387,85],{"class":84},[67,116389,116390],{"class":73}," env.reset(",[67,116392,116004],{"class":7033},[67,116394,85],{"class":84},[67,116396,78],{"class":77},[67,116398,829],{"class":73},[67,116400,116401,116403,116405,116408],{"class":69,"line":34443},[67,116402,851],{"class":77},[67,116404,854],{"class":73},[67,116406,116407],{"class":114},"\"initial obs shape:\"",[67,116409,116410],{"class":73},", obs.shape)\n",[67,116412,116413,116415,116417,116420],{"class":69,"line":34463},[67,116414,851],{"class":77},[67,116416,854],{"class":73},[67,116418,116419],{"class":114},"\"initial info:\"",[67,116421,116422],{"class":73},", info)\n",[67,116424,116425],{"class":69,"line":34469},[67,116426,631],{"emptyLinePlaceholder":630},[67,116428,116429,116431,116433],{"class":69,"line":34480},[67,116430,111591],{"class":73},[67,116432,85],{"class":84},[67,116434,106430],{"class":77},[67,116436,116437,116439,116441,116443,116445,116447,116449],{"class":69,"line":34486},[67,116438,935],{"class":84},[67,116440,938],{"class":73},[67,116442,941],{"class":84},[67,116444,944],{"class":77},[67,116446,854],{"class":73},[67,116448,2689],{"class":77},[67,116450,952],{"class":73},[67,116452,116453,116455,116457],{"class":69,"line":34492},[67,116454,111660],{"class":73},[67,116456,85],{"class":84},[67,116458,116459],{"class":73}," env.action_space.sample()\n",[67,116461,116462,116465,116467],{"class":69,"line":34498},[67,116463,116464],{"class":73},"        obs, reward, terminated, truncated, info ",[67,116466,85],{"class":84},[67,116468,114853],{"class":73},[67,116470,116471,116473,116475],{"class":69,"line":34504},[67,116472,111735],{"class":73},[67,116474,11283],{"class":84},[67,116476,111740],{"class":73},[67,116478,116479,116481,116483,116485,116487,116490,116492,116494,116497,116499,116501,116504,116506,116508,116511,116513,116515,116517],{"class":69,"line":34510},[67,116480,34220],{"class":77},[67,116482,854],{"class":73},[67,116484,111769],{"class":114},[67,116486,111772],{"class":73},[67,116488,116489],{"class":114},"\"reward:\"",[67,116491,1868],{"class":73},[67,116493,33788],{"class":77},[67,116495,116496],{"class":73},"(reward, ",[67,116498,2071],{"class":77},[67,116500,111783],{"class":73},[67,116502,116503],{"class":114},"\"distance:\"",[67,116505,1868],{"class":73},[67,116507,33788],{"class":77},[67,116509,116510],{"class":73},"(info[",[67,116512,116340],{"class":114},[67,116514,113640],{"class":73},[67,116516,2071],{"class":77},[67,116518,1050],{"class":73},[67,116520,116521,116523,116526,116529],{"class":69,"line":34516},[67,116522,4329],{"class":84},[67,116524,116525],{"class":73}," terminated ",[67,116527,116528],{"class":84},"or",[67,116530,116531],{"class":73}," truncated:\n",[67,116533,116534],{"class":69,"line":34522},[67,116535,116536],{"class":84},"            break\n",[67,116538,116539],{"class":69,"line":34542},[67,116540,631],{"emptyLinePlaceholder":630},[67,116542,116543,116545,116547,116549,116551,116553,116555,116557],{"class":69,"line":34548},[67,116544,851],{"class":77},[67,116546,854],{"class":73},[67,116548,111814],{"class":114},[67,116550,1868],{"class":73},[67,116552,33788],{"class":77},[67,116554,111821],{"class":73},[67,116556,2071],{"class":77},[67,116558,1050],{"class":73},[67,116560,116561],{"class":69,"line":34564},[67,116562,631],{"emptyLinePlaceholder":630},[67,116564,116565],{"class":69,"line":34570},[67,116566,631],{"emptyLinePlaceholder":630},[67,116568,116569,116571,116573,116575,116577],{"class":69,"line":34584},[67,116570,1096],{"class":84},[67,116572,1099],{"class":77},[67,116574,1102],{"class":84},[67,116576,1105],{"class":114},[67,116578,813],{"class":73},[67,116580,116581],{"class":69,"line":34590},[67,116582,1113],{"class":73},[19,116584,1116],{},[58,116586,116588],{"className":101,"code":116587,"language":103,"meta":63,"style":63},"touch ch8_gym_env.py\n",[32,116589,116590],{"__ignoreMap":63},[67,116591,116592,116594],{"class":69,"line":70},[67,116593,1126],{"class":110},[67,116595,116596],{"class":114}," ch8_gym_env.py\n",[19,116598,111882],{},[58,116600,116602],{"className":101,"code":116601,"language":103,"meta":63,"style":63},"python ch8_gym_env.py\n",[32,116603,116604],{"__ignoreMap":63},[67,116605,116606,116608],{"class":69,"line":70},[67,116607,62],{"class":110},[67,116609,116596],{"class":114},[391,116611,1146],{"id":1146},[19,116613,116614],{},"继承 Gymnasium 环境：",[58,116616,116618],{"className":60,"code":116617,"language":62,"meta":63,"style":63},"class ReacherEnv(gym.Env):\n",[32,116619,116620],{"__ignoreMap":63},[67,116621,116622,116624,116626,116628,116630,116632,116634],{"class":69,"line":70},[67,116623,16492],{"class":84},[67,116625,115495],{"class":110},[67,116627,854],{"class":73},[67,116629,114978],{"class":110},[67,116631,2547],{"class":73},[67,116633,115504],{"class":110},[67,116635,952],{"class":73},[19,116637,116638],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116640,116641],{},"初始化模型：",[58,116643,116645],{"className":60,"code":116644,"language":62,"meta":63,"style":63},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[32,116646,116647,116661],{"__ignoreMap":63},[67,116648,116649,116651,116653,116655,116657,116659],{"class":69,"line":70},[67,116650,32600],{"class":77},[67,116652,115555],{"class":73},[67,116654,85],{"class":84},[67,116656,824],{"class":73},[67,116658,668],{"class":77},[67,116660,829],{"class":73},[67,116662,116663,116665,116667,116669,116671,116673],{"class":69,"line":191},[67,116664,32600],{"class":77},[67,116666,115570],{"class":73},[67,116668,85],{"class":84},[67,116670,115575],{"class":73},[67,116672,32600],{"class":77},[67,116674,115580],{"class":73},[19,116676,116677,116678,116680],{},"这和前面章节一样，只是现在放到了类的 ",[32,116679,32606],{}," 里。",[19,116682,116683],{},"缓存 site ID：",[58,116685,116687],{"className":60,"code":116686,"language":62,"meta":63,"style":63},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[32,116688,116689,116703],{"__ignoreMap":63},[67,116690,116691,116693,116695,116697,116699,116701],{"class":69,"line":70},[67,116692,32600],{"class":77},[67,116694,115591],{"class":73},[67,116696,85],{"class":84},[67,116698,115596],{"class":73},[67,116700,91313],{"class":77},[67,116702,829],{"class":73},[67,116704,116705,116707,116709,116711,116713,116715],{"class":69,"line":191},[67,116706,32600],{"class":77},[67,116708,115612],{"class":73},[67,116710,85],{"class":84},[67,116712,115596],{"class":73},[67,116714,91313],{"class":77},[67,116716,829],{"class":73},[19,116718,116719],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116721,116722],{},"reset：",[58,116724,116726],{"className":60,"code":116725,"language":62,"meta":63,"style":63},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[32,116727,116728],{"__ignoreMap":63},[67,116729,116730,116732,116734,116736,116738,116740,116742,116744,116746,116748,116750,116752,116754,116756,116758,116760,116762],{"class":69,"line":70},[67,116731,801],{"class":84},[67,116733,115960],{"class":110},[67,116735,115963],{"class":73},[67,116737,965],{"class":84},[67,116739,115968],{"class":73},[67,116741,2006],{"class":77},[67,116743,26901],{"class":84},[67,116745,40701],{"class":77},[67,116747,671],{"class":84},[67,116749,40701],{"class":77},[67,116751,115981],{"class":73},[67,116753,115984],{"class":77},[67,116755,26901],{"class":84},[67,116757,40701],{"class":77},[67,116759,671],{"class":84},[67,116761,40701],{"class":77},[67,116763,952],{"class":73},[19,116765,116766,116768],{},[32,116767,71816],{}," 做四件事：",[26,116770,116771,116774,116777,116780],{},[29,116772,116773],{},"设置随机种子。",[29,116775,116776],{},"重置 MuJoCo data。",[29,116778,116779],{},"随机初始化关节角。",[29,116781,116782],{},"返回初始观测和 info。",[19,116784,116785],{},"step：",[58,116787,116789],{"className":60,"code":116788,"language":62,"meta":63,"style":63},"def step(self, action):\n",[32,116790,116791],{"__ignoreMap":63},[67,116792,116793,116795,116797],{"class":69,"line":70},[67,116794,801],{"class":84},[67,116796,116125],{"class":110},[67,116798,116128],{"class":73},[19,116800,116801,116803],{},[32,116802,1534],{}," 做六件事：",[26,116805,116806,116809,116815,116818,116821,116824],{},[29,116807,116808],{},"检查并裁剪 action。",[29,116810,116811,116812,230],{},"写入 ",[32,116813,116814],{},"self.data.ctrl",[29,116816,116817],{},"连续推进若干个 MuJoCo 物理步。",[29,116819,116820],{},"计算新观测。",[29,116822,116823],{},"计算奖励和结束条件。",[29,116825,116826],{},"返回 Gymnasium 标准五元组。",[391,116828,1246],{"id":1246},[58,116830,116832],{"className":60,"code":116831,"language":62,"meta":63,"style":63},"import gymnasium as gym\n",[32,116833,116834],{"__ignoreMap":63},[67,116835,116836,116838,116840,116842],{"class":69,"line":70},[67,116837,622],{"class":84},[67,116839,115333],{"class":73},[67,116841,649],{"class":84},[67,116843,115338],{"class":73},[19,116845,116846,116847,116849,116850,116853],{},"导入 Gymnasium，并起别名 ",[32,116848,114978],{},"。后面写 ",[32,116851,116852],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[58,116855,116857],{"className":60,"code":116856,"language":62,"meta":63,"style":63},"from gymnasium import spaces\n",[32,116858,116859],{"__ignoreMap":63},[67,116860,116861,116863,116865,116867],{"class":69,"line":70},[67,116862,32515],{"class":84},[67,116864,115333],{"class":73},[67,116866,622],{"class":84},[67,116868,115365],{"class":73},[19,116870,116871,116872,116875],{},"导入空间定义工具。",[32,116873,116874],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[58,116877,116878],{"className":60,"code":116617,"language":62,"meta":63,"style":63},[32,116879,116880],{"__ignoreMap":63},[67,116881,116882,116884,116886,116888,116890,116892,116894],{"class":69,"line":70},[67,116883,16492],{"class":84},[67,116885,115495],{"class":110},[67,116887,854],{"class":73},[67,116889,114978],{"class":110},[67,116891,2547],{"class":73},[67,116893,115504],{"class":110},[67,116895,952],{"class":73},[19,116897,116898,116899,116902,116903,116905,116906,1264,116908,116910],{},"定义一个类，名字叫 ",[32,116900,116901],{},"ReacherEnv","。括号里的 ",[32,116904,116852],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[32,116907,71816],{},[32,116909,1534],{}," 这两个核心方法。",[58,116912,116914],{"className":60,"code":116913,"language":62,"meta":63,"style":63},"metadata = {\"render_modes\": []}\n",[32,116915,116916],{"__ignoreMap":63},[67,116917,116918,116921,116923,116925,116927],{"class":69,"line":70},[67,116919,116920],{"class":73},"metadata ",[67,116922,85],{"class":84},[67,116924,6267],{"class":73},[67,116926,115518],{"class":114},[67,116928,115521],{"class":73},[19,116930,116931],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[58,116933,116935],{"className":60,"code":116934,"language":62,"meta":63,"style":63},"def __init__(self) -> None:\n",[32,116936,116937],{"__ignoreMap":63},[67,116938,116939,116941,116943,116945,116947],{"class":69,"line":70},[67,116940,801],{"class":84},[67,116942,32581],{"class":77},[67,116944,115534],{"class":73},[67,116946,810],{"class":77},[67,116948,813],{"class":73},[19,116950,116951,116953,116954,230],{},[32,116952,32606],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[32,116955,116956],{},"env = ReacherEnv()",[58,116958,116960],{"className":60,"code":116959,"language":62,"meta":63,"style":63},"super().__init__()\n",[32,116961,116962],{"__ignoreMap":63},[67,116963,116964,116967,116969,116971],{"class":69,"line":70},[67,116965,116966],{"class":77},"super",[67,116968,19058],{"class":73},[67,116970,32606],{"class":77},[67,116972,3809],{"class":73},[19,116974,116975,116976,116978],{},"调用父类 ",[32,116977,116852],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[58,116980,116981],{"className":60,"code":116644,"language":62,"meta":63,"style":63},[32,116982,116983,116997],{"__ignoreMap":63},[67,116984,116985,116987,116989,116991,116993,116995],{"class":69,"line":70},[67,116986,32600],{"class":77},[67,116988,115555],{"class":73},[67,116990,85],{"class":84},[67,116992,824],{"class":73},[67,116994,668],{"class":77},[67,116996,829],{"class":73},[67,116998,116999,117001,117003,117005,117007,117009],{"class":69,"line":191},[67,117000,32600],{"class":77},[67,117002,115570],{"class":73},[67,117004,85],{"class":84},[67,117006,115575],{"class":73},[67,117008,32600],{"class":77},[67,117010,115580],{"class":73},[19,117012,117013,117014,117016,117017,1264,117020,117023],{},"把 MuJoCo 模型和状态保存到 ",[32,117015,32600],{}," 上。",[32,117018,117019],{},"self.model",[32,117021,117022],{},"self.data"," 表示这个环境对象自己的模型和状态。",[58,117025,117026],{"className":60,"code":116686,"language":62,"meta":63,"style":63},[32,117027,117028,117042],{"__ignoreMap":63},[67,117029,117030,117032,117034,117036,117038,117040],{"class":69,"line":70},[67,117031,32600],{"class":77},[67,117033,115591],{"class":73},[67,117035,85],{"class":84},[67,117037,115596],{"class":73},[67,117039,91313],{"class":77},[67,117041,829],{"class":73},[67,117043,117044,117046,117048,117050,117052,117054],{"class":69,"line":191},[67,117045,32600],{"class":77},[67,117047,115612],{"class":73},[67,117049,85],{"class":84},[67,117051,115596],{"class":73},[67,117053,91313],{"class":77},[67,117055,829],{"class":73},[19,117057,117058,117059,1264,117062,117065],{},"提前查好 tip 和 target 的 site ID。这样 ",[32,117060,117061],{},"_get_obs",[32,117063,117064],{},"_get_reward"," 里就不用每次按名字查找。",[58,117067,117069],{"className":60,"code":117068,"language":62,"meta":63,"style":63},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[32,117070,117071,117081,117091],{"__ignoreMap":63},[67,117072,117073,117075,117077,117079],{"class":69,"line":70},[67,117074,32600],{"class":77},[67,117076,115305],{"class":73},[67,117078,85],{"class":84},[67,117080,56188],{"class":77},[67,117082,117083,117085,117087,117089],{"class":69,"line":191},[67,117084,32600],{"class":77},[67,117086,115684],{"class":73},[67,117088,85],{"class":84},[67,117090,115689],{"class":77},[67,117092,117093,117095,117097,117099],{"class":69,"line":202},[67,117094,32600],{"class":77},[67,117096,115144],{"class":73},[67,117098,85],{"class":84},[67,117100,49101],{"class":77},[19,117102,117103,117106,117107,117110,117111,117114],{},[32,117104,117105],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[32,117108,117109],{},"max_steps"," 是一个 episode 最多运行多少步。",[32,117112,117113],{},"steps"," 记录当前 episode 已经走了多少步。",[58,117116,117117],{"className":60,"code":115183,"language":62,"meta":63,"style":63},[32,117118,117119],{"__ignoreMap":63},[67,117120,117121,117123,117125,117127,117129,117131,117133,117135,117137,117139,117141,117143,117145,117147,117149,117151,117153,117155,117157,117159],{"class":69,"line":70},[67,117122,32600],{"class":77},[67,117124,115192],{"class":73},[67,117126,85],{"class":84},[67,117128,115197],{"class":73},[67,117130,115200],{"class":7033},[67,117132,115203],{"class":84},[67,117134,104100],{"class":77},[67,117136,1868],{"class":73},[67,117138,115210],{"class":7033},[67,117140,85],{"class":84},[67,117142,104100],{"class":77},[67,117144,1868],{"class":73},[67,117146,97720],{"class":7033},[67,117148,85],{"class":84},[67,117150,854],{"class":73},[67,117152,2077],{"class":77},[67,117154,115227],{"class":73},[67,117156,95259],{"class":7033},[67,117158,85],{"class":84},[67,117160,115234],{"class":73},[19,117162,117163,117164,117167,117168,1264,117171,117174],{},"定义动作空间。",[32,117165,117166],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[32,117169,117170],{},"low=-1.0",[32,117172,117173],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[58,117176,117177],{"className":60,"code":115244,"language":62,"meta":63,"style":63},[32,117178,117179],{"__ignoreMap":63},[67,117180,117181,117183,117185,117187,117189,117191,117193,117195,117197,117199,117201,117203,117205,117207,117209,117211,117213,117215],{"class":69,"line":70},[67,117182,32600],{"class":77},[67,117184,115253],{"class":73},[67,117186,85],{"class":84},[67,117188,115197],{"class":73},[67,117190,115200],{"class":7033},[67,117192,115203],{"class":84},[67,117194,115264],{"class":73},[67,117196,115210],{"class":7033},[67,117198,85],{"class":84},[67,117200,115264],{"class":73},[67,117202,97720],{"class":7033},[67,117204,85],{"class":84},[67,117206,854],{"class":73},[67,117208,2437],{"class":77},[67,117210,115227],{"class":73},[67,117212,95259],{"class":7033},[67,117214,85],{"class":84},[67,117216,115234],{"class":73},[19,117218,117219,117220,117223,117224,117227],{},"定义观测空间。",[32,117221,117222],{},"shape=(10,)"," 表示观测是 10 个数。",[32,117225,117226],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[58,117229,117231],{"className":60,"code":117230,"language":62,"meta":63,"style":63},"def _get_obs(self) -> np.ndarray:\n",[32,117232,117233],{"__ignoreMap":63},[67,117234,117235,117237,117239],{"class":69,"line":70},[67,117236,801],{"class":84},[67,117238,115794],{"class":110},[67,117240,115797],{"class":73},[19,117242,117243,117244,117246],{},"定义内部函数，用来生成观测。函数名前面的 ",[32,117245,1530],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[58,117248,117250],{"className":60,"code":117249,"language":62,"meta":63,"style":63},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[32,117251,117252,117266],{"__ignoreMap":63},[67,117253,117254,117256,117258,117260,117262,117264],{"class":69,"line":70},[67,117255,113006],{"class":73},[67,117257,85],{"class":84},[67,117259,40641],{"class":77},[67,117261,115808],{"class":73},[67,117263,32600],{"class":77},[67,117265,115813],{"class":73},[67,117267,117268,117270,117272,117274,117276,117278],{"class":69,"line":191},[67,117269,113016],{"class":73},[67,117271,85],{"class":84},[67,117273,40641],{"class":77},[67,117275,115808],{"class":73},[67,117277,32600],{"class":77},[67,117279,115828],{"class":73},[19,117281,117282],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[58,117284,117286],{"className":60,"code":117285,"language":62,"meta":63,"style":63},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[32,117287,117288,117304],{"__ignoreMap":63},[67,117289,117290,117292,117294,117296,117298,117300,117302],{"class":69,"line":70},[67,117291,112292],{"class":73},[67,117293,85],{"class":84},[67,117295,115837],{"class":73},[67,117297,32600],{"class":77},[67,117299,115842],{"class":73},[67,117301,32600],{"class":77},[67,117303,115847],{"class":73},[67,117305,117306,117308],{"class":69,"line":191},[67,117307,18843],{"class":84},[67,117309,115854],{"class":73},[19,117311,117312,117313,117316,117317,117319],{},"拼接观测，并转换成 ",[32,117314,117315],{},"float32","。很多强化学习库默认使用 ",[32,117318,117315],{},"，所以这里主动转换。",[58,117321,117322],{"className":60,"code":116725,"language":62,"meta":63,"style":63},[32,117323,117324],{"__ignoreMap":63},[67,117325,117326,117328,117330,117332,117334,117336,117338,117340,117342,117344,117346,117348,117350,117352,117354,117356,117358],{"class":69,"line":70},[67,117327,801],{"class":84},[67,117329,115960],{"class":110},[67,117331,115963],{"class":73},[67,117333,965],{"class":84},[67,117335,115968],{"class":73},[67,117337,2006],{"class":77},[67,117339,26901],{"class":84},[67,117341,40701],{"class":77},[67,117343,671],{"class":84},[67,117345,40701],{"class":77},[67,117347,115981],{"class":73},[67,117349,115984],{"class":77},[67,117351,26901],{"class":84},[67,117353,40701],{"class":77},[67,117355,671],{"class":84},[67,117357,40701],{"class":77},[67,117359,952],{"class":73},[19,117361,117362,117363,117365,117366,117369],{},"定义 reset。",[32,117364,116004],{}," 用来控制随机数，保证实验可以复现。",[32,117367,117368],{},"options"," 用来接收额外配置，本章暂时不用。",[58,117371,117373],{"className":60,"code":117372,"language":62,"meta":63,"style":63},"super().reset(seed=seed)\n",[32,117374,117375],{"__ignoreMap":63},[67,117376,117377,117379,117381,117383,117385],{"class":69,"line":70},[67,117378,116966],{"class":77},[67,117380,116001],{"class":73},[67,117382,116004],{"class":7033},[67,117384,85],{"class":84},[67,117386,116009],{"class":73},[19,117388,117389,117390,117393],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[32,117391,117392],{},"self.np_random"," 生成可复现的随机数。",[58,117395,117397],{"className":60,"code":117396,"language":62,"meta":63,"style":63},"mujoco.mj_resetData(self.model, self.data)\n",[32,117398,117399],{"__ignoreMap":63},[67,117400,117401,117404,117406,117408,117410],{"class":69,"line":70},[67,117402,117403],{"class":73},"mujoco.mj_resetData(",[67,117405,32600],{"class":77},[67,117407,116019],{"class":73},[67,117409,32600],{"class":77},[67,117411,116024],{"class":73},[19,117413,117414],{},"把 MuJoCo 状态重置到默认状态。",[58,117416,117418],{"className":60,"code":117417,"language":62,"meta":63,"style":63},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[32,117419,117420],{"__ignoreMap":63},[67,117421,117422,117424,117426,117428,117430,117432,117434,117436,117438,117440,117442,117444,117446,117448,117450,117452,117454],{"class":69,"line":70},[67,117423,32600],{"class":77},[67,117425,116035],{"class":73},[67,117427,85],{"class":84},[67,117429,40641],{"class":77},[67,117431,116042],{"class":73},[67,117433,115200],{"class":7033},[67,117435,115203],{"class":84},[67,117437,87969],{"class":77},[67,117439,1868],{"class":73},[67,117441,115210],{"class":7033},[67,117443,85],{"class":84},[67,117445,87969],{"class":77},[67,117447,1868],{"class":73},[67,117449,33268],{"class":7033},[67,117451,85],{"class":84},[67,117453,32600],{"class":77},[67,117455,116067],{"class":73},[19,117457,116779,117458,117461,117462,117465,117466,117468],{},[32,117459,117460],{},"[:]"," 表示修改整个数组。",[32,117463,117464],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[32,117467,103853],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[58,117470,117472],{"className":60,"code":117471,"language":62,"meta":63,"style":63},"self.data.qvel[:] = 0.0\n",[32,117473,117474],{"__ignoreMap":63},[67,117475,117476,117478,117480,117482],{"class":69,"line":70},[67,117477,32600],{"class":77},[67,117479,116074],{"class":73},[67,117481,85],{"class":84},[67,117483,106430],{"class":77},[19,117485,117486],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[58,117488,117490],{"className":60,"code":117489,"language":62,"meta":63,"style":63},"self.steps = 0\nreturn self._get_obs(), {}\n",[32,117491,117492,117502],{"__ignoreMap":63},[67,117493,117494,117496,117498,117500],{"class":69,"line":70},[67,117495,32600],{"class":77},[67,117497,115144],{"class":73},[67,117499,85],{"class":84},[67,117501,49101],{"class":77},[67,117503,117504,117506,117508],{"class":69,"line":191},[67,117505,18843],{"class":84},[67,117507,40641],{"class":77},[67,117509,116114],{"class":73},[19,117511,117512],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[58,117514,117515],{"className":60,"code":116788,"language":62,"meta":63,"style":63},[32,117516,117517],{"__ignoreMap":63},[67,117518,117519,117521,117523],{"class":69,"line":70},[67,117520,801],{"class":84},[67,117522,116125],{"class":110},[67,117524,116128],{"class":73},[19,117526,117527],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[58,117529,117531],{"className":60,"code":117530,"language":62,"meta":63,"style":63},"action = np.asarray(action, dtype=np.float32)\n",[32,117532,117533],{"__ignoreMap":63},[67,117534,117535,117537,117539,117541,117543,117545],{"class":69,"line":70},[67,117536,1855],{"class":73},[67,117538,85],{"class":84},[67,117540,116137],{"class":73},[67,117542,95259],{"class":7033},[67,117544,85],{"class":84},[67,117546,115234],{"class":73},[19,117548,117549,117550,230],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[32,117551,117315],{},[58,117553,117555],{"className":60,"code":117554,"language":62,"meta":63,"style":63},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[32,117556,117557],{"__ignoreMap":63},[67,117558,117559,117561,117563,117565,117567,117569,117571],{"class":69,"line":70},[67,117560,1855],{"class":73},[67,117562,85],{"class":84},[67,117564,1860],{"class":73},[67,117566,32600],{"class":77},[67,117568,116156],{"class":73},[67,117570,32600],{"class":77},[67,117572,116161],{"class":73},[19,117574,117575],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[58,117577,117579],{"className":60,"code":117578,"language":62,"meta":63,"style":63},"self.data.ctrl[:] = action\n",[32,117580,117581],{"__ignoreMap":63},[67,117582,117583,117585,117587,117589],{"class":69,"line":70},[67,117584,32600],{"class":77},[67,117586,116172],{"class":73},[67,117588,85],{"class":84},[67,117590,1885],{"class":73},[19,117592,117593],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[58,117595,117597],{"className":60,"code":117596,"language":62,"meta":63,"style":63},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[32,117598,117599,117615],{"__ignoreMap":63},[67,117600,117601,117603,117605,117607,117609,117611,117613],{"class":69,"line":70},[67,117602,1512],{"class":84},[67,117604,103212],{"class":73},[67,117606,941],{"class":84},[67,117608,944],{"class":77},[67,117610,854],{"class":73},[67,117612,32600],{"class":77},[67,117614,116193],{"class":73},[67,117616,117617,117620,117622,117624,117626],{"class":69,"line":191},[67,117618,117619],{"class":73},"    mujoco.mj_step(",[67,117621,32600],{"class":77},[67,117623,116019],{"class":73},[67,117625,32600],{"class":77},[67,117627,116024],{"class":73},[19,117629,117630,117631,117634,117635,117637,117638,230],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[32,117632,117633],{},"frame_skip=5","，所以外部调用一次 ",[32,117636,115315],{},"，内部实际执行 5 次 ",[32,117639,102948],{},[58,117641,117643],{"className":60,"code":117642,"language":62,"meta":63,"style":63},"self.steps += 1\n",[32,117644,117645],{"__ignoreMap":63},[67,117646,117647,117649,117651,117653],{"class":69,"line":70},[67,117648,32600],{"class":77},[67,117650,115144],{"class":73},[67,117652,11283],{"class":84},[67,117654,57460],{"class":77},[19,117656,117657],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[58,117659,117661],{"className":60,"code":117660,"language":62,"meta":63,"style":63},"obs = self._get_obs()\nreward = self._get_reward()\n",[32,117662,117663,117673],{"__ignoreMap":63},[67,117664,117665,117667,117669,117671],{"class":69,"line":70},[67,117666,112292],{"class":73},[67,117668,85],{"class":84},[67,117670,40641],{"class":77},[67,117672,116235],{"class":73},[67,117674,117675,117677,117679,117681],{"class":69,"line":191},[67,117676,112443],{"class":73},[67,117678,85],{"class":84},[67,117680,40641],{"class":77},[67,117682,116246],{"class":73},[19,117684,117685],{},"计算新的观测和奖励。",[58,117687,117689],{"className":60,"code":117688,"language":62,"meta":63,"style":63},"dist = float(np.linalg.norm(tip - target))\n",[32,117690,117691],{"__ignoreMap":63},[67,117692,117693,117695,117697,117699,117701,117703],{"class":69,"line":70},[67,117694,113034],{"class":73},[67,117696,85],{"class":84},[67,117698,111235],{"class":77},[67,117700,116289],{"class":73},[67,117702,1863],{"class":84},[67,117704,116294],{"class":73},[19,117706,117707],{},"计算末端到目标的距离，并转换成 Python float。",[58,117709,117710],{"className":60,"code":115115,"language":62,"meta":63,"style":63},[32,117711,117712,117724],{"__ignoreMap":63},[67,117713,117714,117716,117718,117720,117722],{"class":69,"line":70},[67,117715,115122],{"class":73},[67,117717,85],{"class":84},[67,117719,115127],{"class":73},[67,117721,259],{"class":84},[67,117723,115132],{"class":77},[67,117725,117726,117728,117730,117732,117734,117736,117738],{"class":69,"line":191},[67,117727,115137],{"class":73},[67,117729,85],{"class":84},[67,117731,40641],{"class":77},[67,117733,115144],{"class":73},[67,117735,3553],{"class":84},[67,117737,40641],{"class":77},[67,117739,115151],{"class":73},[19,117741,117742],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[58,117744,117746],{"className":60,"code":117745,"language":62,"meta":63,"style":63},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[32,117747,117748,117761],{"__ignoreMap":63},[67,117749,117750,117753,117755,117757,117759],{"class":69,"line":70},[67,117751,117752],{"class":73},"info ",[67,117754,85],{"class":84},[67,117756,6267],{"class":73},[67,117758,116340],{"class":114},[67,117760,116343],{"class":73},[67,117762,117763,117765],{"class":69,"line":191},[67,117764,18843],{"class":84},[67,117766,116350],{"class":73},[19,117768,117769,117772],{},[32,117770,117771],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[58,117774,117776],{"className":60,"code":117775,"language":62,"meta":63,"style":63},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[32,117777,117778,117787],{"__ignoreMap":63},[67,117779,117780,117783,117785],{"class":69,"line":70},[67,117781,117782],{"class":73},"env ",[67,117784,85],{"class":84},[67,117786,116380],{"class":73},[67,117788,117789,117791,117793,117795,117797,117799,117801],{"class":69,"line":191},[67,117790,114838],{"class":73},[67,117792,85],{"class":84},[67,117794,116390],{"class":73},[67,117796,116004],{"class":7033},[67,117798,85],{"class":84},[67,117800,78],{"class":77},[67,117802,829],{"class":73},[19,117804,117805,117806,117809],{},"创建环境并重置。",[32,117807,117808],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[58,117811,117813],{"className":60,"code":117812,"language":62,"meta":63,"style":63},"action = env.action_space.sample()\n",[32,117814,117815],{"__ignoreMap":63},[67,117816,117817,117819,117821],{"class":69,"line":70},[67,117818,1855],{"class":73},[67,117820,85],{"class":84},[67,117822,116459],{"class":73},[19,117824,117825],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117827,1647],{"id":1646},[19,117829,107150],{},[58,117831,117834],{"className":117832,"code":117833,"language":603,"meta":63},[601],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[32,117835,117833],{"__ignoreMap":63},[19,117837,117838],{},"这个环境已经具备强化学习环境的基本结构。",[19,117840,117841],{},"主函数里使用随机动作：",[58,117843,117844],{"className":60,"code":117812,"language":62,"meta":63,"style":63},[32,117845,117846],{"__ignoreMap":63},[67,117847,117848,117850,117852],{"class":69,"line":70},[67,117849,1855],{"class":73},[67,117851,85],{"class":84},[67,117853,116459],{"class":73},[19,117855,117856],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117858,1696],{"id":1695},[26,117860,117861,117864,117870,117879,117888,117897,117903],{},[29,117862,117863],{},"运行程序。",[29,117865,117866,117867,230],{},"确认 ",[32,117868,117869],{},"obs.shape == (10,)",[29,117871,112619,117872,117875,117876,230],{},[32,117873,117874],{},"env.action_space","，应类似 ",[32,117877,117878],{},"Box(-1.0, 1.0, (2,), float32)",[29,117880,107251,117881,117884,117885,230],{},[32,117882,117883],{},"self.max_steps = 10","，确认环境会更快 ",[32,117886,117887],{},"truncated=True",[29,117889,1701,117890,1704,117893,117896],{},[32,117891,117892],{},"terminated = dist \u003C 0.05",[32,117894,117895],{},"dist \u003C 0.2","，观察是否更容易结束。",[29,117898,1701,117899,117902],{},[32,117900,117901],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[29,117904,117905,117906,117908,117909,117912],{},"在 ",[32,117907,117771],{}," 里加入 ",[32,117910,117911],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117914,1748],{"id":1747},[391,117916,117918],{"id":117917},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117920,117921,117922,117924],{},"Gymnasium 的 ",[32,117923,1534],{}," 返回 5 个值:",[58,117926,117928],{"className":60,"code":117927,"language":62,"meta":63,"style":63},"obs, reward, terminated, truncated, info\n",[32,117929,117930],{"__ignoreMap":63},[67,117931,117932],{"class":69,"line":70},[67,117933,117927],{"class":73},[19,117935,117936],{},"不是旧 Gym 的 4 个值。",[391,117938,117940,117943],{"id":117939},"datactrl-action-维度错误",[32,117941,117942],{},"data.ctrl[:] = action"," 维度错误",[19,117945,104215],{},[58,117947,117949],{"className":60,"code":117948,"language":62,"meta":63,"style":63},"print(self.model.nu)\nprint(action.shape)\n",[32,117950,117951,117962],{"__ignoreMap":63},[67,117952,117953,117955,117957,117959],{"class":69,"line":70},[67,117954,1626],{"class":77},[67,117956,854],{"class":73},[67,117958,32600],{"class":77},[67,117960,117961],{"class":73},".model.nu)\n",[67,117963,117964,117966],{"class":69,"line":191},[67,117965,1626],{"class":77},[67,117967,117968],{"class":73},"(action.shape)\n",[19,117970,117971],{},"两者必须匹配。",[391,117973,117975],{"id":117974},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117977,104155],{},[58,117979,117981],{"className":60,"code":117980,"language":62,"meta":63,"style":63},"mujoco.mj_forward(self.model, self.data)\n",[32,117982,117983],{"__ignoreMap":63},[67,117984,117985,117988,117990,117992,117994],{"class":69,"line":70},[67,117986,117987],{"class":73},"mujoco.mj_forward(",[67,117989,32600],{"class":77},[67,117991,116019],{"class":73},[67,117993,32600],{"class":77},[67,117995,116024],{"class":73},[391,117997,117999,118001],{"id":117998},"observation_space-维度和-obs-不一致",[32,118000,115038],{}," 维度和 obs 不一致",[19,118003,1804],{},[58,118005,118007],{"className":60,"code":118006,"language":62,"meta":63,"style":63},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[32,118008,118009,118019,118026],{"__ignoreMap":63},[67,118010,118011,118013,118015,118017],{"class":69,"line":70},[67,118012,112292],{"class":73},[67,118014,85],{"class":84},[67,118016,40641],{"class":77},[67,118018,116235],{"class":73},[67,118020,118021,118023],{"class":69,"line":191},[67,118022,1626],{"class":77},[67,118024,118025],{"class":73},"(obs.shape)\n",[67,118027,118028,118030,118032,118034],{"class":69,"line":202},[67,118029,1626],{"class":77},[67,118031,854],{"class":73},[67,118033,32600],{"class":77},[67,118035,118036],{"class":73},".observation_space.shape)\n",[19,118038,118039],{},"两者必须一致。本章观测是：",[58,118041,118044],{"className":118042,"code":118043,"language":603,"meta":63},[601],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[32,118045,118043],{"__ignoreMap":63},[391,118047,118049],{"id":118048},"action-超过范围","action 超过范围",[19,118051,118052],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[58,118054,118055],{"className":60,"code":117554,"language":62,"meta":63,"style":63},[32,118056,118057],{"__ignoreMap":63},[67,118058,118059,118061,118063,118065,118067,118069,118071],{"class":69,"line":70},[67,118060,1855],{"class":73},[67,118062,85],{"class":84},[67,118064,1860],{"class":73},[67,118066,32600],{"class":77},[67,118068,116156],{"class":73},[67,118070,32600],{"class":77},[67,118072,116161],{"class":73},[19,118074,118075,118076,230],{},"这能避免无效动作直接写入 ",[32,118077,45],{},[391,118079,118081],{"id":118080},"忘记返回-info","忘记返回 info",[19,118083,117921,118084,1264,118086,118088],{},[32,118085,71816],{},[32,118087,1534],{}," 都会返回 info：",[58,118090,118091],{"className":60,"code":114831,"language":62,"meta":63,"style":63},[32,118092,118093,118101],{"__ignoreMap":63},[67,118094,118095,118097,118099],{"class":69,"line":70},[67,118096,114838],{"class":73},[67,118098,85],{"class":84},[67,118100,114843],{"class":73},[67,118102,118103,118105,118107],{"class":69,"line":191},[67,118104,114848],{"class":73},[67,118106,85],{"class":84},[67,118108,114853],{"class":73},[19,118110,118111,118112,230],{},"即使暂时没有额外信息，也返回 ",[32,118113,34228],{},[14,118115,118117],{"id":118116},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118119,118120],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[26,118122,118123,118126,118129,118132,118135,118138],{},[29,118124,118125],{},"更稳定的 reward。",[29,118127,118128],{},"合理的 episode 长度。",[29,118130,118131],{},"可重复的随机目标采样。",[29,118133,118134],{},"render 接口。",[29,118136,118137],{},"环境注册代码。",[29,118139,118140],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118142,118143],{},"如果只是自己写训练循环，最小形式是：",[58,118145,118147],{"className":60,"code":118146,"language":62,"meta":63,"style":63},"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",[32,118148,118149,118157,118173,118177,118193,118202,118211,118221],{"__ignoreMap":63},[67,118150,118151,118153,118155],{"class":69,"line":70},[67,118152,117782],{"class":73},[67,118154,85],{"class":84},[67,118156,116380],{"class":73},[67,118158,118159,118161,118163,118165,118167,118169,118171],{"class":69,"line":191},[67,118160,114838],{"class":73},[67,118162,85],{"class":84},[67,118164,116390],{"class":73},[67,118166,116004],{"class":7033},[67,118168,85],{"class":84},[67,118170,78],{"class":77},[67,118172,829],{"class":73},[67,118174,118175],{"class":69,"line":202},[67,118176,631],{"emptyLinePlaceholder":630},[67,118178,118179,118181,118183,118185,118187,118189,118191],{"class":69,"line":641},[67,118180,1512],{"class":84},[67,118182,103212],{"class":73},[67,118184,941],{"class":84},[67,118186,944],{"class":77},[67,118188,854],{"class":73},[67,118190,8227],{"class":77},[67,118192,952],{"class":73},[67,118194,118195,118198,118200],{"class":69,"line":655},[67,118196,118197],{"class":73},"    action ",[67,118199,85],{"class":84},[67,118201,116459],{"class":73},[67,118203,118204,118207,118209],{"class":69,"line":660},[67,118205,118206],{"class":73},"    obs, reward, terminated, truncated, info ",[67,118208,85],{"class":84},[67,118210,114853],{"class":73},[67,118212,118213,118215,118217,118219],{"class":69,"line":665},[67,118214,897],{"class":84},[67,118216,116525],{"class":73},[67,118218,116528],{"class":84},[67,118220,116531],{"class":73},[67,118222,118223,118226,118228],{"class":69,"line":677},[67,118224,118225],{"class":73},"        obs, info ",[67,118227,85],{"class":84},[67,118229,114843],{"class":73},[14,118231,118233],{"id":118232},"_9本章小结","9.本章小结",[19,118235,118236],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[58,118238,118241],{"className":118239,"code":118240,"language":603,"meta":63},[601],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[32,118242,118240],{"__ignoreMap":63},[19,118244,118245],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1903,118247,118248],{},"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":63,"searchDepth":191,"depth":191,"links":118250},[118251,118252,118253,118260,118264,118265,118266,118276,118277],{"id":16,"depth":191,"text":17},{"id":94,"depth":191,"text":95},{"id":243,"depth":191,"text":244,"children":118254},[118255,118257,118259],{"id":115062,"depth":202,"text":118256},"terminated 和 truncated 的区别",{"id":115165,"depth":202,"text":118258},"observation_space 和 action_space",{"id":115292,"depth":202,"text":115293},{"id":611,"depth":191,"text":612,"children":118261},[118262,118263],{"id":1146,"depth":202,"text":1146},{"id":1246,"depth":202,"text":1246},{"id":1646,"depth":191,"text":1647},{"id":1695,"depth":191,"text":1696},{"id":1747,"depth":191,"text":1748,"children":118267},[118268,118269,118271,118272,118274,118275],{"id":117917,"depth":202,"text":117918},{"id":117939,"depth":202,"text":118270},"data.ctrl[:] = action 维度错误",{"id":117974,"depth":202,"text":117975},{"id":117998,"depth":202,"text":118273},"observation_space 维度和 obs 不一致",{"id":118048,"depth":202,"text":118049},{"id":118080,"depth":202,"text":118081},{"id":118116,"depth":191,"text":118117},{"id":118232,"depth":191,"text":118233},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114815,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118284,"title":118285,"body":118286,"description":118709,"extension":1930,"meta":118710,"navigation":630,"path":118711,"seo":118712,"stem":118713,"__hash__":118714},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118287,"toc":118699},[118288,118292,118295,118298,118318,118324,118330,118340,118343,118346,118366,118369,118373,118376,118382,118385,118399,118402,118405,118479,118482,118488,118491,118514,118517,118567,118570,118576,118579,118582,118585,118604,118607,118613,118616,118619,118622,118642,118645,118648,118651,118696],[10,118289,118291],{"id":118290},"mujoco-学习","MuJoCo 学习",[19,118293,118294],{},"初版",[19,118296,118297],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[26,118299,118300,118303,118306,118315],{},[29,118301,118302],{},"MuJoCo 模型文件在描述什么。",[29,118304,118305],{},"Python 代码怎样读取和推进仿真。",[29,118307,118308,2204,118310,2204,118312,118314],{},[32,118309,1687],{},[32,118311,106033],{},[32,118313,106036],{}," 这些数组为什么重要。",[29,118316,118317],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118319,118320,118321,118323],{},"默认环境为 Fedora 44、Python >= 3.10、",[32,118322,102767],{}," 官方 Python bindings。",[19,118325,118326,118327,118329],{},"注意：本文禁止使用 ",[32,118328,102753],{},"。所有示例均使用：",[58,118331,118332],{"className":60,"code":103284,"language":62,"meta":63,"style":63},[32,118333,118334],{"__ignoreMap":63},[67,118335,118336,118338],{"class":69,"line":70},[67,118337,622],{"class":84},[67,118339,638],{"class":73},[14,118341,118342],{"id":118342},"适合谁阅读",[19,118344,118345],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[26,118347,118348,118351,118354,118357],{},[29,118349,118350],{},"没学过 MuJoCo，只会一点 Python。",[29,118352,118353],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[29,118355,118356],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[29,118358,118359,118360,118362,118363,118365],{},"以前接触过 ",[32,118361,102753],{},"，现在想迁移到官方 ",[32,118364,102761],{}," Python bindings。",[19,118367,118368],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118370,118372],{"id":118371},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118374,118375],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[58,118377,118380],{"className":118378,"code":118379,"language":603,"meta":63},[601],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[32,118381,118379],{"__ignoreMap":63},[19,118383,118384],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[26,118386,118387,118390,118393,118396],{},[29,118388,118389],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[29,118391,118392],{},"快速测试控制算法，不必一开始就上真实机器人。",[29,118394,118395],{},"生成强化学习环境。",[29,118397,118398],{},"采集状态、动作、图像、奖励等训练数据。",[14,118400,118401],{"id":118401},"学习前的心智模型",[19,118403,118404],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[399,118406,118407,118419],{},[402,118408,118409],{},[405,118410,118411,118414,118417],{},[408,118412,118413],{"align":410},"部分",[408,118415,118416],{"align":410},"负责什么",[408,118418,22983],{"align":410},[419,118420,118421,118432,118444,118456,118468],{},[405,118422,118423,118426,118429],{},[424,118424,118425],{"align":410},"MJCF XML",[424,118427,118428],{"align":410},"定义世界和机器人结构",[424,118430,118431],{"align":410},"地面、盒子、关节、电机、摄像头",[405,118433,118434,118438,118441],{},[424,118435,118436],{"align":410},[32,118437,102464],{},[424,118439,118440],{"align":410},"编译后的静态模型",[424,118442,118443],{"align":410},"有几个关节、有几个电机、时间步长是多少",[405,118445,118446,118450,118453],{},[424,118447,118448],{"align":410},[32,118449,102474],{},[424,118451,118452],{"align":410},"运行中的动态状态",[424,118454,118455],{"align":410},"当前时间、位置、速度、电机输入",[405,118457,118458,118462,118465],{},[424,118459,118460],{"align":410},[32,118461,102948],{},[424,118463,118464],{"align":410},"推进一步物理仿真",[424,118466,118467],{"align":410},"根据重力、力、碰撞更新状态",[405,118469,118470,118473,118476],{},[424,118471,118472],{"align":410},"Viewer \u002F Renderer",[424,118474,118475],{"align":410},"把仿真显示出来",[424,118477,118478],{"align":410},"打开窗口或保存图片",[19,118480,118481],{},"一句话总结：",[58,118483,118486],{"className":118484,"code":118485,"language":603,"meta":63},[601],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[32,118487,118485],{"__ignoreMap":63},[19,118489,118490],{},"参考来源：",[2994,118492,118493,118500,118507],{},[29,118494,118495,118496],{},"MuJoCo Python 官方文档：",[2230,118497,118498],{"href":118498,"rel":118499},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25657],[29,118501,118502,118503],{},"MuJoCo XML Reference：",[2230,118504,118505],{"href":118505,"rel":118506},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25657],[29,118508,118509,118510],{},"MuJoCo Overview：",[2230,118511,118512],{"href":118512,"rel":118513},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25657],[14,118515,118516],{"id":118516},"章节目录",[26,118518,118519,118525,118531,118537,118543,118549,118555,118561],{},[29,118520,118521],{},[2230,118522,118524],{"href":118523},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[29,118526,118527],{},[2230,118528,118530],{"href":118529},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[29,118532,118533],{},[2230,118534,118536],{"href":118535},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[29,118538,118539],{},[2230,118540,118542],{"href":118541},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[29,118544,118545],{},[2230,118546,118548],{"href":118547},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[29,118550,118551],{},[2230,118552,118554],{"href":118553},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[29,118556,118557],{},[2230,118558,118560],{"href":118559},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[29,118562,118563],{},[2230,118564,118566],{"href":118565},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118568,118569],{"id":118569},"推荐学习路线",[58,118571,118574],{"className":118572,"code":118573,"language":603,"meta":63},[601],"环境安装\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",[32,118575,118573],{"__ignoreMap":63},[19,118577,118578],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118580,118581],{"id":118581},"建议的目录结构",[19,118583,118584],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[58,118586,118588],{"className":101,"code":118587,"language":103,"meta":63,"style":63},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[32,118589,118590,118598],{"__ignoreMap":63},[67,118591,118592,118594,118596],{"class":69,"line":70},[67,118593,102997],{"class":110},[67,118595,31000],{"class":77},[67,118597,103002],{"class":114},[67,118599,118600,118602],{"class":69,"line":191},[67,118601,103007],{"class":77},[67,118603,103002],{"class":114},[19,118605,118606],{},"每一章的代码都单独保存：",[58,118608,118611],{"className":118609,"code":118610,"language":603,"meta":63},[601],"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",[32,118612,118610],{"__ignoreMap":63},[19,118614,118615],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118617,118618],{"id":118618},"学习方法",[19,118620,118621],{},"每章建议按这个顺序操作：",[26,118623,118624,118627,118630,118633,118636,118639],{},[29,118625,118626],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[29,118628,118629],{},"复制最小可运行代码，保存成指定文件。",[29,118631,118632],{},"运行代码，确认没有报错。",[29,118634,118635],{},"对照“运行结果说明”理解输出。",[29,118637,118638],{},"做“验证步骤”，主动改一两个参数。",[29,118640,118641],{},"遇到报错先看“常见错误与解决方案”。",[19,118643,118644],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118646,118647],{"id":118647},"全局排错顺序",[19,118649,118650],{},"遇到问题时，按下面顺序查：",[26,118652,118653,118659,118665,118670,118673,118676,118683,118693],{},[29,118654,118655,118656],{},"Python 环境是否激活：",[32,118657,118658],{},"which python",[29,118660,118661,118662],{},"MuJoCo 是否能导入：",[32,118663,118664],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[29,118666,118667,118668],{},"是否误装了 ",[32,118669,102753],{},[29,118671,118672],{},"XML 标签是否闭合、属性是否拼写正确",[29,118674,118675],{},"actuator 引用的 joint 名字是否存在",[29,118677,118678,118680,118681],{},[32,118679,45],{}," 的长度是否等于 ",[32,118682,229],{},[29,118684,107251,118685,84298,118687,118689,118690],{},[32,118686,1687],{},[32,118688,106033],{}," 后是否调用了 ",[32,118691,118692],{},"mujoco.mj_forward",[29,118694,118695],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1903,118697,118698],{},"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":63,"searchDepth":191,"depth":191,"links":118700},[118701,118702,118703,118704,118705,118706,118707,118708],{"id":118342,"depth":191,"text":118342},{"id":118371,"depth":191,"text":118372},{"id":118401,"depth":191,"text":118401},{"id":118516,"depth":191,"text":118516},{"id":118569,"depth":191,"text":118569},{"id":118581,"depth":191,"text":118581},{"id":118618,"depth":191,"text":118618},{"id":118647,"depth":191,"text":118647},"仿真搭建。",{"category":25175},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118285,"description":118709},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118716,"title":118717,"body":118718,"description":25173,"extension":1930,"meta":119173,"navigation":630,"path":119174,"seo":119175,"stem":119176,"__hash__":119177},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118719,"toc":119171},[118720,118723,118726,118732,119168],[10,118721,118717],{"id":118722},"_1-最常用的基本操作更新",[19,118724,118725],{},"装linux系统教程：",[19,118727,118728],{},[2230,118729,118730],{"href":118730,"rel":118731},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25657],[58,118733,118737],{"className":118734,"code":118735,"language":118736,"meta":63,"style":63},"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",[32,118738,118739,118744,118749,118758,118763,118772,118777,118797,118802,118813,118818,118827,118832,118860,118865,118884,118889,118908,118912,118917,118933,118937,118942,118972,118976,118981,118997,119001,119006,119021,119025,119030,119046,119050,119055,119067,119079,119083,119088,119105,119109,119114,119132,119136,119141,119150,119154,119159],{"__ignoreMap":63},[67,118740,118741],{"class":69,"line":70},[67,118742,118743],{"class":2058},"#更新相关的知识\n",[67,118745,118746],{"class":69,"line":191},[67,118747,118748],{"class":2058},"# 更新软件包列表（从服务器获取最新软件信息）\n",[67,118750,118751,118753,118756],{"class":69,"line":202},[67,118752,111],{"class":110},[67,118754,118755],{"class":114}," apt",[67,118757,28030],{"class":114},[67,118759,118760],{"class":69,"line":641},[67,118761,118762],{"class":2058},"# 升级所有可更新的软件包（不删除旧包）\n",[67,118764,118765,118767,118769],{"class":69,"line":655},[67,118766,111],{"class":110},[67,118768,118755],{"class":114},[67,118770,118771],{"class":114}," upgrade\n",[67,118773,118774],{"class":69,"line":660},[67,118775,118776],{"class":2058},"#更新和升级软件包\n",[67,118778,118779,118781,118783,118786,118788,118790,118792,118795],{"class":69,"line":665},[67,118780,111],{"class":110},[67,118782,118755],{"class":114},[67,118784,118785],{"class":114}," update",[67,118787,27978],{"class":73},[67,118789,111],{"class":110},[67,118791,118755],{"class":114},[67,118793,118794],{"class":114}," upgrade",[67,118796,188],{"class":77},[67,118798,118799],{"class":69,"line":677},[67,118800,118801],{"class":2058},"#列出可更新的软件包及版本信息\n",[67,118803,118804,118807,118810],{"class":69,"line":683},[67,118805,118806],{"class":110},"apt",[67,118808,118809],{"class":114}," list",[67,118811,118812],{"class":77}," --upgradable\n",[67,118814,118815],{"class":69,"line":689},[67,118816,118817],{"class":2058},"#彻底升级（处理依赖关系，可能删除旧包）\n",[67,118819,118820,118822,118824],{"class":69,"line":694},[67,118821,111],{"class":110},[67,118823,118755],{"class":114},[67,118825,118826],{"class":114}," full-upgrade\n",[67,118828,118829],{"class":69,"line":700},[67,118830,118831],{"class":2058},"#设置指定版本\n",[67,118833,118834,118836,118838,118840,118842,118845,118847,118849,118851,118853,118856,118858],{"class":69,"line":706},[67,118835,111],{"class":110},[67,118837,118755],{"class":114},[67,118839,118],{"class":114},[67,118841,30687],{"class":84},[67,118843,118844],{"class":114},"package_nam",[67,118846,2074],{"class":73},[67,118848,2948],{"class":84},[67,118850,85],{"class":114},[67,118852,259],{"class":84},[67,118854,118855],{"class":114},"version_numbe",[67,118857,2659],{"class":73},[67,118859,323],{"class":84},[67,118861,118862],{"class":69,"line":712},[67,118863,118864],{"class":2058},"#只安装软件包不升级\n",[67,118866,118867,118869,118871,118873,118875,118877,118879,118881],{"class":69,"line":717},[67,118868,111],{"class":110},[67,118870,118755],{"class":114},[67,118872,118],{"class":114},[67,118874,30687],{"class":84},[67,118876,118844],{"class":114},[67,118878,2074],{"class":73},[67,118880,2948],{"class":84},[67,118882,118883],{"class":77}," --no-upgrade\n",[67,118885,118886],{"class":69,"line":723},[67,118887,118888],{"class":2058},"#只升级，不存在就不安装\n",[67,118890,118891,118893,118895,118897,118899,118901,118903,118905],{"class":69,"line":729},[67,118892,111],{"class":110},[67,118894,118755],{"class":114},[67,118896,118],{"class":114},[67,118898,30687],{"class":84},[67,118900,118844],{"class":114},[67,118902,2074],{"class":73},[67,118904,2948],{"class":84},[67,118906,118907],{"class":77}," --only-upgrade\n",[67,118909,118910],{"class":69,"line":735},[67,118911,631],{"emptyLinePlaceholder":630},[67,118913,118914],{"class":69,"line":741},[67,118915,118916],{"class":2058},"#安装指定的软件命令\n",[67,118918,118919,118921,118923,118925,118927,118929,118931],{"class":69,"line":747},[67,118920,111],{"class":110},[67,118922,118755],{"class":114},[67,118924,118],{"class":114},[67,118926,30687],{"class":84},[67,118928,118844],{"class":114},[67,118930,2074],{"class":73},[67,118932,323],{"class":84},[67,118934,118935],{"class":69,"line":753},[67,118936,631],{"emptyLinePlaceholder":630},[67,118938,118939],{"class":69,"line":758},[67,118940,118941],{"class":2058},"#安装多个软件包\n",[67,118943,118944,118946,118948,118950,118952,118955,118958,118960,118962,118965,118967,118969],{"class":69,"line":764},[67,118945,111],{"class":110},[67,118947,118755],{"class":114},[67,118949,118],{"class":114},[67,118951,30687],{"class":84},[67,118953,118954],{"class":114},"package_",[67,118956,118957],{"class":84},"1>",[67,118959,30687],{"class":84},[67,118961,118954],{"class":114},[67,118963,118964],{"class":84},"2>",[67,118966,30687],{"class":84},[67,118968,118954],{"class":114},[67,118970,118971],{"class":84},"3>\n",[67,118973,118974],{"class":69,"line":770},[67,118975,631],{"emptyLinePlaceholder":630},[67,118977,118978],{"class":69,"line":776},[67,118979,118980],{"class":2058},"#更新指定的软件命令\n",[67,118982,118983,118985,118987,118989,118991,118993,118995],{"class":69,"line":782},[67,118984,111],{"class":110},[67,118986,118755],{"class":114},[67,118988,118785],{"class":114},[67,118990,30687],{"class":84},[67,118992,118844],{"class":114},[67,118994,2074],{"class":73},[67,118996,323],{"class":84},[67,118998,118999],{"class":69,"line":788},[67,119000,631],{"emptyLinePlaceholder":630},[67,119002,119003],{"class":69,"line":793},[67,119004,119005],{"class":2058},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[67,119007,119008,119010,119013,119015,119017,119019],{"class":69,"line":798},[67,119009,118806],{"class":110},[67,119011,119012],{"class":114}," show",[67,119014,30687],{"class":84},[67,119016,118844],{"class":114},[67,119018,2074],{"class":73},[67,119020,323],{"class":84},[67,119022,119023],{"class":69,"line":816},[67,119024,631],{"emptyLinePlaceholder":630},[67,119026,119027],{"class":69,"line":832},[67,119028,119029],{"class":2058},"#删除软件包命令\n",[67,119031,119032,119034,119036,119038,119040,119042,119044],{"class":69,"line":843},[67,119033,111],{"class":110},[67,119035,118755],{"class":114},[67,119037,27867],{"class":114},[67,119039,30687],{"class":84},[67,119041,118844],{"class":114},[67,119043,2074],{"class":73},[67,119045,323],{"class":84},[67,119047,119048],{"class":69,"line":848},[67,119049,631],{"emptyLinePlaceholder":630},[67,119051,119052],{"class":69,"line":863},[67,119053,119054],{"class":2058},"# 清理旧版本和缓存（释放磁盘空间）\n",[67,119056,119057,119059,119061,119064],{"class":69,"line":876},[67,119058,111],{"class":110},[67,119060,118755],{"class":114},[67,119062,119063],{"class":114}," autoremove",[67,119065,119066],{"class":2058},"  # 删除不再需要的依赖和库文件\n",[67,119068,119069,119071,119073,119076],{"class":69,"line":889},[67,119070,111],{"class":110},[67,119072,118755],{"class":114},[67,119074,119075],{"class":114}," clean",[67,119077,119078],{"class":2058},"       # 清理下载的缓存包\n",[67,119080,119081],{"class":69,"line":894},[67,119082,631],{"emptyLinePlaceholder":630},[67,119084,119085],{"class":69,"line":911},[67,119086,119087],{"class":2058},"#移除软件包及配置文件\n",[67,119089,119090,119092,119094,119097,119099,119101,119103],{"class":69,"line":927},[67,119091,111],{"class":110},[67,119093,118755],{"class":114},[67,119095,119096],{"class":114}," purge",[67,119098,30687],{"class":84},[67,119100,118844],{"class":114},[67,119102,2074],{"class":73},[67,119104,323],{"class":84},[67,119106,119107],{"class":69,"line":932},[67,119108,631],{"emptyLinePlaceholder":630},[67,119110,119111],{"class":69,"line":955},[67,119112,119113],{"class":2058},"#查找软件包命令\n",[67,119115,119116,119118,119120,119123,119125,119128,119130],{"class":69,"line":971},[67,119117,111],{"class":110},[67,119119,118755],{"class":114},[67,119121,119122],{"class":114}," search",[67,119124,30687],{"class":84},[67,119126,119127],{"class":114},"keywor",[67,119129,2305],{"class":73},[67,119131,323],{"class":84},[67,119133,119134],{"class":69,"line":1010},[67,119135,631],{"emptyLinePlaceholder":630},[67,119137,119138],{"class":69,"line":1016},[67,119139,119140],{"class":2058},"#列出所有已安装的包\n",[67,119142,119143,119145,119147],{"class":69,"line":1021},[67,119144,118806],{"class":110},[67,119146,118809],{"class":114},[67,119148,119149],{"class":77}," --installed\n",[67,119151,119152],{"class":69,"line":1034},[67,119153,631],{"emptyLinePlaceholder":630},[67,119155,119156],{"class":69,"line":1053},[67,119157,119158],{"class":2058},"#列出所有已安装的包的版本信息\n",[67,119160,119161,119163,119165],{"class":69,"line":1070},[67,119162,118806],{"class":110},[67,119164,118809],{"class":114},[67,119166,119167],{"class":77}," --all-versions\n",[1903,119169,119170],{},"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":63,"searchDepth":191,"depth":191,"links":119172},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118717,"description":25173},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119179,"title":119180,"body":119181,"description":25173,"extension":1930,"meta":119922,"navigation":630,"path":119923,"seo":119924,"stem":119925,"__hash__":119926},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119182,"toc":119909},[119183,119186,119190,119193,119199,119203,119207,119213,119218,119223,119228,119233,119238,119241,119244,119247,119250,119254,119257,119262,119265,119270,119273,119278,119285,119288,119291,119294,119297,119300,119311,119315,119319,119324,119329,119333,119338,119342,119347,119351,119355,119360,119363,119408,119413,119417,119421,119426,119432,119437,119447,119452,119462,119467,119472,119499,119503,119506,119511,119514,119539,119543,119548,119551,119556,119561,119581,119586,119589,119604,119608,119661,119664,119669,119673,119676,119691,119694,119697,119702,119706,119710,119713,119717,119721,119724,119729,119734,119738,119745,119753,119756,119763,119768,119773,119776,119781,119788,119793,119800,119804,119806,119811,119815,119818,119821,119826,119829,119834,119837,119842,119847,119852,119856,119861,119865,119906],[10,119184,119180],{"id":119185},"_2-linux装机教程",[14,119187,119189],{"id":119188},"_21-实体机","2.1 实体机",[19,119191,119192],{},"使用清华源：（Ubuntu24.04）",[19,119194,119195],{},[2230,119196,119197],{"href":119197,"rel":119198},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25657],[14,119200,119202],{"id":119201},"_22-普通虚拟机","2.2 普通虚拟机",[391,119204,119206],{"id":119205},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119208,119209],{},[2230,119210,119211],{"href":119211,"rel":119212},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25657],[19,119214,119215],{},[3317,119216],{"alt":63,"src":119217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119219,119220],{},[3317,119221],{"alt":63,"src":119222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119224,119225],{},[3317,119226],{"alt":63,"src":119227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119229,119230],{},[3317,119231],{"alt":63,"src":119232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119234,119235],{},[3317,119236],{"alt":63,"src":119237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119239,119240],{},"内存4G（4096MB）；",[19,119242,119243],{},"CPU给4个核；",[19,119245,119246],{},"硬盘动态分配60G；",[19,119248,119249],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[391,119251,119253],{"id":119252},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119255,119256],{},"按照1.1的步骤下载Ubuntu",[19,119258,119259],{},[3317,119260],{"alt":63,"src":119261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119263,119264],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119266,119267],{},[3317,119268],{"alt":63,"src":119269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119271,119272],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119274,119275],{},[3317,119276],{"alt":63,"src":119277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119279,119280,119281,119284],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2144,119282,119283],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119286,119287],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119289,119290],{},"将改动写入磁盘吗 继续",[19,119292,119293],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119295,119296],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119298,119299],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119301,119302,119303,119306,119307,119310],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2144,119304,119305],{},"除了"," 选不发送系统信息与不升级之外， ",[2144,119308,119309],{},"其它"," 都跳过或前进）",[391,119312,119314],{"id":119313},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23794,119316,119318],{"id":119317},"_2231-全屏","2.2.3.1 全屏",[19,119320,119321],{},[3317,119322],{"alt":63,"src":119323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119325,119326],{},[3317,119327],{"alt":63,"src":119328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23794,119330,119332],{"id":119331},"_2232-文件交换","2.2.3.2 文件交换",[19,119334,119335],{},[3317,119336],{"alt":63,"src":119337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23794,119339,119341],{"id":119340},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119343,119344],{},[3317,119345],{"alt":63,"src":119346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119348,119350],{"id":119349},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[391,119352,119354],{"id":119353},"_231-简介与优缺点","2.3.1 简介与优缺点",[26,119356,119357],{},[29,119358,119359],{},"什么情况下推荐？",[19,119361,119362],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[26,119364,119365],{"start":191},[29,119366,119367,119368],{},"优缺点：",[26,119369,119370,119400],{},[29,119371,119372,119373],{},"优点：",[26,119374,119375,119378,119385,119388,119391,119394,119397],{},[29,119376,119377],{},"WSL2是最好的Linux发行版;(bushi)",[29,119379,119380,119381,119384],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2144,119382,119383],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[29,119386,119387],{},"非常方便调用USB设备，可以USB直通;",[29,119389,119390],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[29,119392,119393],{},"非常方便Win与WSL2互相传文件等协同操作;",[29,119395,119396],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[29,119398,119399],{},"非常方便使用Windows的VScode远程开发;",[29,119401,119402,119403],{},"缺点：",[26,119404,119405],{},[29,119406,119407],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119409,119410],{},[3317,119411],{"alt":63,"src":119412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[391,119414,119416],{"id":119415},"_232-安装教程","2.3.2 安装教程",[23794,119418,119420],{"id":119419},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[26,119422,119423],{},[29,119424,119425],{},"方法一(图形界面)",[19,119427,119428,119429,26410],{},"用Win+R输入",[32,119430,119431],{},"appwiz.cpl",[19,119433,119434],{},[3317,119435],{"alt":63,"src":119436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119438,119439,119440,119443,119444,28259],{},"点击OK进入 ",[2144,119441,119442],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2144,119445,119446],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119448,119449],{},[3317,119450],{"alt":63,"src":119451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119453,119454,119455,1264,119458,119461],{},"选择 ",[2144,119456,119457],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2144,119459,119460],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119463,119464],{},[3317,119465],{"alt":63,"src":119466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[26,119468,119469],{"start":191},[29,119470,119471],{},"方法二(命令行)",[58,119473,119477],{"className":119474,"code":119475,"language":119476,"meta":63,"style":63},"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",[32,119478,119479,119484,119489,119494],{"__ignoreMap":63},[67,119480,119481],{"class":69,"line":70},[67,119482,119483],{},"# 开启 Linux 子系统\n",[67,119485,119486],{"class":69,"line":191},[67,119487,119488],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[67,119490,119491],{"class":69,"line":202},[67,119492,119493],{},"# 开启虚拟机平台\n",[67,119495,119496],{"class":69,"line":641},[67,119497,119498],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23794,119500,119502],{"id":119501},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119504,119505],{},"用管理员权限打开powershell",[19,119507,119508],{},[3317,119509],{"alt":63,"src":119510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119512,119513],{},"升级WSL并设置默认版本为WSL2",[58,119515,119517],{"className":119474,"code":119516,"language":119476,"meta":63,"style":63},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[32,119518,119519,119524,119529,119534],{"__ignoreMap":63},[67,119520,119521],{"class":69,"line":70},[67,119522,119523],{},"# 更新 wsl\n",[67,119525,119526],{"class":69,"line":191},[67,119527,119528],{},"wsl --update\n",[67,119530,119531],{"class":69,"line":202},[67,119532,119533],{},"# 将 wsl 版本设置为 wsl2\n",[67,119535,119536],{"class":69,"line":641},[67,119537,119538],{},"wsl --set-default-version 2\n",[23794,119540,119542],{"id":119541},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[26,119544,119545],{},[29,119546,119547],{},"方式一(商店下载)",[19,119549,119550],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119552,119553],{},[3317,119554],{"alt":63,"src":119555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[26,119557,119558],{"start":191},[29,119559,119560],{},"方式二(命令行安装)",[58,119562,119564],{"className":119474,"code":119563,"language":119476,"meta":63,"style":63},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[32,119565,119566,119571,119576],{"__ignoreMap":63},[67,119567,119568],{"class":69,"line":70},[67,119569,119570],{},"# 列出可安装的 Linux 版本\n",[67,119572,119573],{"class":69,"line":191},[67,119574,119575],{},"#（需要科学手段）\n",[67,119577,119578],{"class":69,"line":202},[67,119579,119580],{},"wsl --list --online\n",[19,119582,119583],{},[3317,119584],{"alt":63,"src":119585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119587,119588],{},"选择对应发行版并安装",[58,119590,119592],{"className":119474,"code":119591,"language":119476,"meta":63,"style":63},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[32,119593,119594,119599],{"__ignoreMap":63},[67,119595,119596],{"class":69,"line":70},[67,119597,119598],{},"# Ubuntu安装完毕后需要重启系统\n",[67,119600,119601],{"class":69,"line":191},[67,119602,119603],{},"wsl --install -d Ubuntu-24.04\n",[23794,119605,119607],{"id":119606},"_2324-查看系统状态","2.3.2.4 查看系统状态",[58,119609,119611],{"className":119474,"code":119610,"language":119476,"meta":63,"style":63},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[32,119612,119613,119618,119623,119628,119633,119637,119641,119646,119651,119656],{"__ignoreMap":63},[67,119614,119615],{"class":69,"line":70},[67,119616,119617],{},"# 查看 wsl\n",[67,119619,119620],{"class":69,"line":191},[67,119621,119622],{},"wsl -l\n",[67,119624,119625],{"class":69,"line":202},[67,119626,119627],{},"# 查看 wsl 运行版本或模式\n",[67,119629,119630],{"class":69,"line":641},[67,119631,119632],{},"wsl -l -v\n",[67,119634,119635],{"class":69,"line":655},[67,119636,631],{"emptyLinePlaceholder":630},[67,119638,119639],{"class":69,"line":660},[67,119640,631],{"emptyLinePlaceholder":630},[67,119642,119643],{"class":69,"line":665},[67,119644,119645],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[67,119647,119648],{"class":69,"line":677},[67,119649,119650],{},"wsl --set-version \u003Cdistro> 2\n",[67,119652,119653],{"class":69,"line":683},[67,119654,119655],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[67,119657,119658],{"class":69,"line":689},[67,119659,119660],{},"wsl --unregister \u003Cdistro>\n",[19,119662,119663],{},"输出Version为2即正常",[19,119665,119666],{},[3317,119667],{"alt":63,"src":119668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23794,119670,119672],{"id":119671},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119674,119675],{},"直接在Powershell里输入wsl命令进入子系统",[58,119677,119679],{"className":119474,"code":119678,"language":119476,"meta":63,"style":63},"# 进入子系统\nwsl\n",[32,119680,119681,119686],{"__ignoreMap":63},[67,119682,119683],{"class":69,"line":70},[67,119684,119685],{},"# 进入子系统\n",[67,119687,119688],{"class":69,"line":191},[67,119689,119690],{},"wsl\n",[19,119692,119693],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119695,119696],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119698,119699],{},[3317,119700],{"alt":63,"src":119701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[391,119703,119705],{"id":119704},"_233-配置各种环境","2.3.3 配置各种环境",[23794,119707,119709],{"id":119708},"_2331-换源","2.3.3.1 换源",[19,119711,119712],{},"(同实体机LINUX，往下找教程)",[23794,119714,119716],{"id":119715},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24706,119718,119720],{"id":119719},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119722,119723],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119725,119726],{},[3317,119727],{"alt":63,"src":119728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119730,119731],{},[3317,119732],{"alt":63,"src":119733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24706,119735,119737],{"id":119736},"_23322-cuda","2.3.3.2.2 CUDA",[19,119739,119740,119741],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2230,119742,119743],{"href":119743,"rel":119744},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25657],[19,119746,119747,119750],{},[3317,119748],{"alt":63,"src":119749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3317,119751],{"alt":63,"src":119752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119754,119755],{},"在下方的网站，选择合适的版本。",[19,119757,119758,119759],{},"WSL2 专属 CUDA 指南：",[2230,119760,119761],{"href":119761,"rel":119762},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25657],[19,119764,119765],{},[2144,119766,119767],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119769,119770],{},[3317,119771],{"alt":63,"src":119772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119774,119775],{},"挨行敲一遍",[19,119777,119778],{},[3317,119779],{"alt":63,"src":119780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119782,119783,119784,119787],{},"敲完后，输入",[32,119785,119786],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119789,119790],{},[3317,119791],{"alt":63,"src":119792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119794,119795,119796,119799],{},"（请详看下方教程的",[2144,119797,119798],{},"安装CUDA的配置环境来看","如何配置环境）",[24706,119801,119803],{"id":119802},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119805,119712],{},[19,119807,119808],{},[3317,119809],{"alt":63,"src":119810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23794,119812,119814],{"id":119813},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119816,119817],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119819,119820],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119822,119823],{},[3317,119824],{"alt":63,"src":119825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119827,119828],{},"连接WSL2",[19,119830,119831],{},[3317,119832],{"alt":63,"src":119833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119835,119836],{},"远程开发成功。",[19,119838,119839],{},[3317,119840],{"alt":63,"src":119841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119843,119844],{},[3317,119845],{"alt":63,"src":119846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119848,119849],{},[3317,119850],{"alt":63,"src":119851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23794,119853,119855],{"id":119854},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119857,119858],{},[3317,119859],{"alt":63,"src":119860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23794,119862,119864],{"id":119863},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[58,119866,119868],{"className":118734,"code":119867,"language":118736,"meta":63,"style":63},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[32,119869,119870,119878,119886,119897,119901],{"__ignoreMap":63},[67,119871,119872,119874,119876],{"class":69,"line":70},[67,119873,111],{"class":110},[67,119875,118755],{"class":114},[67,119877,28030],{"class":114},[67,119879,119880,119882,119884],{"class":69,"line":191},[67,119881,111],{"class":110},[67,119883,118755],{"class":114},[67,119885,118771],{"class":114},[67,119887,119888,119890,119892,119894],{"class":69,"line":202},[67,119889,111],{"class":110},[67,119891,118755],{"class":114},[67,119893,118],{"class":114},[67,119895,119896],{"class":114}," mesa-utils\n",[67,119898,119899],{"class":69,"line":641},[67,119900,631],{"emptyLinePlaceholder":630},[67,119902,119903],{"class":69,"line":655},[67,119904,119905],{"class":2058},"#然后重启wsl2即可\n",[1903,119907,119908],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":63,"searchDepth":191,"depth":191,"links":119910},[119911,119912,119917],{"id":119188,"depth":191,"text":119189},{"id":119201,"depth":191,"text":119202,"children":119913},[119914,119915,119916],{"id":119205,"depth":202,"text":119206},{"id":119252,"depth":202,"text":119253},{"id":119313,"depth":202,"text":119314},{"id":119349,"depth":191,"text":119350,"children":119918},[119919,119920,119921],{"id":119353,"depth":202,"text":119354},{"id":119415,"depth":202,"text":119416},{"id":119704,"depth":202,"text":119705},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119180,"description":25173},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119928,"title":119929,"body":119930,"description":25173,"extension":1930,"meta":122866,"navigation":630,"path":122867,"seo":122868,"stem":122869,"__hash__":122870},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119931,"toc":122838},[119932,119935,119939,119945,119949,119955,119959,120147,120150,120155,120159,120163,120166,120169,120175,120180,120183,120186,120191,120224,120229,120233,120310,120313,120318,120322,120325,120364,120367,120376,120394,120399,120406,120523,120528,120531,120558,120563,120567,120576,120626,120633,120637,120640,120654,120661,120695,120700,120704,120727,120730,120735,120739,120742,120745,120748,120790,120794,120797,120800,120841,120845,120849,120852,120857,120862,120865,120888,120891,120899,120904,120907,120912,120917,120920,120925,120929,120934,120957,120962,121024,121032,121037,121042,121045,121050,121053,121058,121063,121081,121086,121092,121097,121111,121115,121118,121121,121124,121167,121170,121175,121276,121279,121284,121288,121292,121329,121333,121337,121341,121387,121391,121436,121440,121447,121455,121510,121513,121590,121593,121616,121620,121623,121628,121633,121641,121644,121649,121654,121659,121662,121667,121676,121679,121684,121687,121758,121763,121766,121771,121774,121779,121782,121787,121790,121795,121800,121803,121878,121881,121894,121899,121902,121916,121919,121948,121953,121982,121985,121990,121994,121999,122008,122011,122016,122019,122024,122027,122030,122035,122038,122043,122048,122051,122056,122059,122184,122189,122219,122222,122227,122232,122249,122252,122295,122298,122325,122330,122343,122486,122490,122495,122509,122512,122563,122566,122596,122599,122615,122620,122634,122637,122704,122709,122718,122723,122726,122738,122743,122750,122774,122777,122782,122785,122804,122809,122816,122828,122835],[10,119933,119929],{"id":119934},"_3-安装必备配置",[14,119936,119938],{"id":119937},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[58,119940,119943],{"className":119941,"code":119942,"language":603},[601],"  打开下方网站（注意，该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",[32,119944,119942],{"__ignoreMap":63},[391,119946,119948],{"id":119947},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[58,119950,119953],{"className":119951,"code":119952,"language":603},[601],"  输入以下命令\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",[32,119954,119952],{"__ignoreMap":63},[391,119956,119958],{"id":119957},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[58,119960,119964],{"className":119961,"code":119962,"language":119963,"meta":63,"style":63},"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",[32,119965,119966,119974,119985,119997,120011,120015,120025,120030,120034,120038,120043,120047,120059,120063,120068,120072,120083,120087,120103,120107,120118,120122,120127,120131,120139],{"__ignoreMap":63},[67,119967,119968,119970,119972],{"class":69,"line":70},[67,119969,111],{"class":110},[67,119971,118755],{"class":114},[67,119973,28030],{"class":114},[67,119975,119976,119978,119980,119982],{"class":69,"line":191},[67,119977,111],{"class":110},[67,119979,118755],{"class":114},[67,119981,118],{"class":114},[67,119983,119984],{"class":114}," vim\n",[67,119986,119987,119989,119992,119994],{"class":69,"line":202},[67,119988,111],{"class":110},[67,119990,119991],{"class":114}," rm",[67,119993,27115],{"class":77},[67,119995,119996],{"class":114}," \u002Fetc\u002Fapt\u002Fsources.list\n",[67,119998,119999,120001,120003,120005,120008],{"class":69,"line":641},[67,120000,111],{"class":110},[67,120002,119991],{"class":114},[67,120004,27115],{"class":77},[67,120006,120007],{"class":114}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[67,120009,120010],{"class":77},"**\n",[67,120012,120013],{"class":69,"line":655},[67,120014,631],{"emptyLinePlaceholder":630},[67,120016,120017,120019,120022],{"class":69,"line":660},[67,120018,111],{"class":110},[67,120020,120021],{"class":114}," vim",[67,120023,120024],{"class":114}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[67,120026,120027],{"class":69,"line":665},[67,120028,120029],{"class":114},"```\n",[67,120031,120032],{"class":69,"line":677},[67,120033,631],{"emptyLinePlaceholder":630},[67,120035,120036],{"class":69,"line":683},[67,120037,631],{"emptyLinePlaceholder":630},[67,120039,120040],{"class":69,"line":689},[67,120041,120042],{"class":110},"选择好Ubuntu版本后，复制下方的内容。\n",[67,120044,120045],{"class":69,"line":694},[67,120046,631],{"emptyLinePlaceholder":630},[67,120048,120049,120051,120054,120057],{"class":69,"line":700},[67,120050,2218],{"class":84},[67,120052,120053],{"class":114},"[](",[67,120055,120056],{"class":110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[67,120058,829],{"class":114},[67,120060,120061],{"class":69,"line":706},[67,120062,631],{"emptyLinePlaceholder":630},[67,120064,120065],{"class":69,"line":712},[67,120066,120067],{"class":110},"粘贴进去\n",[67,120069,120070],{"class":69,"line":717},[67,120071,631],{"emptyLinePlaceholder":630},[67,120073,120074,120076,120078,120081],{"class":69,"line":723},[67,120075,2218],{"class":84},[67,120077,120053],{"class":114},[67,120079,120080],{"class":110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[67,120082,829],{"class":114},[67,120084,120085],{"class":69,"line":729},[67,120086,631],{"emptyLinePlaceholder":630},[67,120088,120089,120092,120095,120098,120100],{"class":69,"line":735},[67,120090,120091],{"class":110},"按一下ESC，然后英文冒号，输入",[67,120093,120094],{"class":114}," `",[67,120096,120097],{"class":110},":wq!",[67,120099,2960],{"class":114},[67,120101,120102],{"class":110},"然后回车\n",[67,120104,120105],{"class":69,"line":741},[67,120106,631],{"emptyLinePlaceholder":630},[67,120108,120109,120111,120113,120116],{"class":69,"line":747},[67,120110,2218],{"class":84},[67,120112,120053],{"class":114},[67,120114,120115],{"class":110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[67,120117,829],{"class":114},[67,120119,120120],{"class":69,"line":753},[67,120121,631],{"emptyLinePlaceholder":630},[67,120123,120124],{"class":69,"line":758},[67,120125,120126],{"class":110},"输入以下命令\n",[67,120128,120129],{"class":69,"line":764},[67,120130,631],{"emptyLinePlaceholder":630},[67,120132,120133,120136],{"class":69,"line":770},[67,120134,120135],{"class":114},"```",[67,120137,120138],{"class":110},"Bash\n",[67,120140,120141,120143,120145],{"class":69,"line":776},[67,120142,111],{"class":110},[67,120144,118755],{"class":114},[67,120146,28030],{"class":114},[19,120148,120149],{},"这里被替换成对应学校则成功",[19,120151,120152],{},[3317,120153],{"alt":63,"src":120154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120156,120158],{"id":120157},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[391,120160,120162],{"id":120161},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120164,120165],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120167,120168],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120170,120171],{},[2230,120172,120173],{"href":120173,"rel":120174},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25657],[19,120176,120177],{},[3317,120178],{"alt":63,"src":120179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120181,120182],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120184,120185],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120187,120188],{},[3317,120189],{"alt":63,"src":120190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[58,120192,120194],{"className":118734,"code":120193,"language":118736,"meta":63,"style":63},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[32,120195,120196,120201,120208,120213],{"__ignoreMap":63},[67,120197,120198],{"class":69,"line":70},[67,120199,120200],{"class":2058},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[67,120202,120203,120205],{"class":69,"line":191},[67,120204,103007],{"class":77},[67,120206,120207],{"class":114}," ~\u002FDownloads\n",[67,120209,120210],{"class":69,"line":202},[67,120211,120212],{"class":2058},"#下方chrome安装包名不一定是这个，根据名字来看\n",[67,120214,120215,120217,120219,120221],{"class":69,"line":641},[67,120216,111],{"class":110},[67,120218,118755],{"class":114},[67,120220,118],{"class":114},[67,120222,120223],{"class":114}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120225,120226],{},[3317,120227],{"alt":63,"src":120228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[391,120230,120232],{"id":120231},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[58,120234,120236],{"className":118734,"code":120235,"language":118736,"meta":63,"style":63},"# 老版\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",[32,120237,120238,120243,120251,120262,120267,120271,120276,120286,120294,120305],{"__ignoreMap":63},[67,120239,120240],{"class":69,"line":70},[67,120241,120242],{"class":2058},"# 老版\n",[67,120244,120245,120247,120249],{"class":69,"line":191},[67,120246,111],{"class":110},[67,120248,118755],{"class":114},[67,120250,28030],{"class":114},[67,120252,120253,120255,120257,120259],{"class":69,"line":202},[67,120254,111],{"class":110},[67,120256,118755],{"class":114},[67,120258,118],{"class":114},[67,120260,120261],{"class":114}," neofetch\n",[67,120263,120264],{"class":69,"line":641},[67,120265,120266],{"class":110},"neofetch\n",[67,120268,120269],{"class":69,"line":655},[67,120270,631],{"emptyLinePlaceholder":630},[67,120272,120273],{"class":69,"line":660},[67,120274,120275],{"class":2058},"# 新版\n",[67,120277,120278,120280,120283],{"class":69,"line":665},[67,120279,111],{"class":110},[67,120281,120282],{"class":114}," add-apt-repository",[67,120284,120285],{"class":114}," ppa:zhangsongcui3371\u002Ffastfetch\n",[67,120287,120288,120290,120292],{"class":69,"line":677},[67,120289,111],{"class":110},[67,120291,118755],{"class":114},[67,120293,28030],{"class":114},[67,120295,120296,120298,120300,120302],{"class":69,"line":683},[67,120297,111],{"class":110},[67,120299,118755],{"class":114},[67,120301,118],{"class":114},[67,120303,120304],{"class":114}," fastfetch\n",[67,120306,120307],{"class":69,"line":689},[67,120308,120309],{"class":110},"fastfetch\n",[19,120311,120312],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120314,120315],{},[3317,120316],{"alt":63,"src":120317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[391,120319,120321],{"id":120320},"_323-移除snap应用","3.2.3 移除snap应用",[19,120323,120324],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[58,120326,120328],{"className":118734,"code":120327,"language":118736,"meta":63,"style":63},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[32,120329,120330,120342,120353],{"__ignoreMap":63},[67,120331,120332,120334,120336,120339],{"class":69,"line":70},[67,120333,111],{"class":110},[67,120335,28299],{"class":114},[67,120337,120338],{"class":114}," disable",[67,120340,120341],{"class":114}," snapd.service\n",[67,120343,120344,120346,120348,120350],{"class":69,"line":191},[67,120345,111],{"class":110},[67,120347,28299],{"class":114},[67,120349,120338],{"class":114},[67,120351,120352],{"class":114}," snapd.socket\n",[67,120354,120355,120357,120359,120361],{"class":69,"line":202},[67,120356,111],{"class":110},[67,120358,28299],{"class":114},[67,120360,120338],{"class":114},[67,120362,120363],{"class":114}," snapd.seeded.service\n",[19,120365,120366],{},"然后查看snap应用列表",[19,120368,120369,120370,120375],{},"根据你安装的选择不同（最小安装或普通安装），有",[2230,120371,120374],{"href":120372,"rel":120373},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25657],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[58,120377,120379],{"className":118734,"code":120378,"language":118736,"meta":63,"style":63},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[32,120380,120381,120386],{"__ignoreMap":63},[67,120382,120383],{"class":69,"line":70},[67,120384,120385],{"class":2058},"# 查询当前系统上snap安装了哪些app\n",[67,120387,120388,120391],{"class":69,"line":191},[67,120389,120390],{"class":110},"snap",[67,120392,120393],{"class":114}," list\n",[19,120395,120396],{},[3317,120397],{"alt":63,"src":120398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120400,120401,120402,120405],{},"卸载掉图中所有应用，按照 ",[2144,120403,120404],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[58,120407,120409],{"className":118734,"code":120408,"language":118736,"meta":63,"style":63},"#移除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",[32,120410,120411,120416,120428,120433,120444,120449,120460,120465,120476,120481,120485,120490,120501,120512],{"__ignoreMap":63},[67,120412,120413],{"class":69,"line":70},[67,120414,120415],{"class":2058},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[67,120417,120418,120420,120423,120425],{"class":69,"line":191},[67,120419,111],{"class":110},[67,120421,120422],{"class":114}," snap",[67,120424,27867],{"class":114},[67,120426,120427],{"class":114}," snap-store\n",[67,120429,120430],{"class":69,"line":202},[67,120431,120432],{"class":2058},"#移除firefox浏览器\n",[67,120434,120435,120437,120439,120441],{"class":69,"line":641},[67,120436,111],{"class":110},[67,120438,120422],{"class":114},[67,120440,27867],{"class":114},[67,120442,120443],{"class":114}," firefox\n",[67,120445,120446],{"class":69,"line":655},[67,120447,120448],{"class":2058},"#移除gnome-42-2204\n",[67,120450,120451,120453,120455,120457],{"class":69,"line":660},[67,120452,111],{"class":110},[67,120454,120422],{"class":114},[67,120456,27867],{"class":114},[67,120458,120459],{"class":114}," gnome-42-2204\n",[67,120461,120462],{"class":69,"line":665},[67,120463,120464],{"class":2058},"#移除gtk-common-themes\n",[67,120466,120467,120469,120471,120473],{"class":69,"line":677},[67,120468,111],{"class":110},[67,120470,120422],{"class":114},[67,120472,27867],{"class":114},[67,120474,120475],{"class":114}," gtk-common-themes\n",[67,120477,120478],{"class":69,"line":683},[67,120479,120480],{"class":2058},"#移除其它...\n",[67,120482,120483],{"class":69,"line":689},[67,120484,4499],{"class":73},[67,120486,120487],{"class":69,"line":694},[67,120488,120489],{"class":2058},"#移除core22,bare以及snapd\n",[67,120491,120492,120494,120496,120498],{"class":69,"line":700},[67,120493,111],{"class":110},[67,120495,120422],{"class":114},[67,120497,27867],{"class":114},[67,120499,120500],{"class":114}," core22\n",[67,120502,120503,120505,120507,120509],{"class":69,"line":706},[67,120504,111],{"class":110},[67,120506,120422],{"class":114},[67,120508,27867],{"class":114},[67,120510,120511],{"class":114}," bare\n",[67,120513,120514,120516,120518,120520],{"class":69,"line":712},[67,120515,111],{"class":110},[67,120517,120422],{"class":114},[67,120519,27867],{"class":114},[67,120521,120522],{"class":114}," snapd\n",[19,120524,120525],{},[3317,120526],{"alt":63,"src":120527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120529,120530],{},"输入以下命令查看是否还有snap包",[58,120532,120534],{"className":118734,"code":120533,"language":118736,"meta":63,"style":63},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[32,120535,120536,120542,120546,120550,120554],{"__ignoreMap":63},[67,120537,120538,120540],{"class":69,"line":70},[67,120539,120390],{"class":110},[67,120541,120393],{"class":114},[67,120543,120544],{"class":69,"line":191},[67,120545,120242],{"class":2058},[67,120547,120548],{"class":69,"line":202},[67,120549,120266],{"class":110},[67,120551,120552],{"class":69,"line":641},[67,120553,120275],{"class":2058},[67,120555,120556],{"class":69,"line":655},[67,120557,120309],{"class":110},[19,120559,120560],{},[3317,120561],{"alt":63,"src":120562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[391,120564,120566],{"id":120565},"_324-移除snap","3.2.4 移除snap",[19,120568,120569,120570,120575],{},"在删除掉",[2230,120571,120574],{"href":120572,"rel":120573},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25657],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[58,120577,120579],{"className":118734,"code":120578,"language":118736,"meta":63,"style":63}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[32,120580,120581,120586,120599,120604,120615],{"__ignoreMap":63},[67,120582,120583],{"class":69,"line":70},[67,120584,120585],{"class":2058}," #使用apt移除掉snap\n",[67,120587,120588,120590,120592,120594,120597],{"class":69,"line":191},[67,120589,111],{"class":110},[67,120591,118755],{"class":114},[67,120593,119063],{"class":114},[67,120595,120596],{"class":77}," --purge",[67,120598,120522],{"class":114},[67,120600,120601],{"class":69,"line":202},[67,120602,120603],{"class":2058},"#移除snapd的一些目录\n",[67,120605,120606,120608,120610,120612],{"class":69,"line":641},[67,120607,111],{"class":110},[67,120609,119991],{"class":114},[67,120611,27115],{"class":77},[67,120613,120614],{"class":114}," \u002Fvar\u002Fcache\u002Fsnapd\n",[67,120616,120617,120619,120621,120623],{"class":69,"line":655},[67,120618,111],{"class":110},[67,120620,119991],{"class":114},[67,120622,27115],{"class":77},[67,120624,120625],{"class":114}," ~\u002Fsnap\n",[19,120627,120628,120629,120632],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[32,120630,120631],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[391,120634,120636],{"id":120635},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120638,120639],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[58,120641,120643],{"className":118734,"code":120642,"language":118736,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[32,120644,120645],{"__ignoreMap":63},[67,120646,120647,120649,120651],{"class":69,"line":70},[67,120648,111],{"class":110},[67,120650,120021],{"class":114},[67,120652,120653],{"class":114}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120655,120656,120657,120660],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[32,120658,120659],{},":wq"," 回车",[58,120662,120664],{"className":118734,"code":120663,"language":118736,"meta":63,"style":63},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[32,120665,120666,120673,120687],{"__ignoreMap":63},[67,120667,120668,120671],{"class":69,"line":70},[67,120669,120670],{"class":110},"Package:",[67,120672,120522],{"class":114},[67,120674,120675,120678,120681,120684],{"class":69,"line":191},[67,120676,120677],{"class":110},"Pin:",[67,120679,120680],{"class":114}," release",[67,120682,120683],{"class":114}," a=",[67,120685,120686],{"class":77},"*\n",[67,120688,120689,120692],{"class":69,"line":202},[67,120690,120691],{"class":110},"Pin-Priority:",[67,120693,120694],{"class":77}," -10\n",[19,120696,120697],{},[3317,120698],{"alt":63,"src":120699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[391,120701,120703],{"id":120702},"_326-测试是否成功","3.2.6 测试是否成功",[58,120705,120707],{"className":118734,"code":120706,"language":118736,"meta":63,"style":63},"sudo apt update\nsudo apt install firefox\n",[32,120708,120709,120717],{"__ignoreMap":63},[67,120710,120711,120713,120715],{"class":69,"line":70},[67,120712,111],{"class":110},[67,120714,118755],{"class":114},[67,120716,28030],{"class":114},[67,120718,120719,120721,120723,120725],{"class":69,"line":191},[67,120720,111],{"class":110},[67,120722,118755],{"class":114},[67,120724,118],{"class":114},[67,120726,120443],{"class":114},[19,120728,120729],{},"这里提示snapd无法被安装，就证明成功了",[19,120731,120732],{},[3317,120733],{"alt":63,"src":120734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[391,120736,120738],{"id":120737},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120740,120741],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120743,120744],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120746,120747],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[58,120749,120751],{"className":118734,"code":120750,"language":118736,"meta":63,"style":63},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[32,120752,120753,120758,120767,120772,120780],{"__ignoreMap":63},[67,120754,120755],{"class":69,"line":70},[67,120756,120757],{"class":2058},"# 添加Mozilla提供的源\n",[67,120759,120760,120762,120764],{"class":69,"line":191},[67,120761,111],{"class":110},[67,120763,120282],{"class":114},[67,120765,120766],{"class":114}," ppa:mozillateam\u002Fppa\n",[67,120768,120769],{"class":69,"line":202},[67,120770,120771],{"class":2058},"# 安装Firefox\n",[67,120773,120774,120776,120778],{"class":69,"line":641},[67,120775,111],{"class":110},[67,120777,118755],{"class":114},[67,120779,28030],{"class":114},[67,120781,120782,120784,120786,120788],{"class":69,"line":655},[67,120783,111],{"class":110},[67,120785,118755],{"class":114},[67,120787,118],{"class":114},[67,120789,120443],{"class":114},[391,120791,120793],{"id":120792},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120795,120796],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120798,120799],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[58,120801,120803],{"className":118734,"code":120802,"language":118736,"meta":63,"style":63},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[32,120804,120805,120810,120820,120828,120832],{"__ignoreMap":63},[67,120806,120807],{"class":69,"line":70},[67,120808,120809],{"class":2058},"#删掉禁止安装snap的配置文件\n",[67,120811,120812,120814,120816,120818],{"class":69,"line":191},[67,120813,111],{"class":110},[67,120815,119991],{"class":114},[67,120817,27115],{"class":77},[67,120819,120653],{"class":114},[67,120821,120822,120824,120826],{"class":69,"line":202},[67,120823,111],{"class":110},[67,120825,118755],{"class":114},[67,120827,28030],{"class":114},[67,120829,120830],{"class":69,"line":641},[67,120831,631],{"emptyLinePlaceholder":630},[67,120833,120834,120836,120838],{"class":69,"line":655},[67,120835,111],{"class":110},[67,120837,118755],{"class":114},[67,120839,120840],{"class":114}," dist-update\n",[14,120842,120844],{"id":120843},"_33-中文输入法","3.3 中文输入法",[391,120846,120848],{"id":120847},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120850,120851],{},"官网下载搜狗输入法",[19,120853,120854],{},[3317,120855],{"alt":63,"src":120856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120858,120859],{},[3317,120860],{"alt":63,"src":120861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120863,120864],{},"打开终端输入如下",[58,120866,120868],{"className":118734,"code":120867,"language":118736,"meta":63,"style":63},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[32,120869,120870,120877],{"__ignoreMap":63},[67,120871,120872,120874],{"class":69,"line":70},[67,120873,103007],{"class":77},[67,120875,120876],{"class":114}," ~\u002FDownloads\u002F\n",[67,120878,120879,120881,120883,120885],{"class":69,"line":191},[67,120880,111],{"class":110},[67,120882,118755],{"class":114},[67,120884,118],{"class":114},[67,120886,120887],{"class":114}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120889,120890],{},"打开Fcitx",[19,120892,120893,120896],{},[3317,120894],{"alt":63,"src":120895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3317,120897],{"alt":63,"src":120898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120900,120901],{},[3317,120902],{"alt":63,"src":120903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120905,120906],{},"添加搜狗输入法",[19,120908,120909],{},[3317,120910],{"alt":63,"src":120911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120913,120914],{},[3317,120915],{"alt":63,"src":120916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120918,120919],{},"将搜狗输入法设置为唯一输入法",[19,120921,120922],{},[3317,120923],{"alt":63,"src":120924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[391,120926,120928],{"id":120927},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[26,120930,120931],{},[29,120932,120933],{},"卸载旧输入法",[58,120935,120937],{"className":119961,"code":120936,"language":119963,"meta":63,"style":63},"sudo apt purge fcitx* ibus*\n",[32,120938,120939],{"__ignoreMap":63},[67,120940,120941,120943,120945,120947,120950,120952,120955],{"class":69,"line":70},[67,120942,111],{"class":110},[67,120944,118755],{"class":114},[67,120946,119096],{"class":114},[67,120948,120949],{"class":114}," fcitx",[67,120951,965],{"class":77},[67,120953,120954],{"class":114}," ibus",[67,120956,120686],{"class":77},[26,120958,120959],{"start":191},[29,120960,120961],{},"安装Fcitx5",[58,120963,120965],{"className":118734,"code":120964,"language":118736,"meta":63,"style":63},"# 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",[32,120966,120967,120972,120986,120990,120995,121004,121012],{"__ignoreMap":63},[67,120968,120969],{"class":69,"line":70},[67,120970,120971],{"class":2058},"# Ubuntu22.04及以上、Debian12及以上\n",[67,120973,120974,120976,120978,120980,120983],{"class":69,"line":191},[67,120975,111],{"class":110},[67,120977,118755],{"class":114},[67,120979,118],{"class":114},[67,120981,120982],{"class":114}," fcitx5",[67,120984,120985],{"class":114}," fcitx5-chinese-addons\n",[67,120987,120988],{"class":69,"line":202},[67,120989,631],{"emptyLinePlaceholder":630},[67,120991,120992],{"class":69,"line":641},[67,120993,120994],{"class":2058},"# Ubuntu20.04\n",[67,120996,120997,120999,121001],{"class":69,"line":655},[67,120998,111],{"class":110},[67,121000,120282],{"class":114},[67,121002,121003],{"class":114}," ppa:zhsj\u002Ffcitx5\n",[67,121005,121006,121008,121010],{"class":69,"line":660},[67,121007,111],{"class":110},[67,121009,118755],{"class":114},[67,121011,28030],{"class":114},[67,121013,121014,121016,121018,121020,121022],{"class":69,"line":665},[67,121015,111],{"class":110},[67,121017,118755],{"class":114},[67,121019,118],{"class":114},[67,121021,120982],{"class":114},[67,121023,120985],{"class":114},[26,121025,121026,121029],{"start":202},[29,121027,121028],{},"Reboot System",[29,121030,121031],{},"启动Fcitx5",[19,121033,121034],{},[3317,121035],{"alt":63,"src":121036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[26,121038,121039],{"start":655},[29,121040,121041],{},"修改一些设置",[19,121043,121044],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121046,121047],{},[3317,121048],{"alt":63,"src":121049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121051,121052],{},"添加快捷键以便于更好切换中英文",[19,121054,121055],{},[3317,121056],{"alt":63,"src":121057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[26,121059,121060],{"start":660},[29,121061,121062],{},"重启",[58,121064,121066],{"className":119961,"code":121065,"language":119963,"meta":63,"style":63},"sudo shutdown -r now\n",[32,121067,121068],{"__ignoreMap":63},[67,121069,121070,121072,121075,121078],{"class":69,"line":70},[67,121071,111],{"class":110},[67,121073,121074],{"class":114}," shutdown",[67,121076,121077],{"class":77}," -r",[67,121079,121080],{"class":114}," now\n",[26,121082,121083],{"start":665},[29,121084,121085],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121087,121088],{},[2230,121089,121090],{"href":121090,"rel":121091},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25657],[26,121093,121094],{"start":677},[29,121095,121096],{},"再重启",[58,121098,121099],{"className":119961,"code":121065,"language":119963,"meta":63,"style":63},[32,121100,121101],{"__ignoreMap":63},[67,121102,121103,121105,121107,121109],{"class":69,"line":70},[67,121104,111],{"class":110},[67,121106,121074],{"class":114},[67,121108,121077],{"class":77},[67,121110,121080],{"class":114},[14,121112,121114],{"id":121113},"_34-pip3源替换","3.4 pip3源替换",[19,121116,121117],{},"非Debian系发行版需要做。",[19,121119,121120],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121122,121123],{},"使用dnf的系统也可能不用做。",[58,121125,121127],{"className":118734,"code":121126,"language":118736,"meta":63,"style":63},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[32,121128,121129,121134,121141,121146,121151],{"__ignoreMap":63},[67,121130,121131],{"class":69,"line":70},[67,121132,121133],{"class":2058},"# 检查是否已安装 pip\n",[67,121135,121136,121139],{"class":69,"line":191},[67,121137,121138],{"class":110},"pip3",[67,121140,28081],{"class":77},[67,121142,121143],{"class":69,"line":202},[67,121144,121145],{"class":2058},"# 如果未安装，先安装 pip3（见下方）\n",[67,121147,121148],{"class":69,"line":641},[67,121149,121150],{"class":2058},"# 配置 pip 使用清华源\n",[67,121152,121153,121155,121158,121161,121164],{"class":69,"line":655},[67,121154,121138],{"class":110},[67,121156,121157],{"class":114}," config",[67,121159,121160],{"class":114}," set",[67,121162,121163],{"class":114}," global.index-url",[67,121165,121166],{"class":114}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121168,121169],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121171,121172],{},[3317,121173],{"alt":63,"src":121174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[58,121176,121178],{"className":118734,"code":121177,"language":118736,"meta":63,"style":63},"#安装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",[32,121179,121180,121185,121193,121204,121208,121213,121232,121236,121241,121253,121257,121262],{"__ignoreMap":63},[67,121181,121182],{"class":69,"line":70},[67,121183,121184],{"class":2058},"#安装pip3\n",[67,121186,121187,121189,121191],{"class":69,"line":191},[67,121188,111],{"class":110},[67,121190,118755],{"class":114},[67,121192,28030],{"class":114},[67,121194,121195,121197,121199,121201],{"class":69,"line":202},[67,121196,111],{"class":110},[67,121198,27864],{"class":114},[67,121200,118],{"class":114},[67,121202,121203],{"class":114}," python3-pip\n",[67,121205,121206],{"class":69,"line":641},[67,121207,631],{"emptyLinePlaceholder":630},[67,121209,121210],{"class":69,"line":655},[67,121211,121212],{"class":2058},"#更新pip3\n",[67,121214,121215,121217,121219,121221,121223,121225,121228,121230],{"class":69,"line":660},[67,121216,102628],{"class":110},[67,121218,102631],{"class":77},[67,121220,102654],{"class":114},[67,121222,118],{"class":114},[67,121224,28216],{"class":77},[67,121226,121227],{"class":114}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[67,121229,102659],{"class":77},[67,121231,102662],{"class":114},[67,121233,121234],{"class":69,"line":665},[67,121235,631],{"emptyLinePlaceholder":630},[67,121237,121238],{"class":69,"line":677},[67,121239,121240],{"class":2058},"#设置pip源为清华源\n",[67,121242,121243,121245,121247,121249,121251],{"class":69,"line":683},[67,121244,121138],{"class":110},[67,121246,121157],{"class":114},[67,121248,121160],{"class":114},[67,121250,121163],{"class":114},[67,121252,121166],{"class":114},[67,121254,121255],{"class":69,"line":689},[67,121256,631],{"emptyLinePlaceholder":630},[67,121258,121259],{"class":69,"line":694},[67,121260,121261],{"class":2058},"#测试\n",[67,121263,121264,121266,121268,121270,121272,121274],{"class":69,"line":700},[67,121265,102628],{"class":110},[67,121267,102631],{"class":77},[67,121269,102654],{"class":114},[67,121271,118],{"class":114},[67,121273,102659],{"class":77},[67,121275,102662],{"class":114},[19,121277,121278],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121280,121281],{},[3317,121282],{"alt":63,"src":121283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121285,121287],{"id":121286},"_35-显卡驱动安装","3.5 显卡驱动安装",[391,121289,121291],{"id":121290},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[58,121293,121295],{"className":119961,"code":121294,"language":119963,"meta":63,"style":63},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[32,121296,121297,121302,121317,121322],{"__ignoreMap":63},[67,121298,121299],{"class":69,"line":70},[67,121300,121301],{"class":2058},"# 如果是使用apt安装的驱动\n",[67,121303,121304,121306,121308,121310,121312,121315],{"class":69,"line":191},[67,121305,111],{"class":110},[67,121307,27864],{"class":114},[67,121309,27867],{"class":114},[67,121311,120596],{"class":77},[67,121313,121314],{"class":114}," nvidia",[67,121316,120686],{"class":77},[67,121318,121319],{"class":69,"line":202},[67,121320,121321],{"class":2058},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[67,121323,121324,121326],{"class":69,"line":641},[67,121325,111],{"class":110},[67,121327,121328],{"class":114}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[391,121330,121332],{"id":121331},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23794,121334,121336],{"id":121335},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24706,121338,121340],{"id":121339},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[58,121342,121344],{"className":119961,"code":121343,"language":119963,"meta":63,"style":63},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,121345,121346,121351,121362,121367,121377,121382],{"__ignoreMap":63},[67,121347,121348],{"class":69,"line":70},[67,121349,121350],{"class":2058},"# 安装英伟达驱动\n",[67,121352,121353,121355,121357,121359],{"class":69,"line":191},[67,121354,111],{"class":110},[67,121356,118755],{"class":114},[67,121358,118],{"class":114},[67,121360,121361],{"class":114}," nvidia-driver-版本号\n",[67,121363,121364],{"class":69,"line":202},[67,121365,121366],{"class":2058},"# 重启 \n",[67,121368,121369,121371,121373,121375],{"class":69,"line":641},[67,121370,111],{"class":110},[67,121372,121074],{"class":114},[67,121374,121077],{"class":77},[67,121376,121080],{"class":114},[67,121378,121379],{"class":69,"line":655},[67,121380,121381],{"class":2058},"# 检查驱动是否安装成功\n",[67,121383,121384],{"class":69,"line":660},[67,121385,121386],{"class":110},"nvidia-smi\n",[24706,121388,121390],{"id":121389},"_35212-debian","3.5.2.1.2 Debian",[58,121392,121394],{"className":119961,"code":121393,"language":119963,"meta":63,"style":63},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,121395,121396,121400,121414,121418,121428,121432],{"__ignoreMap":63},[67,121397,121398],{"class":69,"line":70},[67,121399,121350],{"class":2058},[67,121401,121402,121404,121406,121408,121411],{"class":69,"line":191},[67,121403,111],{"class":110},[67,121405,118755],{"class":114},[67,121407,118],{"class":114},[67,121409,121410],{"class":114}," nvidia-driver",[67,121412,121413],{"class":114}," nvidia-settings\n",[67,121415,121416],{"class":69,"line":202},[67,121417,121366],{"class":2058},[67,121419,121420,121422,121424,121426],{"class":69,"line":641},[67,121421,111],{"class":110},[67,121423,121074],{"class":114},[67,121425,121077],{"class":77},[67,121427,121080],{"class":114},[67,121429,121430],{"class":69,"line":655},[67,121431,121381],{"class":2058},[67,121433,121434],{"class":69,"line":660},[67,121435,121386],{"class":110},[23794,121437,121439],{"id":121438},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121441,121442,121443,121446],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2144,121444,121445],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121448,121449,121450],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25350,121451,121452],{},[2144,121453,121454],{},"（也可以不禁用桌面环境，直接进行下一步。）",[58,121456,121458],{"className":119961,"code":121457,"language":119963,"meta":63,"style":63},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[32,121459,121460,121465,121475,121480,121493,121498],{"__ignoreMap":63},[67,121461,121462],{"class":69,"line":70},[67,121463,121464],{"class":2058},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[67,121466,121467,121469,121472],{"class":69,"line":191},[67,121468,111],{"class":110},[67,121470,121471],{"class":114}," telinit",[67,121473,121474],{"class":77}," 3\n",[67,121476,121477],{"class":69,"line":202},[67,121478,121479],{"class":2058},"# ubuntu 使用下方命令\n",[67,121481,121482,121484,121487,121490],{"class":69,"line":641},[67,121483,111],{"class":110},[67,121485,121486],{"class":114}," service",[67,121488,121489],{"class":114}," lightdm",[67,121491,121492],{"class":114}," stop\n",[67,121494,121495],{"class":69,"line":655},[67,121496,121497],{"class":2058},"# Fedora 使用下方命令\n",[67,121499,121500,121502,121504,121507],{"class":69,"line":660},[67,121501,111],{"class":110},[67,121503,28299],{"class":114},[67,121505,121506],{"class":114}," isolate",[67,121508,121509],{"class":114}," multi-user.target\n",[19,121511,121512],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[58,121514,121516],{"className":119961,"code":121515,"language":119963,"meta":63,"style":63},"# 编译环境+准备工作\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",[32,121517,121518,121523,121534,121539,121546,121551,121563,121568,121575,121580],{"__ignoreMap":63},[67,121519,121520],{"class":69,"line":70},[67,121521,121522],{"class":2058},"# 编译环境+准备工作\n",[67,121524,121525,121527,121529,121531],{"class":69,"line":191},[67,121526,111],{"class":110},[67,121528,118755],{"class":114},[67,121530,118],{"class":114},[67,121532,121533],{"class":114}," build-essential\n",[67,121535,121536],{"class":69,"line":202},[67,121537,121538],{"class":2058},"# 进入到.run目录中\n",[67,121540,121541,121543],{"class":69,"line":641},[67,121542,103007],{"class":77},[67,121544,121545],{"class":114}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[67,121547,121548],{"class":69,"line":655},[67,121549,121550],{"class":2058},"# 给驱动文件增加可执行权限：\n",[67,121552,121553,121555,121557,121560],{"class":69,"line":660},[67,121554,111],{"class":110},[67,121556,26371],{"class":114},[67,121558,121559],{"class":114}," a+x",[67,121561,121562],{"class":114}," NVIDIA-Linux-x86_64-550.107.02.run\n",[67,121564,121565],{"class":69,"line":665},[67,121566,121567],{"class":2058},"# 然后执行安装：\n",[67,121569,121570,121572],{"class":69,"line":677},[67,121571,111],{"class":110},[67,121573,121574],{"class":114}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[67,121576,121577],{"class":69,"line":683},[67,121578,121579],{"class":2058},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[67,121581,121582,121584,121587],{"class":69,"line":689},[67,121583,111],{"class":110},[67,121585,121586],{"class":114}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[67,121588,121589],{"class":77},"  --no-opengl-files\n",[19,121591,121592],{},"安装完毕重启即可",[58,121594,121596],{"className":119961,"code":121595,"language":119963,"meta":63,"style":63},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,121597,121598,121602,121608,121612],{"__ignoreMap":63},[67,121599,121600],{"class":69,"line":70},[67,121601,121366],{"class":2058},[67,121603,121604,121606],{"class":69,"line":191},[67,121605,111],{"class":110},[67,121607,28433],{"class":114},[67,121609,121610],{"class":69,"line":202},[67,121611,121381],{"class":2058},[67,121613,121614],{"class":69,"line":641},[67,121615,121386],{"class":110},[391,121617,121619],{"id":121618},"_353-安装cuda","3.5.3 安装CUDA",[19,121621,121622],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121624,121625],{},[3317,121626],{"alt":63,"src":121627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[26,121629,121630],{},[29,121631,121632],{},"先查看显卡驱动所支持的最高CUDA版本",[58,121634,121635],{"className":119961,"code":121386,"language":119963,"meta":63,"style":63},[32,121636,121637],{"__ignoreMap":63},[67,121638,121639],{"class":69,"line":70},[67,121640,121386],{"class":110},[19,121642,121643],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121645,121646],{},[3317,121647],{"alt":63,"src":121648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[26,121650,121651],{"start":191},[29,121652,121653],{},"下载CUDA并安装CUDA",[19,121655,119740,121656],{},[2230,121657,119743],{"href":119743,"rel":121658},[25657],[19,121660,121661],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121663,121664],{},[3317,121665],{"alt":63,"src":121666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121668,121669,121670,121675],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2230,121671,121674],{"href":121672,"rel":121673},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25657],"Vinci机器人队单片机教程","）",[19,121677,121678],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121680,121681],{},[3317,121682],{"alt":63,"src":121683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121685,121686],{},"将最下方框框里的命令敲入终端",[58,121688,121690],{"className":119961,"code":121689,"language":119963,"meta":63,"style":63},"# 在当前文件夹下创建一个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",[32,121691,121692,121697,121706,121711,121718,121723,121731,121736,121747,121752],{"__ignoreMap":63},[67,121693,121694],{"class":69,"line":70},[67,121695,121696],{"class":2058},"# 在当前文件夹下创建一个ttt的子文件夹\n",[67,121698,121699,121701,121703],{"class":69,"line":191},[67,121700,102997],{"class":110},[67,121702,31000],{"class":77},[67,121704,121705],{"class":114}," .\u002Fttt\n",[67,121707,121708],{"class":69,"line":202},[67,121709,121710],{"class":2058},"# 进入ttt文件夹\n",[67,121712,121713,121715],{"class":69,"line":641},[67,121714,103007],{"class":77},[67,121716,121717],{"class":114}," ttt\n",[67,121719,121720],{"class":69,"line":655},[67,121721,121722],{"class":2058},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[67,121724,121725,121728],{"class":69,"line":660},[67,121726,121727],{"class":110},"wget",[67,121729,121730],{"class":114}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[67,121732,121733],{"class":69,"line":665},[67,121734,121735],{"class":2058},"# 给予权限\n",[67,121737,121738,121740,121742,121744],{"class":69,"line":677},[67,121739,111],{"class":110},[67,121741,26371],{"class":114},[67,121743,121559],{"class":114},[67,121745,121746],{"class":114}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[67,121748,121749],{"class":69,"line":683},[67,121750,121751],{"class":2058},"# 运行脚本\n",[67,121753,121754,121756],{"class":69,"line":689},[67,121755,111],{"class":110},[67,121757,121746],{"class":114},[19,121759,121760],{},[3317,121761],{"alt":63,"src":121762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121764,121765],{},"正在安装中：",[19,121767,121768],{},[3317,121769],{"alt":63,"src":121770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121772,121773],{},"输入accept接受即可",[19,121775,121776],{},[3317,121777],{"alt":63,"src":121778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121780,121781],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121783,121784],{},[3317,121785],{"alt":63,"src":121786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121788,121789],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121791,121792],{},[3317,121793],{"alt":63,"src":121794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[26,121796,121797],{"start":202},[29,121798,121799],{},"配置环境",[19,121801,121802],{},"根据上方确认一下路径，比如我上面红色框起来的为",[58,121804,121806],{"className":119961,"code":121805,"language":119963,"meta":63,"style":63},"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",[32,121807,121808,121824,121839],{"__ignoreMap":63},[67,121809,121810,121813,121816,121819,121822],{"class":69,"line":70},[67,121811,121812],{"class":110},"Please",[67,121814,121815],{"class":114}," make",[67,121817,121818],{"class":114}," sure",[67,121820,121821],{"class":114}," that",[67,121823,4499],{"class":73},[67,121825,121826,121828,121831,121834,121837],{"class":69,"line":191},[67,121827,54035],{"class":110},[67,121829,121830],{"class":114},"   PATH",[67,121832,121833],{"class":114}," includes",[67,121835,121836],{"class":114}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[67,121838,4499],{"class":73},[67,121840,121841,121843,121846,121848,121851,121854,121856,121859,121862,121865,121868,121870,121873,121875],{"class":69,"line":202},[67,121842,54035],{"class":110},[67,121844,121845],{"class":114},"   LD_LIBRARY_PATH",[67,121847,121833],{"class":114},[67,121849,121850],{"class":114}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[67,121852,121853],{"class":114}," or,",[67,121855,7026],{"class":114},[67,121857,121858],{"class":114}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[67,121860,121861],{"class":114}," to",[67,121863,121864],{"class":114}," \u002Fetc\u002Fld.so.conf",[67,121866,121867],{"class":114}," and",[67,121869,29016],{"class":114},[67,121871,121872],{"class":114}," ldconfig",[67,121874,66364],{"class":114},[67,121876,121877],{"class":114}," root\n",[19,121879,121880],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[58,121882,121884],{"className":119961,"code":121883,"language":119963,"meta":63,"style":63},"which nvcc\n",[32,121885,121886],{"__ignoreMap":63},[67,121887,121888,121891],{"class":69,"line":70},[67,121889,121890],{"class":77},"which",[67,121892,121893],{"class":114}," nvcc\n",[19,121895,121896],{},[3317,121897],{"alt":63,"src":121898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121900,121901],{},"所以我进行以下操作：",[58,121903,121905],{"className":119961,"code":121904,"language":119963,"meta":63,"style":63},"sudo vim ~\u002F.bashrc\n",[32,121906,121907],{"__ignoreMap":63},[67,121908,121909,121911,121913],{"class":69,"line":70},[67,121910,111],{"class":110},[67,121912,120021],{"class":114},[67,121914,121915],{"class":114}," ~\u002F.bashrc\n",[19,121917,121918],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[58,121920,121922],{"className":119961,"code":121921,"language":119963,"meta":63,"style":63},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[32,121923,121924,121936],{"__ignoreMap":63},[67,121925,121926,121928,121931,121933],{"class":69,"line":70},[67,121927,26834],{"class":84},[67,121929,121930],{"class":73}," PATH",[67,121932,85],{"class":84},[67,121934,121935],{"class":73},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[67,121937,121938,121940,121943,121945],{"class":69,"line":191},[67,121939,26834],{"class":84},[67,121941,121942],{"class":73}," LD_LIBRARY_PATH",[67,121944,85],{"class":84},[67,121946,121947],{"class":73},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121949,121950],{},[3317,121951],{"alt":63,"src":121952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[58,121954,121956],{"className":119961,"code":121955,"language":119963,"meta":63,"style":63},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[32,121957,121958,121963,121969,121974],{"__ignoreMap":63},[67,121959,121960],{"class":69,"line":70},[67,121961,121962],{"class":2058},"# 刷新当前终端的环境变量\n",[67,121964,121965,121967],{"class":69,"line":191},[67,121966,102642],{"class":77},[67,121968,121915],{"class":114},[67,121970,121971],{"class":69,"line":202},[67,121972,121973],{"class":2058},"# 验证CUDA是否安装成功\n",[67,121975,121976,121979],{"class":69,"line":641},[67,121977,121978],{"class":110},"nvcc",[67,121980,121981],{"class":77}," -V\n",[19,121983,121984],{},"出现下图这种则安装成功。",[19,121986,121987],{},[3317,121988],{"alt":63,"src":121989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[391,121991,121993],{"id":121992},"_354-安装cudnn","3.5.4 安装cuDNN",[26,121995,121996],{},[29,121997,121998],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122000,122001,122002,122007],{},"前往 NVIDIA cuDNN 下载页面：",[2230,122003,122006],{"href":122004,"rel":122005},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25657],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122009,122010],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122012,122013],{},[3317,122014],{"alt":63,"src":122015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122017,122018],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122020,122021],{},[3317,122022],{"alt":63,"src":122023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122025,122026],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122028,122029],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122031,122032],{},[2144,122033,122034],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122036,122037],{},"下载好的：",[19,122039,122040],{},[3317,122041],{"alt":63,"src":122042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[26,122044,122045],{"start":191},[29,122046,122047],{},"安装cuDNN",[19,122049,122050],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122052,122053],{},[3317,122054],{"alt":63,"src":122055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122057,122058],{},"解压文件，并复制到对应位置完成安装",[58,122060,122062],{"className":119961,"code":122061,"language":119963,"meta":63,"style":63},"# 解压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",[32,122063,122064,122069,122080,122085,122092,122097,122113,122127,122132,122143,122152,122156,122172],{"__ignoreMap":63},[67,122065,122066],{"class":69,"line":70},[67,122067,122068],{"class":2058},"# 解压cuDNN文件\n",[67,122070,122071,122074,122077],{"class":69,"line":191},[67,122072,122073],{"class":110},"tar",[67,122075,122076],{"class":77}," -xvf",[67,122078,122079],{"class":114}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[67,122081,122082],{"class":69,"line":202},[67,122083,122084],{"class":2058},"# cd进文件夹\n",[67,122086,122087,122089],{"class":69,"line":641},[67,122088,103007],{"class":77},[67,122090,122091],{"class":114}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[67,122093,122094],{"class":69,"line":655},[67,122095,122096],{"class":2058},"# 复制cuDNN文件到CUDA目录\n",[67,122098,122099,122101,122103,122106,122108,122111],{"class":69,"line":660},[67,122100,111],{"class":110},[67,122102,29647],{"class":114},[67,122104,122105],{"class":114}," include\u002Fcudnn",[67,122107,965],{"class":77},[67,122109,122110],{"class":114},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[67,122112,4499],{"class":73},[67,122114,122115,122117,122119,122122,122124],{"class":69,"line":665},[67,122116,111],{"class":110},[67,122118,29647],{"class":114},[67,122120,122121],{"class":114}," lib\u002Flibcudnn",[67,122123,965],{"class":77},[67,122125,122126],{"class":114},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[67,122128,122129],{"class":69,"line":677},[67,122130,122131],{"class":2058},"# 对比一下有没有缺文件\n",[67,122133,122134,122136,122139,122141],{"class":69,"line":683},[67,122135,28547],{"class":110},[67,122137,122138],{"class":114}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[67,122140,965],{"class":77},[67,122142,4499],{"class":73},[67,122144,122145,122147,122150],{"class":69,"line":689},[67,122146,28547],{"class":110},[67,122148,122149],{"class":114}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[67,122151,120686],{"class":77},[67,122153,122154],{"class":69,"line":694},[67,122155,121735],{"class":2058},[67,122157,122158,122160,122162,122165,122167,122169],{"class":69,"line":700},[67,122159,111],{"class":110},[67,122161,26371],{"class":114},[67,122163,122164],{"class":114}," a+r",[67,122166,122138],{"class":114},[67,122168,965],{"class":77},[67,122170,122171],{"class":73},"   \n",[67,122173,122174,122176,122178,122180,122182],{"class":69,"line":706},[67,122175,111],{"class":110},[67,122177,26371],{"class":114},[67,122179,122164],{"class":114},[67,122181,122149],{"class":114},[67,122183,120686],{"class":77},[26,122185,122186],{"start":202},[29,122187,122188],{},"检查是否安装成功",[58,122190,122192],{"className":119961,"code":122191,"language":119963,"meta":63,"style":63},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[32,122193,122194,122199],{"__ignoreMap":63},[67,122195,122196],{"class":69,"line":70},[67,122197,122198],{"class":2058},"# 检查cuDNN版本命令\n",[67,122200,122201,122204,122207,122209,122211,122214,122217],{"class":69,"line":191},[67,122202,122203],{"class":110},"cat",[67,122205,122206],{"class":114}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[67,122208,26901],{"class":84},[67,122210,32020],{"class":110},[67,122212,122213],{"class":114}," CUDNN_MAJOR",[67,122215,122216],{"class":77}," -A",[67,122218,49491],{"class":77},[19,122220,122221],{},"出现下图这样的就是安装成功了",[19,122223,122224],{},[3317,122225],{"alt":63,"src":122226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[26,122228,122229],{"start":641},[29,122230,122231],{},"软链接(一般不需要)",[58,122233,122235],{"className":119961,"code":122234,"language":119963,"meta":63,"style":63},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[32,122236,122237,122242],{"__ignoreMap":63},[67,122238,122239],{"class":69,"line":70},[67,122240,122241],{"class":2058},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[67,122243,122244,122246],{"class":69,"line":191},[67,122245,111],{"class":110},[67,122247,122248],{"class":114}," ldconfig\n",[19,122250,122251],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[58,122253,122258],{"className":122254,"code":122255,"language":122256,"meta":122257,"style":63},"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",[32,122259,122260,122265,122270,122275,122280,122285,122290],{"__ignoreMap":63},[67,122261,122262],{"class":69,"line":70},[67,122263,122264],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[67,122266,122267],{"class":69,"line":191},[67,122268,122269],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[67,122271,122272],{"class":69,"line":202},[67,122273,122274],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[67,122276,122277],{"class":69,"line":641},[67,122278,122279],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[67,122281,122282],{"class":69,"line":655},[67,122283,122284],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[67,122286,122287],{"class":69,"line":660},[67,122288,122289],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[67,122291,122292],{"class":69,"line":665},[67,122293,122294],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122296,122297],{},"运行下方的命令",[58,122299,122301],{"className":119961,"code":122300,"language":119963,"meta":63,"style":63},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[32,122302,122303,122308,122315,122320],{"__ignoreMap":63},[67,122304,122305],{"class":69,"line":70},[67,122306,122307],{"class":2058},"# cd进入CUDA路径\n",[67,122309,122310,122312],{"class":69,"line":191},[67,122311,103007],{"class":77},[67,122313,122314],{"class":114}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[67,122316,122317],{"class":69,"line":202},[67,122318,122319],{"class":2058}," # 查看本路径下的需要软链接的文件名\n",[67,122321,122322],{"class":69,"line":641},[67,122323,122324],{"class":110}," ls\n",[19,122326,122327],{},[3317,122328],{"alt":63,"src":122329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122331,122332,122333,20207,122336,20207,122339,122342],{},"如上图，我需要将",[32,122334,122335],{},"libcudnn_xxx_xxxxx.so.8.9.7",[32,122337,122338],{},"libcudnn_xxx_xxxxx.so.8",[32,122340,122341],{},"libcudnn_xxx_xxxxx.so","软链接",[58,122344,122346],{"className":119961,"code":122345,"language":119963,"meta":63,"style":63},"# 创建符号链接。对于每个 .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",[32,122347,122348,122353,122369,122383,122397,122411,122425,122439,122453,122458,122464,122469],{"__ignoreMap":63},[67,122349,122350],{"class":69,"line":70},[67,122351,122352],{"class":2058},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[67,122354,122355,122357,122360,122363,122366],{"class":69,"line":191},[67,122356,111],{"class":110},[67,122358,122359],{"class":114}," ln",[67,122361,122362],{"class":77}," -sf",[67,122364,122365],{"class":114}," libcudnn_cnn_train.so.8.9.7",[67,122367,122368],{"class":114}," libcudnn_cnn_train.so.8\n",[67,122370,122371,122373,122375,122377,122380],{"class":69,"line":202},[67,122372,111],{"class":110},[67,122374,122359],{"class":114},[67,122376,122362],{"class":77},[67,122378,122379],{"class":114}," libcudnn_adv_infer.so.8.9.7",[67,122381,122382],{"class":114}," libcudnn_adv_infer.so.8\n",[67,122384,122385,122387,122389,122391,122394],{"class":69,"line":641},[67,122386,111],{"class":110},[67,122388,122359],{"class":114},[67,122390,122362],{"class":77},[67,122392,122393],{"class":114}," libcudnn_adv_train.so.8.9.7",[67,122395,122396],{"class":114}," libcudnn_adv_train.so.8\n",[67,122398,122399,122401,122403,122405,122408],{"class":69,"line":655},[67,122400,111],{"class":110},[67,122402,122359],{"class":114},[67,122404,122362],{"class":77},[67,122406,122407],{"class":114}," libcudnn_cnn_infer.so.8.9.7",[67,122409,122410],{"class":114}," libcudnn_cnn_infer.so.8\n",[67,122412,122413,122415,122417,122419,122422],{"class":69,"line":660},[67,122414,111],{"class":110},[67,122416,122359],{"class":114},[67,122418,122362],{"class":77},[67,122420,122421],{"class":114}," libcudnn.so.8.9.7",[67,122423,122424],{"class":114}," libcudnn.so.8\n",[67,122426,122427,122429,122431,122433,122436],{"class":69,"line":665},[67,122428,111],{"class":110},[67,122430,122359],{"class":114},[67,122432,122362],{"class":77},[67,122434,122435],{"class":114}," libcudnn_ops_infer.so.8.9.7",[67,122437,122438],{"class":114}," libcudnn_ops_infer.so.8\n",[67,122440,122441,122443,122445,122447,122450],{"class":69,"line":677},[67,122442,111],{"class":110},[67,122444,122359],{"class":114},[67,122446,122362],{"class":77},[67,122448,122449],{"class":114}," libcudnn_ops_train.so.8.9.7",[67,122451,122452],{"class":114}," libcudnn_ops_train.so.8\n",[67,122454,122455],{"class":69,"line":683},[67,122456,122457],{"class":2058},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[67,122459,122460,122462],{"class":69,"line":689},[67,122461,111],{"class":110},[67,122463,122248],{"class":114},[67,122465,122466],{"class":69,"line":694},[67,122467,122468],{"class":2058},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[67,122470,122471,122473,122476,122479,122481,122484],{"class":69,"line":700},[67,122472,28547],{"class":110},[67,122474,122475],{"class":77}," -l",[67,122477,122478],{"class":114}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[67,122480,965],{"class":77},[67,122482,122483],{"class":114},".so",[67,122485,120686],{"class":77},[391,122487,122489],{"id":122488},"_355-常见问题","3.5.5 常见问题",[26,122491,122492],{},[29,122493,122494],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[58,122496,122498],{"className":119961,"code":122497,"language":119963,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[32,122499,122500],{"__ignoreMap":63},[67,122501,122502,122504,122506],{"class":69,"line":70},[67,122503,111],{"class":110},[67,122505,120021],{"class":114},[67,122507,122508],{"class":114}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122510,122511],{},"blacklist-nouveau.conf文件内容如下：",[58,122513,122515],{"className":119961,"code":122514,"language":119963,"meta":63,"style":63},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[32,122516,122517,122525,122532,122544,122554],{"__ignoreMap":63},[67,122518,122519,122522],{"class":69,"line":70},[67,122520,122521],{"class":110},"blacklist",[67,122523,122524],{"class":114}," nouveau\n",[67,122526,122527,122529],{"class":69,"line":191},[67,122528,122521],{"class":110},[67,122530,122531],{"class":114}," lbm-nouveau\n",[67,122533,122534,122536,122539,122542],{"class":69,"line":202},[67,122535,117368],{"class":110},[67,122537,122538],{"class":114}," nouveau",[67,122540,122541],{"class":114}," modeset=",[67,122543,4909],{"class":77},[67,122545,122546,122549,122551],{"class":69,"line":641},[67,122547,122548],{"class":77},"alias",[67,122550,122538],{"class":114},[67,122552,122553],{"class":114}," off\n",[67,122555,122556,122558,122561],{"class":69,"line":655},[67,122557,122548],{"class":77},[67,122559,122560],{"class":114}," lbm-nouveau",[67,122562,122553],{"class":114},[19,122564,122565],{},"接着运行下方命令",[58,122567,122569],{"className":119961,"code":122568,"language":119963,"meta":63,"style":63},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[32,122570,122571,122581,122586],{"__ignoreMap":63},[67,122572,122573,122575,122578],{"class":69,"line":70},[67,122574,111],{"class":110},[67,122576,122577],{"class":114}," update-initramfs",[67,122579,122580],{"class":77}," -u\n",[67,122582,122583],{"class":69,"line":191},[67,122584,122585],{"class":110},"或者\n",[67,122587,122588,122590,122593],{"class":69,"line":202},[67,122589,111],{"class":110},[67,122591,122592],{"class":114}," dracut",[67,122594,122595],{"class":77}," --force\n",[19,122597,122598],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[58,122600,122602],{"className":119961,"code":122601,"language":119963,"meta":63,"style":63},"lsmod | grep nouveau\n",[32,122603,122604],{"__ignoreMap":63},[67,122605,122606,122609,122611,122613],{"class":69,"line":70},[67,122607,122608],{"class":110},"lsmod",[67,122610,26901],{"class":84},[67,122612,32020],{"class":110},[67,122614,122524],{"class":114},[26,122616,122617],{"start":191},[29,122618,122619],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[58,122621,122623],{"className":119961,"code":122622,"language":119963,"meta":63,"style":63},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[32,122624,122625],{"__ignoreMap":63},[67,122626,122627,122629,122631],{"class":69,"line":70},[67,122628,111],{"class":110},[67,122630,120021],{"class":114},[67,122632,122633],{"class":114}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122635,122636],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[58,122638,122640],{"className":119961,"code":122639,"language":119963,"meta":63,"style":63},"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",[32,122641,122642,122650,122658,122666,122673,122681,122691,122699],{"__ignoreMap":63},[67,122643,122644,122647],{"class":69,"line":70},[67,122645,122646],{"class":110},"Section",[67,122648,122649],{"class":114}," \"OutputClass\"\n",[67,122651,122652,122655],{"class":69,"line":191},[67,122653,122654],{"class":110},"   Identifier",[67,122656,122657],{"class":114}," \"nvidia\"\n",[67,122659,122660,122663],{"class":69,"line":202},[67,122661,122662],{"class":110},"   MatchDriver",[67,122664,122665],{"class":114}," \"nvidia-drm\"\n",[67,122667,122668,122671],{"class":69,"line":641},[67,122669,122670],{"class":110},"   Driver",[67,122672,122657],{"class":114},[67,122674,122675,122678],{"class":69,"line":655},[67,122676,122677],{"class":110},"   Option",[67,122679,122680],{"class":114}," \"AllowEmptyInitialConfiguration\"\n",[67,122682,122683,122685,122688],{"class":69,"line":660},[67,122684,122677],{"class":110},[67,122686,122687],{"class":114}," \"PrimaryGPU\"",[67,122689,122690],{"class":114}," \"yes\"\n",[67,122692,122693,122696],{"class":69,"line":665},[67,122694,122695],{"class":110},"   ModulePath",[67,122697,122698],{"class":114}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[67,122700,122701],{"class":69,"line":677},[67,122702,122703],{"class":110},"EndSection\n",[26,122705,122706],{"start":202},[29,122707,122708],{},"安装N卡驱动提示错误",[58,122710,122712],{"className":122254,"code":122711,"language":122256,"meta":122257,"style":63},"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",[32,122713,122714],{"__ignoreMap":63},[67,122715,122716],{"class":69,"line":70},[67,122717,122711],{},[26,122719,122720],{},[29,122721,122722],{},"检查当前运行的内核版本：",[19,122724,122725],{},"运行以下命令以查看你当前正在使用的内核版本：",[58,122727,122729],{"className":118734,"code":122728,"language":118736,"meta":63,"style":63},"uname -r\n",[32,122730,122731],{"__ignoreMap":63},[67,122732,122733,122735],{"class":69,"line":70},[67,122734,71964],{"class":110},[67,122736,122737],{"class":77}," -r\n",[26,122739,122740],{"start":191},[29,122741,122742],{},"安装内核开发文件：",[19,122744,122745,122746,122749],{},"确保你已经安装了与当前内核版本相匹配的 ",[32,122747,122748],{},"kernel-devel"," 包。运行以下命令来安装：",[58,122751,122753],{"className":118734,"code":122752,"language":118736,"meta":63,"style":63},"sudo dnf install kernel-devel-$(uname -r)\n",[32,122754,122755],{"__ignoreMap":63},[67,122756,122757,122759,122761,122763,122766,122768,122770,122772],{"class":69,"line":70},[67,122758,111],{"class":110},[67,122760,115],{"class":114},[67,122762,118],{"class":114},[67,122764,122765],{"class":114}," kernel-devel-",[67,122767,26891],{"class":73},[67,122769,71964],{"class":110},[67,122771,121077],{"class":77},[67,122773,829],{"class":73},[19,122775,122776],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[26,122778,122779],{"start":202},[29,122780,122781],{},"安装内核源代码（如果需要）：",[19,122783,122784],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[58,122786,122788],{"className":118734,"code":122787,"language":118736,"meta":63,"style":63},"sudo dnf install kernel-headers kernel-source\n",[32,122789,122790],{"__ignoreMap":63},[67,122791,122792,122794,122796,122798,122801],{"class":69,"line":70},[67,122793,111],{"class":110},[67,122795,115],{"class":114},[67,122797,118],{"class":114},[67,122799,122800],{"class":114}," kernel-headers",[67,122802,122803],{"class":114}," kernel-source\n",[26,122805,122806],{"start":641},[29,122807,122808],{},"检查安装：",[19,122810,122811,122812,122815],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[32,122813,122814],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[58,122817,122819],{"className":118734,"code":122818,"language":118736,"meta":63,"style":63},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[32,122820,122821],{"__ignoreMap":63},[67,122822,122823,122825],{"class":69,"line":70},[67,122824,28547],{"class":110},[67,122826,122827],{"class":114}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122829,122830,122831,122834],{},"如果仍然遇到问题，可以通过 ",[32,122832,122833],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1903,122836,122837],{},"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":63,"searchDepth":191,"depth":191,"links":122839},[122840,122844,122854,122858,122859],{"id":119937,"depth":191,"text":119938,"children":122841},[122842,122843],{"id":119947,"depth":202,"text":119948},{"id":119957,"depth":202,"text":119958},{"id":120157,"depth":191,"text":120158,"children":122845},[122846,122847,122848,122849,122850,122851,122852,122853],{"id":120161,"depth":202,"text":120162},{"id":120231,"depth":202,"text":120232},{"id":120320,"depth":202,"text":120321},{"id":120565,"depth":202,"text":120566},{"id":120635,"depth":202,"text":120636},{"id":120702,"depth":202,"text":120703},{"id":120737,"depth":202,"text":120738},{"id":120792,"depth":202,"text":120793},{"id":120843,"depth":191,"text":120844,"children":122855},[122856,122857],{"id":120847,"depth":202,"text":120848},{"id":120927,"depth":202,"text":120928},{"id":121113,"depth":191,"text":121114},{"id":121286,"depth":191,"text":121287,"children":122860},[122861,122862,122863,122864,122865],{"id":121290,"depth":202,"text":121291},{"id":121331,"depth":202,"text":121332},{"id":121618,"depth":202,"text":121619},{"id":121992,"depth":202,"text":121993},{"id":122488,"depth":202,"text":122489},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119929,"description":25173},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122872,"title":122873,"body":122874,"description":25173,"extension":1930,"meta":123214,"navigation":630,"path":123215,"seo":123216,"stem":123217,"__hash__":123218},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122875,"toc":123212},[122876,122879,122884,122887,123133,123138,123141,123177,123180,123209],[10,122877,122873],{"id":122878},"_4-命令教程长期积累",[26,122880,122881],{},[29,122882,122883],{},"大多数命令",[19,122885,122886],{},"常用 Linux 命令速查：",[58,122888,122890],{"className":118734,"code":122889,"language":118736,"meta":63,"style":63},"# 文件与目录\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",[32,122891,122892,122897,122904,122911,122919,122926,122933,122941,122949,122956,122963,122971,122975,122980,122987,122995,123002,123006,123011,123018,123026,123034,123042,123050,123054,123059,123067,123074,123081,123089,123097,123101,123106,123115,123124],{"__ignoreMap":63},[67,122893,122894],{"class":69,"line":70},[67,122895,122896],{"class":2058},"# 文件与目录\n",[67,122898,122899,122901],{"class":69,"line":191},[67,122900,28547],{"class":110},[67,122902,122903],{"class":2058},"        # 列出目录内容\n",[67,122905,122906,122908],{"class":69,"line":202},[67,122907,103007],{"class":77},[67,122909,122910],{"class":2058},"        # 切换目录\n",[67,122912,122913,122916],{"class":69,"line":641},[67,122914,122915],{"class":77},"pwd",[67,122917,122918],{"class":2058},"       # 显示当前路径\n",[67,122920,122921,122923],{"class":69,"line":655},[67,122922,102997],{"class":110},[67,122924,122925],{"class":2058},"     # 创建目录\n",[67,122927,122928,122930],{"class":69,"line":660},[67,122929,27112],{"class":110},[67,122931,122932],{"class":2058},"        # 删除文件或目录\n",[67,122934,122935,122938],{"class":69,"line":665},[67,122936,122937],{"class":110},"cp",[67,122939,122940],{"class":2058},"        # 复制文件或目录\n",[67,122942,122943,122946],{"class":69,"line":677},[67,122944,122945],{"class":110},"mv",[67,122947,122948],{"class":2058},"        # 移动\u002F重命名文件或目录\n",[67,122950,122951,122953],{"class":69,"line":683},[67,122952,1126],{"class":110},[67,122954,122955],{"class":2058},"     # 创建空文件\n",[67,122957,122958,122960],{"class":69,"line":689},[67,122959,122203],{"class":110},[67,122961,122962],{"class":2058},"       # 查看文件内容\n",[67,122964,122965,122968],{"class":69,"line":694},[67,122966,122967],{"class":110},"head\u002Ftail",[67,122969,122970],{"class":2058}," # 查看文件头部\u002F尾部\n",[67,122972,122973],{"class":69,"line":700},[67,122974,631],{"emptyLinePlaceholder":630},[67,122976,122977],{"class":69,"line":706},[67,122978,122979],{"class":2058},"# 权限管理\n",[67,122981,122982,122984],{"class":69,"line":712},[67,122983,26403],{"class":110},[67,122985,122986],{"class":2058},"     # 修改文件权限\n",[67,122988,122989,122992],{"class":69,"line":717},[67,122990,122991],{"class":110},"chown",[67,122993,122994],{"class":2058},"     # 修改文件所有者\n",[67,122996,122997,122999],{"class":69,"line":723},[67,122998,111],{"class":110},[67,123000,123001],{"class":2058},"      # 以管理员身份执行\n",[67,123003,123004],{"class":69,"line":729},[67,123005,631],{"emptyLinePlaceholder":630},[67,123007,123008],{"class":69,"line":735},[67,123009,123010],{"class":2058},"# 系统信息\n",[67,123012,123013,123015],{"class":69,"line":741},[67,123014,71964],{"class":110},[67,123016,123017],{"class":2058},"     # 系统信息\n",[67,123019,123020,123023],{"class":69,"line":747},[67,123021,123022],{"class":110},"df",[67,123024,123025],{"class":2058},"        # 磁盘使用情况\n",[67,123027,123028,123031],{"class":69,"line":753},[67,123029,123030],{"class":110},"free",[67,123032,123033],{"class":2058},"      # 内存使用情况\n",[67,123035,123036,123039],{"class":69,"line":758},[67,123037,123038],{"class":110},"top\u002Fhtop",[67,123040,123041],{"class":2058},"  # 进程监控\n",[67,123043,123044,123047],{"class":69,"line":764},[67,123045,123046],{"class":110},"ps",[67,123048,123049],{"class":2058},"        # 查看进程\n",[67,123051,123052],{"class":69,"line":770},[67,123053,631],{"emptyLinePlaceholder":630},[67,123055,123056],{"class":69,"line":776},[67,123057,123058],{"class":2058},"# 网络\n",[67,123060,123061,123064],{"class":69,"line":782},[67,123062,123063],{"class":110},"ping",[67,123065,123066],{"class":2058},"      # 测试网络连通性\n",[67,123068,123069,123071],{"class":69,"line":788},[67,123070,28635],{"class":110},[67,123072,123073],{"class":2058},"      # 发送 HTTP 请求\n",[67,123075,123076,123078],{"class":69,"line":793},[67,123077,121727],{"class":110},[67,123079,123080],{"class":2058},"      # 下载文件\n",[67,123082,123083,123086],{"class":69,"line":798},[67,123084,123085],{"class":110},"ssh",[67,123087,123088],{"class":2058},"       # 远程登录\n",[67,123090,123091,123094],{"class":69,"line":816},[67,123092,123093],{"class":110},"scp",[67,123095,123096],{"class":2058},"       # 远程文件传输\n",[67,123098,123099],{"class":69,"line":832},[67,123100,631],{"emptyLinePlaceholder":630},[67,123102,123103],{"class":69,"line":843},[67,123104,123105],{"class":2058},"# 包管理（Debian\u002FUbuntu）\n",[67,123107,123108,123110,123112],{"class":69,"line":848},[67,123109,118806],{"class":110},[67,123111,118785],{"class":114},[67,123113,123114],{"class":2058},"   # 更新软件源\n",[67,123116,123117,123119,123121],{"class":69,"line":863},[67,123118,118806],{"class":110},[67,123120,118],{"class":114},[67,123122,123123],{"class":2058},"  # 安装软件包\n",[67,123125,123126,123128,123130],{"class":69,"line":876},[67,123127,118806],{"class":110},[67,123129,27867],{"class":114},[67,123131,123132],{"class":2058},"   # 卸载软件包\n",[26,123134,123135],{"start":191},[29,123136,123137],{},"KDE Dolphin 以root打开",[19,123139,123140],{},"kde5",[58,123142,123144],{"className":118734,"code":123143,"language":118736,"meta":63,"style":63},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[32,123145,123146],{"__ignoreMap":63},[67,123147,123148,123151,123154,123157,123159,123161,123164,123167,123169,123172,123174],{"class":69,"line":70},[67,123149,123150],{"class":110},"pkexec",[67,123152,123153],{"class":114}," env",[67,123155,123156],{"class":114}," DISPLAY=",[67,123158,29929],{"class":73},[67,123160,29987],{"class":114},[67,123162,123163],{"class":73},"$XAUTHORITY ",[67,123165,123166],{"class":114},"KDE_SESSION_VERSION=",[67,123168,2310],{"class":77},[67,123170,123171],{"class":114}," KDE_FULL_SESSION=",[67,123173,3217],{"class":77},[67,123175,123176],{"class":114}," dolphin\n",[19,123178,123179],{},"kde6",[58,123181,123183],{"className":118734,"code":123182,"language":118736,"meta":63,"style":63},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[32,123184,123185],{"__ignoreMap":63},[67,123186,123187,123189,123191,123193,123195,123197,123199,123201,123203,123205,123207],{"class":69,"line":70},[67,123188,123150],{"class":110},[67,123190,123153],{"class":114},[67,123192,123156],{"class":114},[67,123194,29929],{"class":73},[67,123196,29987],{"class":114},[67,123198,123163],{"class":73},[67,123200,123166],{"class":114},[67,123202,2335],{"class":77},[67,123204,123171],{"class":114},[67,123206,3217],{"class":77},[67,123208,123176],{"class":114},[1903,123210,123211],{},"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":63,"searchDepth":191,"depth":191,"links":123213},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122873,"description":25173},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123220,"title":123221,"body":123222,"description":25173,"extension":1930,"meta":123236,"navigation":630,"path":123237,"seo":123238,"stem":123239,"__hash__":123240},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123223,"toc":123234},[123224,123227],[10,123225,123221],{"id":123226},"_5-各种环境配置",[19,123228,123229],{},[2230,123230,123233],{"href":123231,"rel":123232},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25657],"电控组环境搭建大全",{"title":63,"searchDepth":191,"depth":191,"links":123235},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123221,"description":25173},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123242,"title":123243,"body":123244,"description":25173,"extension":1930,"meta":123592,"navigation":630,"path":123593,"seo":123594,"stem":123595,"__hash__":123596},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123245,"toc":123584},[123246,123249,123253,123257,123261,123266,123273,123277,123570,123574,123581],[10,123247,123243],{"id":123248},"_6-拓展功能",[14,123250,123252],{"id":123251},"_61-wine","6.1 Wine",[14,123254,123256],{"id":123255},"_62-android","6.2 Android",[391,123258,123260],{"id":123259},"_621-i卡a卡","6.2.1 I卡、A卡",[26,123262,123263],{},[29,123264,123265],{},"Wayland-Waydroid(体验超级好)",[19,123267,123268,123269],{},"Waydroid 官网与安装指南：",[2230,123270,123271],{"href":123271,"rel":123272},"https:\u002F\u002Fwaydro.id\u002F",[25657],[391,123274,123276],{"id":123275},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[26,123278,123279],{},[29,123280,123281,123282,123284,123285,123289,123291,123294,123299,123496],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55478,123283],{},"BlissOS 官网下载：",[2230,123286,123287],{"href":123287,"rel":123288},"https:\u002F\u002Fblissos.org\u002F",[25657],[55478,123290],{},[3317,123292],{"alt":63,"src":123293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[26,123295,123296],{"start":202},[29,123297,123298],{},"比较推荐的配置",[58,123300,123302],{"className":118734,"code":123301,"language":118736,"meta":63,"style":63},"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",[32,123303,123304,123311,123321,123331,123341,123353,123363,123370,123380,123389,123398,123408,123418,123427,123437,123447,123459,123469,123478,123488],{"__ignoreMap":63},[67,123305,123306,123309],{"class":69,"line":70},[67,123307,123308],{"class":110},"qemu-system-x86_64",[67,123310,26470],{"class":77},[67,123312,123313,123316,123319],{"class":69,"line":191},[67,123314,123315],{"class":77},"        -M",[67,123317,123318],{"class":114}," q35,vmport=off",[67,123320,26470],{"class":77},[67,123322,123323,123326,123329],{"class":69,"line":202},[67,123324,123325],{"class":77},"        -accel",[67,123327,123328],{"class":114}," kvm",[67,123330,26470],{"class":77},[67,123332,123333,123336,123339],{"class":69,"line":641},[67,123334,123335],{"class":77},"        -cpu",[67,123337,123338],{"class":114}," qemu64,+sse3,+sse4.2",[67,123340,26470],{"class":77},[67,123342,123343,123346,123349,123351],{"class":69,"line":655},[67,123344,123345],{"class":77},"        -smp",[67,123347,123348],{"class":114}," 8,cores=",[67,123350,1047],{"class":77},[67,123352,26470],{"class":77},[67,123354,123355,123358,123361],{"class":69,"line":660},[67,123356,123357],{"class":77},"        -m",[67,123359,123360],{"class":114}," 6G",[67,123362,26470],{"class":77},[67,123364,123365,123368],{"class":69,"line":665},[67,123366,123367],{"class":77},"        -usb",[67,123369,26470],{"class":77},[67,123371,123372,123375,123378],{"class":69,"line":677},[67,123373,123374],{"class":77},"        -device",[67,123376,123377],{"class":114}," virtio-tablet",[67,123379,26470],{"class":77},[67,123381,123382,123384,123387],{"class":69,"line":683},[67,123383,123374],{"class":77},[67,123385,123386],{"class":114}," virtio-keyboard",[67,123388,26470],{"class":77},[67,123390,123391,123393,123396],{"class":69,"line":689},[67,123392,123374],{"class":77},[67,123394,123395],{"class":114}," usb-tablet",[67,123397,26470],{"class":77},[67,123399,123400,123403,123406],{"class":69,"line":694},[67,123401,123402],{"class":77},"        -bios",[67,123404,123405],{"class":114}," OVMF-pure-efi64.fd",[67,123407,26470],{"class":77},[67,123409,123410,123413,123416],{"class":69,"line":700},[67,123411,123412],{"class":77},"        -net",[67,123414,123415],{"class":114}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[67,123417,26470],{"class":77},[67,123419,123420,123422,123425],{"class":69,"line":706},[67,123421,123412],{"class":77},[67,123423,123424],{"class":114}," nic,model=virtio",[67,123426,26470],{"class":77},[67,123428,123429,123432,123435],{"class":69,"line":712},[67,123430,123431],{"class":77},"        -audio",[67,123433,123434],{"class":114}," sdl,model=hda",[67,123436,26470],{"class":77},[67,123438,123439,123442,123445],{"class":69,"line":717},[67,123440,123441],{"class":77},"        -display",[67,123443,123444],{"class":114}," sdl,gl=on,show-cursor=on",[67,123446,26470],{"class":77},[67,123448,123449,123451,123454,123457],{"class":69,"line":723},[67,123450,123374],{"class":77},[67,123452,123453],{"class":114}," virtio-vga-gl,xres=1920,yres=",[67,123455,123456],{"class":77},"1080",[67,123458,26470],{"class":77},[67,123460,123461,123464,123467],{"class":69,"line":729},[67,123462,123463],{"class":77},"        -drive",[67,123465,123466],{"class":114}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[67,123468,26470],{"class":77},[67,123470,123471,123473,123476],{"class":69,"line":735},[67,123472,123463],{"class":77},[67,123474,123475],{"class":114}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[67,123477,26470],{"class":77},[67,123479,123480,123483,123486],{"class":69,"line":741},[67,123481,123482],{"class":77},"        -monitor",[67,123484,123485],{"class":114}," stdio",[67,123487,26470],{"class":77},[67,123489,123490,123493],{"class":69,"line":747},[67,123491,123492],{"class":77},"        -serial",[67,123494,123495],{"class":114}," none\n",[26,123497,123498],{"start":655},[29,123499,123500,123501],{},"常用操作：",[26,123502,123503,123506,123562],{},[29,123504,123505],{},"全屏：Ctrl+Alt+F",[29,123507,123508,123509,123514],{},"adb调试",[26,123510,123511],{},[29,123512,123513],{},"使Linux与Android用ADB连接。",[58,123515,123517],{"className":118734,"code":123516,"language":118736,"meta":63,"style":63},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[32,123518,123519,123524,123535,123540,123552,123557],{"__ignoreMap":63},[67,123520,123521],{"class":69,"line":70},[67,123522,123523],{"class":2058},"# 连接安卓\n",[67,123525,123526,123529,123532],{"class":69,"line":191},[67,123527,123528],{"class":110},"adb",[67,123530,123531],{"class":114}," connect",[67,123533,123534],{"class":77}," 127.0.0.1\n",[67,123536,123537],{"class":69,"line":202},[67,123538,123539],{"class":2058},"# 打开shell\n",[67,123541,123542,123544,123546,123549],{"class":69,"line":641},[67,123543,123528],{"class":110},[67,123545,28669],{"class":77},[67,123547,123548],{"class":114}," 127.0.0.1:5555",[67,123550,123551],{"class":114}," shell\n",[67,123553,123554],{"class":69,"line":655},[67,123555,123556],{"class":2058},"# 使用root权限\n",[67,123558,123559],{"class":69,"line":660},[67,123560,123561],{"class":110},"su\n",[29,123563,123564,123565],{},"中文输入法",[26,123566,123567],{},[29,123568,123569],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123571,123573],{"id":123572},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123575,123576,123577],{},"rEFInd 官网与文档：",[2230,123578,123579],{"href":123579,"rel":123580},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25657],[1903,123582,123583],{},"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":63,"searchDepth":191,"depth":191,"links":123585},[123586,123587,123591],{"id":123251,"depth":191,"text":123252},{"id":123255,"depth":191,"text":123256,"children":123588},[123589,123590],{"id":123259,"depth":202,"text":123260},{"id":123275,"depth":202,"text":123276},{"id":123572,"depth":191,"text":123573},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123243,"description":25173},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123598,"title":123599,"body":123600,"description":25173,"extension":1930,"meta":126899,"navigation":630,"path":126900,"seo":126901,"stem":126902,"__hash__":126903},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123601,"toc":126873},[123602,123605,123609,123612,123619,123869,123872,123944,123947,123951,123955,123960,123963,123966,123969,123974,123977,123980,123983,123988,123991,123996,123999,124002,124007,124010,124015,124018,124022,124026,124029,124034,124037,124051,124054,124057,124066,124069,124078,124081,124084,124093,124096,124105,124108,124111,124120,124123,124126,124141,124144,124147,124156,124161,124164,124167,124176,124179,124188,124191,124200,124203,124212,124217,124220,124228,124233,124236,124245,124248,124256,124261,124264,124273,124276,124279,124283,124286,124291,124294,124299,124313,124318,124323,124334,124339,124345,124350,124365,124370,124373,124378,124383,124388,124396,124401,124408,124413,124424,124429,124432,124436,124439,124442,124447,124450,124469,124474,124477,124486,124491,124494,124516,124519,124549,124552,124557,124560,124574,124579,124598,124601,124604,124609,124621,124626,124631,124634,124639,124642,124657,124660,124665,124670,124674,124679,124719,124722,124726,124732,124738,124743,124746,124753,124758,124765,124768,124771,124778,124792,124795,124855,124858,124872,124884,124887,124890,124893,124957,124960,124963,124966,124986,124989,124994,125001,125005,125008,125012,125017,125022,125026,125029,125032,125074,125079,125082,125104,125119,125121,125126,125138,125198,125200,125202,125256,125258,125260,125266,125271,125274,125279,125283,125286,125348,125353,125356,125358,125362,125374,125456,125458,125460,125514,125520,125522,125526,125531,125533,125538,125542,125562,125597,125601,125604,125607,125610,125617,125620,125632,125635,125650,125653,125672,125720,125723,125740,125743,125757,125762,125765,125774,125789,125801,125839,125844,125853,125858,125863,125889,125898,125902,125906,125911,125914,125918,125922,125927,125930,125935,125938,125943,125946,125951,125954,125958,125963,125966,125971,125974,125978,125983,125986,125991,125994,125999,126002,126006,126011,126014,126019,126022,126027,126030,126034,126039,126042,126047,126050,126055,126058,126063,126066,126071,126074,126079,126082,126086,126091,126094,126099,126106,126110,126115,126118,126123,126126,126130,126135,126138,126141,126144,126147,126150,126154,126157,126167,126172,126177,126199,126204,126209,126216,126220,126225,126228,126231,126236,126239,126242,126245,126248,126251,126254,126257,126260,126263,126266,126269,126272,126277,126282,126287,126292,126297,126302,126307,126310,126314,126317,126321,126326,126331,126336,126341,126345,126351,126359,126364,126367,126372,126387,126390,126395,126429,126444,126447,126502,126528,126540,126543,126552,126555,126570,126575,126578,126584,126589,126592,126597,126600,126605,126610,126617,126620,126635,126638,126673,126678,126686,126724,126727,126730,126735,126738,126743,126754,126788,126793,126796,126805,126810,126816,126819,126824,126833,126838,126841,126844,126849,126857,126860,126865,126870],[10,123603,123599],{"id":123604},"_7-其他操作",[14,123606,123608],{"id":123607},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123610,123611],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123613,123614,123615,123618],{},"进入工控机的硬盘目录，进入",[32,123616,123617],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[58,123620,123624],{"className":123621,"code":123622,"language":123623,"meta":63,"style":63},"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",[32,123625,123626,123634,123645,123652,123659,123671,123678,123690,123701,123712,123719,123726,123733,123745,123757,123764,123776,123788,123795,123807,123819,123831,123842,123849,123860],{"__ignoreMap":63},[67,123627,123628,123631],{"class":69,"line":70},[67,123629,123630],{"class":262},"network",[67,123632,123633],{"class":73},": \n",[67,123635,123636,123639,123641,123643],{"class":69,"line":191},[67,123637,123638],{"class":262},"  version",[67,123640,53203],{"class":73},[67,123642,2077],{"class":77},[67,123644,4499],{"class":73},[67,123646,123647,123650],{"class":69,"line":202},[67,123648,123649],{"class":262},"  wifis",[67,123651,123633],{"class":73},[67,123653,123654,123657],{"class":69,"line":641},[67,123655,123656],{"class":262},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[67,123658,123633],{"class":73},[67,123660,123661,123664,123666,123669],{"class":69,"line":655},[67,123662,123663],{"class":262},"      renderer",[67,123665,53203],{"class":73},[67,123667,123668],{"class":114},"NetworkManager",[67,123670,4499],{"class":73},[67,123672,123673,123676],{"class":69,"line":660},[67,123674,123675],{"class":262},"      match",[67,123677,123633],{"class":73},[67,123679,123680,123683,123685,123688],{"class":69,"line":665},[67,123681,123682],{"class":262},"        name",[67,123684,53203],{"class":73},[67,123686,123687],{"class":114},"\"wlan0\"",[67,123689,4499],{"class":73},[67,123691,123692,123695,123697,123699],{"class":69,"line":677},[67,123693,123694],{"class":262},"      dhcp4",[67,123696,53203],{"class":73},[67,123698,3217],{"class":77},[67,123700,4499],{"class":73},[67,123702,123703,123706,123708,123710],{"class":69,"line":683},[67,123704,123705],{"class":262},"      dhcp6",[67,123707,53203],{"class":73},[67,123709,3217],{"class":77},[67,123711,4499],{"class":73},[67,123713,123714,123717],{"class":69,"line":689},[67,123715,123716],{"class":262},"      access-points",[67,123718,123633],{"class":73},[67,123720,123721,123724],{"class":69,"line":694},[67,123722,123723],{"class":114},"        \"EMIS_Vinci_Robocon_5G\"",[67,123725,123633],{"class":73},[67,123727,123728,123731],{"class":69,"line":700},[67,123729,123730],{"class":262},"          auth",[67,123732,123633],{"class":73},[67,123734,123735,123738,123740,123743],{"class":69,"line":706},[67,123736,123737],{"class":262},"            key-management",[67,123739,53203],{"class":73},[67,123741,123742],{"class":114},"\"psk\"",[67,123744,4499],{"class":73},[67,123746,123747,123750,123752,123755],{"class":69,"line":712},[67,123748,123749],{"class":262},"            password",[67,123751,53203],{"class":73},[67,123753,123754],{"class":114},"\"vinci666\"",[67,123756,4499],{"class":73},[67,123758,123759,123762],{"class":69,"line":717},[67,123760,123761],{"class":262},"          networkmanager",[67,123763,123633],{"class":73},[67,123765,123766,123769,123771,123774],{"class":69,"line":723},[67,123767,123768],{"class":262},"            uuid",[67,123770,53203],{"class":73},[67,123772,123773],{"class":114},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[67,123775,4499],{"class":73},[67,123777,123778,123781,123783,123786],{"class":69,"line":729},[67,123779,123780],{"class":262},"            name",[67,123782,53203],{"class":73},[67,123784,123785],{"class":114},"\"EMIS_Vinci_Robocon_5G\"",[67,123787,4499],{"class":73},[67,123789,123790,123793],{"class":69,"line":735},[67,123791,123792],{"class":262},"            passthrough",[67,123794,123633],{"class":73},[67,123796,123797,123800,123802,123805],{"class":69,"line":741},[67,123798,123799],{"class":262},"              wifi-security.auth-alg",[67,123801,53203],{"class":73},[67,123803,123804],{"class":114},"\"open\"",[67,123806,4499],{"class":73},[67,123808,123809,123812,123814,123817],{"class":69,"line":747},[67,123810,123811],{"class":262},"              ipv6.addr-gen-mode",[67,123813,53203],{"class":73},[67,123815,123816],{"class":114},"\"default\"",[67,123818,4499],{"class":73},[67,123820,123821,123824,123826,123829],{"class":69,"line":753},[67,123822,123823],{"class":262},"              ipv6.ip6-privacy",[67,123825,53203],{"class":73},[67,123827,123828],{"class":114},"\"-1\"",[67,123830,4499],{"class":73},[67,123832,123833,123836,123838,123840],{"class":69,"line":758},[67,123834,123835],{"class":262},"              proxy._",[67,123837,53203],{"class":73},[67,123839,9468],{"class":114},[67,123841,4499],{"class":73},[67,123843,123844,123847],{"class":69,"line":764},[67,123845,123846],{"class":262},"      networkmanager",[67,123848,123633],{"class":73},[67,123850,123851,123854,123856,123858],{"class":69,"line":770},[67,123852,123853],{"class":262},"        uuid",[67,123855,53203],{"class":73},[67,123857,123773],{"class":114},[67,123859,4499],{"class":73},[67,123861,123862,123864,123866],{"class":69,"line":776},[67,123863,123682],{"class":262},[67,123865,53203],{"class":73},[67,123867,123868],{"class":114},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123870,123871],{},"将其改为新wifi的名和密码：",[58,123873,123875],{"className":123621,"code":123874,"language":123623,"meta":63,"style":63},"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",[32,123876,123877,123883,123892,123898,123905,123914,123922,123928,123934],{"__ignoreMap":63},[67,123878,123879,123881],{"class":69,"line":70},[67,123880,123630],{"class":262},[67,123882,813],{"class":73},[67,123884,123885,123887,123889],{"class":69,"line":191},[67,123886,123638],{"class":262},[67,123888,53203],{"class":73},[67,123890,123891],{"class":77},"2\n",[67,123893,123894,123896],{"class":69,"line":202},[67,123895,123649],{"class":262},[67,123897,813],{"class":73},[67,123899,123900,123903],{"class":69,"line":641},[67,123901,123902],{"class":262},"    wlan0",[67,123904,813],{"class":73},[67,123906,123907,123909,123911],{"class":69,"line":655},[67,123908,123694],{"class":262},[67,123910,53203],{"class":73},[67,123912,123913],{"class":77},"true\n",[67,123915,123916,123918,123920],{"class":69,"line":660},[67,123917,123705],{"class":262},[67,123919,53203],{"class":73},[67,123921,123913],{"class":77},[67,123923,123924,123926],{"class":69,"line":665},[67,123925,123716],{"class":262},[67,123927,813],{"class":73},[67,123929,123930,123932],{"class":69,"line":677},[67,123931,123723],{"class":114},[67,123933,813],{"class":73},[67,123935,123936,123939,123941],{"class":69,"line":683},[67,123937,123938],{"class":262},"          password",[67,123940,53203],{"class":73},[67,123942,123943],{"class":114},"\"vinci666\"\n",[19,123945,123946],{},"工控机开机即可连上网。",[14,123948,123950],{"id":123949},"_72-ssh远程开发","7.2 SSH远程开发",[391,123952,123954],{"id":123953},"_721-环境准备","7.2.1 环境准备",[19,123956,123957],{},[2144,123958,123959],{},"1.硬件准备",[19,123961,123962],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123964,123965],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123967,123968],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123970,123971],{},[2144,123972,123973],{},"2.设置固定IP",[19,123975,123976],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123978,123979],{},"1.进入设置界面",[19,123981,123982],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123984,123985],{},[3317,123986],{"alt":63,"src":123987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123989,123990],{},"2.配置所连接的网络",[19,123992,123993],{},[3317,123994],{"alt":63,"src":123995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123997,123998],{},"3.设置固定IP",[19,124000,124001],{},"查看当前IP地址。",[19,124003,124004],{},[3317,124005],{"alt":63,"src":124006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124008,124009],{},"设置固定IP。",[19,124011,124012],{},[3317,124013],{"alt":63,"src":124014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124016,124017],{},"至此，IP配置完毕。",[391,124019,124021],{"id":124020},"_722-环境搭建","7.2.2 环境搭建",[19,124023,124024],{},[2144,124025,411],{},[19,124027,124028],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124030,124031],{},[2144,124032,124033],{},"实现",[19,124035,124036],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[26,124038,124039,124042,124045,124048],{},[29,124040,124041],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[29,124043,124044],{},"远程主机启动SSH服务；",[29,124046,124047],{},"本地主机登陆远程主机；",[29,124049,124050],{},"实现数据传输。",[19,124052,124053],{},"1.安装SSH客户端与服务端",[19,124055,124056],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[58,124058,124060],{"className":122254,"code":124059,"language":122256,"meta":122257,"style":63}," sudo apt install openssh-server\n",[32,124061,124062],{"__ignoreMap":63},[67,124063,124064],{"class":69,"line":70},[67,124065,124059],{},[19,124067,124068],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[58,124070,124072],{"className":122254,"code":124071,"language":122256,"meta":122257,"style":63},"sudo apt install openssh-client\n",[32,124073,124074],{"__ignoreMap":63},[67,124075,124076],{"class":69,"line":70},[67,124077,124071],{},[19,124079,124080],{},"2.远程主机启动SSH服务",[19,124082,124083],{},"远程主机启动 ssh 服务命令如下：",[58,124085,124087],{"className":122254,"code":124086,"language":122256,"meta":122257,"style":63},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[32,124088,124089],{"__ignoreMap":63},[67,124090,124091],{"class":69,"line":70},[67,124092,124086],{},[19,124094,124095],{},"启动后可使用如下命令查看服务是否正常运行：",[58,124097,124099],{"className":122254,"code":124098,"language":122256,"meta":122257,"style":63},"ps -e | grep ssh\n",[32,124100,124101],{"__ignoreMap":63},[67,124102,124103],{"class":69,"line":70},[67,124104,124098],{},[19,124106,124107],{},"如果启动成功，会包含 sshd 程序。",[19,124109,124110],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[58,124112,124114],{"className":122254,"code":124113,"language":122256,"meta":122257,"style":63},"sudo systemctl enable ssh\n",[32,124115,124116],{"__ignoreMap":63},[67,124117,124118],{"class":69,"line":70},[67,124119,124113],{},[19,124121,124122],{},"3.本地远程登录",[19,124124,124125],{},"登录远程主机可以调用如下命令:",[58,124127,124129],{"className":118734,"code":124128,"language":118736,"meta":63,"style":63},"ssh -X 用户名@ip地址\n",[32,124130,124131],{"__ignoreMap":63},[67,124132,124133,124135,124138],{"class":69,"line":70},[67,124134,123085],{"class":110},[67,124136,124137],{"class":77}," -X",[67,124139,124140],{"class":114}," 用户名@ip地址\n",[19,124142,124143],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124145,124146],{},"如果退出，可以调用exit命令：",[58,124148,124150],{"className":122254,"code":124149,"language":122256,"meta":122257,"style":63},"exit\n",[32,124151,124152],{"__ignoreMap":63},[67,124153,124154],{"class":69,"line":70},[67,124155,124149],{},[19,124157,124158],{},[2144,124159,124160],{},"4.实现数据传输",[19,124162,124163],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124165,124166],{},"上传文件指令格式如下：",[58,124168,124170],{"className":122254,"code":124169,"language":122256,"meta":122257,"style":63},"scp 本地文件路径 账号@ip:路径\n",[32,124171,124172],{"__ignoreMap":63},[67,124173,124174],{"class":69,"line":70},[67,124175,124169],{},[19,124177,124178],{},"上传文件夹指令格式如下：",[58,124180,124182],{"className":122254,"code":124181,"language":122256,"meta":122257,"style":63},"scp -r 本地文件夹路径 账号@ip:路径\n",[32,124183,124184],{"__ignoreMap":63},[67,124185,124186],{"class":69,"line":70},[67,124187,124181],{},[19,124189,124190],{},"下载文件指令格式如下：",[58,124192,124194],{"className":122254,"code":124193,"language":122256,"meta":122257,"style":63},"scp 账号@ip:路径 本地文件夹路径\n",[32,124195,124196],{"__ignoreMap":63},[67,124197,124198],{"class":69,"line":70},[67,124199,124193],{},[19,124201,124202],{},"下载文件夹指令格式如下：",[58,124204,124206],{"className":122254,"code":124205,"language":122256,"meta":122257,"style":63},"scp -r 账号@ip:路径 本地文件夹路径\n",[32,124207,124208],{"__ignoreMap":63},[67,124209,124210],{"class":69,"line":70},[67,124211,124205],{},[19,124213,124214],{},[2144,124215,124216],{},"优化",[19,124218,124219],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[26,124221,124222,124225],{},[29,124223,124224],{},"本地生成密钥对；",[29,124226,124227],{},"将公钥上传至远程主机。",[19,124229,124230],{},[2144,124231,124232],{},"1.生成密钥对",[19,124234,124235],{},"本地客户端生成公私钥：（一路回车默认即可）",[58,124237,124239],{"className":122254,"code":124238,"language":122256,"meta":122257,"style":63},"ssh-keygen\n",[32,124240,124241],{"__ignoreMap":63},[67,124242,124243],{"class":69,"line":70},[67,124244,124238],{},[19,124246,124247],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[26,124249,124250,124253],{},[29,124251,124252],{},"id_rsa （私钥）；",[29,124254,124255],{},"id_rsa.pub (公钥)。",[19,124257,124258],{},[2144,124259,124260],{},"2.公钥上传",[19,124262,124263],{},"上传指令如下：",[58,124265,124267],{"className":122254,"code":124266,"language":122256,"meta":122257,"style":63},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[32,124268,124269],{"__ignoreMap":63},[67,124270,124271],{"class":69,"line":70},[67,124272,124266],{},[19,124274,124275],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124277,124278],{},"以后再远程登录就无需录入密码了。",[391,124280,124282],{"id":124281},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124284,124285],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124287,124288],{},[2144,124289,124290],{},"1.准备工作",[19,124292,124293],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124295,124296],{},[2144,124297,124298],{},"2.为VScode安装远程开发插件",[19,124300,124301,124302,124305,124306,124309,124310,230],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[32,124303,124304],{},"扩展：商店","的搜索栏输入",[32,124307,124308],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[32,124311,124312],{},"安装",[19,124314,124315],{},[3317,124316],{"alt":63,"src":124317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124319,124320],{},[2144,124321,124322],{},"3.配置远程连接",[19,124324,124325,124326,124329,124330,124333],{},"步骤1：使用快捷键",[32,124327,124328],{},"ctrl + shift + p","打开命令输入窗口，并输入",[32,124331,124332],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124335,124336],{},[3317,124337],{"alt":63,"src":124338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124340,124341,124342,230],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[32,124343,124344],{},"Add New SSH Host",[19,124346,124347],{},[3317,124348],{"alt":63,"src":124349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124351,124352,124353,124356,124357,124360,124361,124364],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[32,124354,124355],{},"ssh +X ubuntu@192.168.43.164","，其中，",[32,124358,124359],{},"ubuntu","需要替换为你的登录用户名，",[32,124362,124363],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124366,124367],{},[3317,124368],{"alt":63,"src":124369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124371,124372],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124374,124375],{},[3317,124376],{"alt":63,"src":124377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124379,124380],{},[3317,124381],{"alt":63,"src":124382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124384,124385],{},[2144,124386,124387],{},"4.使用",[19,124389,124390,124391,124329,124393,124395],{},"步骤1：继续使用快捷键",[32,124392,124328],{},[32,124394,124332],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124397,124398],{},[3317,124399],{"alt":63,"src":124400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124402,124403,124404,124407],{},"或者，也可以点击侧边栏的",[32,124405,124406],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124409,124410],{},[3317,124411],{"alt":63,"src":124412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124414,124415,124416,124419,124420,124423],{},"步骤2：选择菜单栏的",[32,124417,124418],{},"文件","下的",[32,124421,124422],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124425,124426],{},[3317,124427],{"alt":63,"src":124428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124430,124431],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124433,124435],{"id":124434},"_73-远程桌面","7.3 远程桌面",[19,124437,124438],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124440,124441],{},"我们选择使用VNC来看。",[26,124443,124444],{},[29,124445,124446],{},"安装VNC服务器：",[19,124448,124449],{},"这里以TigerVNC为例进行安装：",[58,124451,124453],{"className":118734,"code":124452,"language":118736,"meta":63,"style":63},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[32,124454,124455],{"__ignoreMap":63},[67,124456,124457,124459,124461,124463,124466],{"class":69,"line":70},[67,124458,111],{"class":110},[67,124460,118755],{"class":114},[67,124462,118],{"class":114},[67,124464,124465],{"class":114}," tigervnc-standalone-server",[67,124467,124468],{"class":114}," tigervnc-common\n",[26,124470,124471],{"start":191},[29,124472,124473],{},"设置VNC密码：",[19,124475,124476],{},"为VNC用户设置密码，运行以下命令：",[58,124478,124480],{"className":118734,"code":124479,"language":118736,"meta":63,"style":63},"vncpasswd\n",[32,124481,124482],{"__ignoreMap":63},[67,124483,124484],{"class":69,"line":70},[67,124485,124479],{"class":110},[26,124487,124488],{"start":202},[29,124489,124490],{},"配置VNC启动脚本:",[19,124492,124493],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[58,124495,124497],{"className":118734,"code":124496,"language":118736,"meta":63,"style":63},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[32,124498,124499,124508],{"__ignoreMap":63},[67,124500,124501,124503,124505],{"class":69,"line":70},[67,124502,102997],{"class":110},[67,124504,31000],{"class":77},[67,124506,124507],{"class":114}," ~\u002F.vnc\n",[67,124509,124510,124513],{"class":69,"line":191},[67,124511,124512],{"class":110},"nano",[67,124514,124515],{"class":114}," ~\u002F.vnc\u002Fxstartup\n",[19,124517,124518],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[58,124520,124522],{"className":118734,"code":124521,"language":118736,"meta":63,"style":63},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[32,124523,124524,124529,124537,124544],{"__ignoreMap":63},[67,124525,124526],{"class":69,"line":70},[67,124527,124528],{"class":2058},"#!\u002Fbin\u002Fsh\n",[67,124530,124531,124534],{"class":69,"line":191},[67,124532,124533],{"class":77},"unset",[67,124535,124536],{"class":114}," SESSION_MANAGER\n",[67,124538,124539,124541],{"class":69,"line":202},[67,124540,124533],{"class":77},[67,124542,124543],{"class":114}," DBUS_SESSION_BUS_ADDRESS\n",[67,124545,124546],{"class":69,"line":641},[67,124547,124548],{"class":110},"gnome-session\n",[19,124550,124551],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[26,124553,124554],{"start":641},[29,124555,124556],{},"给予执行权限：",[19,124558,124559],{},"为xstartup文件设置执行权限：",[58,124561,124563],{"className":118734,"code":124562,"language":118736,"meta":63,"style":63},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[32,124564,124565],{"__ignoreMap":63},[67,124566,124567,124569,124572],{"class":69,"line":70},[67,124568,26403],{"class":110},[67,124570,124571],{"class":114}," +x",[67,124573,124515],{"class":114},[26,124575,124576],{"start":655},[29,124577,124578],{},"启动VNC服务器：",[58,124580,124582],{"className":118734,"code":124581,"language":118736,"meta":63,"style":63},"vncserver -geometry 1920x1080 -localhost=0\n",[32,124583,124584],{"__ignoreMap":63},[67,124585,124586,124589,124592,124595],{"class":69,"line":70},[67,124587,124588],{"class":110},"vncserver",[67,124590,124591],{"class":77}," -geometry",[67,124593,124594],{"class":114}," 1920x1080",[67,124596,124597],{"class":77}," -localhost=0\n",[19,124599,124600],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124602,124603],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[26,124605,124606],{"start":660},[29,124607,124608],{},"查看已开启的VNC服务器：",[58,124610,124612],{"className":118734,"code":124611,"language":118736,"meta":63,"style":63},"vncserver -list\n",[32,124613,124614],{"__ignoreMap":63},[67,124615,124616,124618],{"class":69,"line":70},[67,124617,124588],{"class":110},[67,124619,124620],{"class":77}," -list\n",[19,124622,124623],{},[3317,124624],{"alt":63,"src":124625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[26,124627,124628],{"start":665},[29,124629,124630],{},"连接到VNC服务器：",[19,124632,124633],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[26,124635,124636],{"start":677},[29,124637,124638],{},"停止VNC服务器：",[19,124640,124641],{},"如果需要停止VNC服务器，可以使用以下命令：",[58,124643,124645],{"className":118734,"code":124644,"language":118736,"meta":63,"style":63},"vncserver -kill :1\n",[32,124646,124647],{"__ignoreMap":63},[67,124648,124649,124651,124654],{"class":69,"line":70},[67,124650,124588],{"class":110},[67,124652,124653],{"class":77}," -kill",[67,124655,124656],{"class":114}," :1\n",[19,124658,124659],{},"将:1替换为你实际使用的显示编号。",[19,124661,124662],{},[3317,124663],{"alt":63,"src":124664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124666,124667],{},[3317,124668],{"alt":63,"src":124669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124671,124673],{"id":124672},"_74-usb端口设置","7.4 USB端口设置",[19,124675,124676],{},[2144,124677,124678],{},"首先先配置好权限",[58,124680,124682],{"className":118734,"code":124681,"language":118736,"meta":63,"style":63},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[32,124683,124684,124689,124702,124709,124714],{"__ignoreMap":63},[67,124685,124686],{"class":69,"line":70},[67,124687,124688],{"class":2058},"# 将用户权限提高\n",[67,124690,124691,124693,124695,124697,124700],{"class":69,"line":191},[67,124692,111],{"class":110},[67,124694,28360],{"class":114},[67,124696,28363],{"class":77},[67,124698,124699],{"class":114}," dialout",[67,124701,28368],{"class":73},[67,124703,124704,124706],{"class":69,"line":202},[67,124705,28387],{"class":110},[67,124707,124708],{"class":114}," dialout\n",[67,124710,124711],{"class":69,"line":641},[67,124712,124713],{"class":2058},"# 查看下面命令是否输出dialout（若输出才正常）\n",[67,124715,124716],{"class":69,"line":655},[67,124717,124718],{"class":110},"groups\n",[19,124720,124721],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[391,124723,124725],{"id":124724},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124727,124728,124731],{},[2144,124729,124730],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124733,124734,124737],{},[2144,124735,124736],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124739,124740],{},[2144,124741,124742],{},"流程如下：",[19,124744,124745],{},"（1）.查找设备idVendor和idProduct",[19,124747,124748,124749,124752],{},"接入两个USB设备，在终端调用指令",[32,124750,124751],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124754,124755],{},[3317,124756],{"alt":63,"src":124757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124759,124760,124761,124764],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[32,124762,124763],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124766,124767],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124769,124770],{},"（2）.编写映射规则",[19,124772,124773,124774,124777],{},"在",[32,124775,124776],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[58,124779,124781],{"className":118734,"code":124780,"language":118736,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[32,124782,124783],{"__ignoreMap":63},[67,124784,124785,124787,124789],{"class":69,"line":70},[67,124786,111],{"class":110},[67,124788,120021],{"class":114},[67,124790,124791],{"class":114}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124793,124794],{},"输入如下内容：",[58,124796,124798],{"className":118734,"code":124797,"language":118736,"meta":63,"style":63},"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",[32,124799,124800,124830],{"__ignoreMap":63},[67,124801,124802,124805,124807,124810,124813,124816,124819,124821,124824,124827],{"class":69,"line":70},[67,124803,124804],{"class":73},"KERNEL",[67,124806,85],{"class":84},[67,124808,124809],{"class":114},"=\"ttyUSB*\",",[67,124811,124812],{"class":110}," ATTRS",[67,124814,124815],{"class":114},"{idVendor}==",[67,124817,124818],{"class":110},"\"10c4\"",[67,124820,2369],{"class":110},[67,124822,124823],{"class":114}," ATTRS{idProduct}==\"ea60\",",[67,124825,124826],{"class":114}," MODE:=\"0777\",",[67,124828,124829],{"class":114}," SYMLINK+=\"mylidar\"\n",[67,124831,124832,124834,124836,124838,124840,124842,124845,124847,124850,124852],{"class":69,"line":191},[67,124833,124804],{"class":73},[67,124835,85],{"class":84},[67,124837,124809],{"class":114},[67,124839,124812],{"class":110},[67,124841,124815],{"class":114},[67,124843,124844],{"class":110},"\"1a86\"",[67,124846,2369],{"class":110},[67,124848,124849],{"class":114}," ATTRS{idProduct}==\"7523\",",[67,124851,124826],{"class":114},[67,124853,124854],{"class":114}," SYMLINK+=\"mycar\"\n",[19,124856,124857],{},"代码解释：",[2994,124859,124860,124863,124866,124869],{},[29,124861,124862],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[29,124864,124865],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[29,124867,124868],{},"SYMLINK是符号连接，即绑定的别名；",[29,124870,124871],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124873,124874,124875,124878,124881],{},"***小提示：***",[25350,124876,124877],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[32,124879,124880],{},"\u002Fetc\u002Fudev\u002Frule.d",[25350,124882,124883],{},"目录即可。",[19,124885,124886],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124888,124889],{},"（3）.使规则生效",[19,124891,124892],{},"在终端下输入如下指令：",[58,124894,124896],{"className":118734,"code":124895,"language":118736,"meta":63,"style":63},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[32,124897,124898,124903,124915,124926,124930,124935,124948],{"__ignoreMap":63},[67,124899,124900],{"class":69,"line":70},[67,124901,124902],{"class":2058},"# Ubuntu用下方命令\n",[67,124904,124905,124907,124909,124912],{"class":69,"line":191},[67,124906,111],{"class":110},[67,124908,121486],{"class":114},[67,124910,124911],{"class":114}," udev",[67,124913,124914],{"class":114}," reload\n",[67,124916,124917,124919,124921,124923],{"class":69,"line":202},[67,124918,111],{"class":110},[67,124920,121486],{"class":114},[67,124922,124911],{"class":114},[67,124924,124925],{"class":114}," restart\n",[67,124927,124928],{"class":69,"line":641},[67,124929,631],{"emptyLinePlaceholder":630},[67,124931,124932],{"class":69,"line":655},[67,124933,124934],{"class":2058},"#Fedora用下方命令\n",[67,124936,124937,124939,124942,124945],{"class":69,"line":660},[67,124938,111],{"class":110},[67,124940,124941],{"class":114}," udevadm",[67,124943,124944],{"class":114}," control",[67,124946,124947],{"class":77}," --reload\n",[67,124949,124950,124952,124954],{"class":69,"line":665},[67,124951,111],{"class":110},[67,124953,124941],{"class":114},[67,124955,124956],{"class":114}," trigger\n",[19,124958,124959],{},"再重新插拔设备即可。",[19,124961,124962],{},"（4）.测试",[19,124964,124965],{},"终端下输入如下指令",[58,124967,124969],{"className":118734,"code":124968,"language":118736,"meta":63,"style":63},"ll \u002Fdev | grep ttyUSB\n",[32,124970,124971],{"__ignoreMap":63},[67,124972,124973,124976,124979,124981,124983],{"class":69,"line":70},[67,124974,124975],{"class":110},"ll",[67,124977,124978],{"class":114}," \u002Fdev",[67,124980,26901],{"class":84},[67,124982,32020],{"class":110},[67,124984,124985],{"class":114}," ttyUSB\n",[19,124987,124988],{},"运行结果如下：",[19,124990,124991],{},[3317,124992],{"alt":63,"src":124993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124995,124996,124997,125000],{},"也可以多次插拔USB设备，会发现设备端口",[32,124998,124999],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125002,125003],{},[2144,125004,119402],{},[19,125006,125007],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[391,125009,125011],{"id":125010},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125013,125014,125016],{},[2144,125015,124730],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125018,125019,125021],{},[2144,125020,124736],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125023,125024],{},[2144,125025,124742],{},[19,125027,125028],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125030,125031],{},"调用如下指令查看第一台雷达的USB信息：",[58,125033,125035],{"className":118734,"code":125034,"language":118736,"meta":63,"style":63},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[32,125036,125037,125057],{"__ignoreMap":63},[67,125038,125039,125042,125044,125047,125050,125052,125054],{"class":69,"line":70},[67,125040,125041],{"class":110},"udevadm",[67,125043,71581],{"class":114},[67,125045,125046],{"class":77}," --attribute-walk",[67,125048,125049],{"class":77}," --name=\u002Fdev\u002FttyUSB0",[67,125051,26901],{"class":84},[67,125053,32020],{"class":110},[67,125055,125056],{"class":114}," KERNELS\n",[67,125058,125059,125061,125063,125065,125068,125070,125072],{"class":69,"line":191},[67,125060,125041],{"class":110},[67,125062,71581],{"class":114},[67,125064,125046],{"class":77},[67,125066,125067],{"class":77}," --name=\u002Fdev\u002FttyACM0",[67,125069,26901],{"class":84},[67,125071,32020],{"class":110},[67,125073,125056],{"class":114},[19,125075,125076],{},[3317,125077],{"alt":63,"src":125078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125080,125081],{},"调用如下指令查看第二台雷达的USB信息：",[58,125083,125085],{"className":118734,"code":125084,"language":118736,"meta":63,"style":63},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[32,125086,125087],{"__ignoreMap":63},[67,125088,125089,125091,125093,125095,125098,125100,125102],{"class":69,"line":70},[67,125090,125041],{"class":110},[67,125092,71581],{"class":114},[67,125094,125046],{"class":77},[67,125096,125097],{"class":77}," --name=\u002Fdev\u002FttyUSB1",[67,125099,26901],{"class":84},[67,125101,32020],{"class":110},[67,125103,125056],{"class":114},[19,125105,125106,125107,125110,125111,125114,125115,125118],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[32,125108,125109],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[32,125112,125113],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2144,125116,125117],{},"唯一性标识","”。",[19,125120,124770],{},[19,125122,124773,125123,125125],{},[32,125124,124776],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[58,125127,125128],{"className":118734,"code":124780,"language":118736,"meta":63,"style":63},[32,125129,125130],{"__ignoreMap":63},[67,125131,125132,125134,125136],{"class":69,"line":70},[67,125133,111],{"class":110},[67,125135,120021],{"class":114},[67,125137,124791],{"class":114},[58,125139,125141],{"className":118734,"code":125140,"language":118736,"meta":63,"style":63},"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",[32,125142,125143,125172],{"__ignoreMap":63},[67,125144,125145,125147,125149,125151,125154,125156,125159,125162,125164,125167,125169],{"class":69,"line":70},[67,125146,124804],{"class":73},[67,125148,85],{"class":84},[67,125150,124809],{"class":114},[67,125152,125153],{"class":73}," KERNELS",[67,125155,85],{"class":84},[67,125157,125158],{"class":114},"=\"1-1.3:1.0\",",[67,125160,125161],{"class":110}," MODE:",[67,125163,85],{"class":114},[67,125165,125166],{"class":110},"\"0777\"",[67,125168,2369],{"class":110},[67,125170,125171],{"class":114}," SYMLINK+=\"rplidar_front\"\n",[67,125173,125174,125176,125178,125180,125182,125184,125187,125189,125191,125193,125195],{"class":69,"line":191},[67,125175,124804],{"class":73},[67,125177,85],{"class":84},[67,125179,124809],{"class":114},[67,125181,125153],{"class":73},[67,125183,85],{"class":84},[67,125185,125186],{"class":114},"=\"1-1.4:1.0\",",[67,125188,125161],{"class":110},[67,125190,85],{"class":114},[67,125192,125166],{"class":110},[67,125194,2369],{"class":110},[67,125196,125197],{"class":114}," SYMLINK+=\"rplidar_back\"\n",[19,125199,124889],{},[19,125201,124892],{},[58,125203,125204],{"className":118734,"code":124895,"language":118736,"meta":63,"style":63},[32,125205,125206,125210,125220,125230,125234,125238,125248],{"__ignoreMap":63},[67,125207,125208],{"class":69,"line":70},[67,125209,124902],{"class":2058},[67,125211,125212,125214,125216,125218],{"class":69,"line":191},[67,125213,111],{"class":110},[67,125215,121486],{"class":114},[67,125217,124911],{"class":114},[67,125219,124914],{"class":114},[67,125221,125222,125224,125226,125228],{"class":69,"line":202},[67,125223,111],{"class":110},[67,125225,121486],{"class":114},[67,125227,124911],{"class":114},[67,125229,124925],{"class":114},[67,125231,125232],{"class":69,"line":641},[67,125233,631],{"emptyLinePlaceholder":630},[67,125235,125236],{"class":69,"line":655},[67,125237,124934],{"class":2058},[67,125239,125240,125242,125244,125246],{"class":69,"line":660},[67,125241,111],{"class":110},[67,125243,124941],{"class":114},[67,125245,124944],{"class":114},[67,125247,124947],{"class":77},[67,125249,125250,125252,125254],{"class":69,"line":665},[67,125251,111],{"class":110},[67,125253,124941],{"class":114},[67,125255,124956],{"class":114},[19,125257,124959],{},[19,125259,124962],{},[19,125261,124965,125262,125265],{},[32,125263,125264],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125267,125268],{},[3317,125269],{"alt":63,"src":125270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125272,125273],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125275,125276,125278],{},[2144,125277,119402],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[391,125280,125282],{"id":125281},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125284,125285],{},"（1）.查看所连接的主机USB接口的信息",[58,125287,125289],{"className":118734,"code":125288,"language":118736,"meta":63,"style":63},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[32,125290,125291,125321],{"__ignoreMap":63},[67,125292,125293,125295,125297,125300,125302,125304,125306,125308,125311,125314,125316,125319],{"class":69,"line":70},[67,125294,125041],{"class":110},[67,125296,71581],{"class":114},[67,125298,125299],{"class":77}," -a",[67,125301,31000],{"class":77},[67,125303,30207],{"class":73},[67,125305,125041],{"class":110},[67,125307,71581],{"class":114},[67,125309,125310],{"class":77}," -q",[67,125312,125313],{"class":114}," path",[67,125315,176],{"class":77},[67,125317,125318],{"class":114}," \u002Fdev\u002FttyACM0",[67,125320,829],{"class":73},[67,125322,125323,125325,125327,125329,125331,125333,125335,125337,125339,125341,125343,125346],{"class":69,"line":191},[67,125324,125041],{"class":110},[67,125326,71581],{"class":114},[67,125328,125299],{"class":77},[67,125330,31000],{"class":77},[67,125332,30207],{"class":73},[67,125334,125041],{"class":110},[67,125336,71581],{"class":114},[67,125338,125310],{"class":77},[67,125340,125313],{"class":114},[67,125342,176],{"class":77},[67,125344,125345],{"class":114}," \u002Fdev\u002FttyUSB0",[67,125347,829],{"class":73},[19,125349,125350],{},[3317,125351],{"alt":63,"src":125352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125354,125355],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125357,124770],{},[19,125359,124773,125360,125125],{},[32,125361,124776],{},[58,125363,125364],{"className":118734,"code":124780,"language":118736,"meta":63,"style":63},[32,125365,125366],{"__ignoreMap":63},[67,125367,125368,125370,125372],{"class":69,"line":70},[67,125369,111],{"class":110},[67,125371,120021],{"class":114},[67,125373,124791],{"class":114},[58,125375,125377],{"className":118734,"code":125376,"language":118736,"meta":63,"style":63},"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",[32,125378,125379,125407,125433],{"__ignoreMap":63},[67,125380,125381,125383,125385,125388,125390,125392,125394,125396,125399,125402,125404],{"class":69,"line":70},[67,125382,124804],{"class":73},[67,125384,85],{"class":84},[67,125386,125387],{"class":114},"=\"ttyACM*\",",[67,125389,124812],{"class":110},[67,125391,124815],{"class":114},[67,125393,124844],{"class":110},[67,125395,2369],{"class":110},[67,125397,125398],{"class":114}," ATTRS{idProduct}==\"55d4\",",[67,125400,125401],{"class":114}," ATTRS{serial}==\"0001\",",[67,125403,124826],{"class":114},[67,125405,125406],{"class":114}," SYMLINK+=\"ttyACM_MCU\"\n",[67,125408,125409,125411,125413,125415,125417,125419,125421,125423,125425,125428,125430],{"class":69,"line":191},[67,125410,124804],{"class":73},[67,125412,85],{"class":84},[67,125414,125387],{"class":114},[67,125416,124812],{"class":110},[67,125418,124815],{"class":114},[67,125420,124844],{"class":110},[67,125422,2369],{"class":110},[67,125424,125398],{"class":114},[67,125426,125427],{"class":114}," ATTRS{serial}==\"0002\",",[67,125429,124826],{"class":114},[67,125431,125432],{"class":114}," SYMLINK+=\"ttyACM_Lidar\"\n",[67,125434,125435,125437,125439,125441,125443,125445,125447,125449,125451,125453],{"class":69,"line":202},[67,125436,124804],{"class":73},[67,125438,85],{"class":84},[67,125440,124809],{"class":114},[67,125442,124812],{"class":110},[67,125444,124815],{"class":114},[67,125446,124844],{"class":110},[67,125448,2369],{"class":110},[67,125450,124849],{"class":114},[67,125452,124826],{"class":114},[67,125454,125455],{"class":114}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125457,124889],{},[19,125459,124892],{},[58,125461,125462],{"className":118734,"code":124895,"language":118736,"meta":63,"style":63},[32,125463,125464,125468,125478,125488,125492,125496,125506],{"__ignoreMap":63},[67,125465,125466],{"class":69,"line":70},[67,125467,124902],{"class":2058},[67,125469,125470,125472,125474,125476],{"class":69,"line":191},[67,125471,111],{"class":110},[67,125473,121486],{"class":114},[67,125475,124911],{"class":114},[67,125477,124914],{"class":114},[67,125479,125480,125482,125484,125486],{"class":69,"line":202},[67,125481,111],{"class":110},[67,125483,121486],{"class":114},[67,125485,124911],{"class":114},[67,125487,124925],{"class":114},[67,125489,125490],{"class":69,"line":641},[67,125491,631],{"emptyLinePlaceholder":630},[67,125493,125494],{"class":69,"line":655},[67,125495,124934],{"class":2058},[67,125497,125498,125500,125502,125504],{"class":69,"line":660},[67,125499,111],{"class":110},[67,125501,124941],{"class":114},[67,125503,124944],{"class":114},[67,125505,124947],{"class":77},[67,125507,125508,125510,125512],{"class":69,"line":665},[67,125509,111],{"class":110},[67,125511,124941],{"class":114},[67,125513,124956],{"class":114},[19,125515,125516,125517],{},"再重新插拔设备即可，或者 ",[2144,125518,125519],{},"直接重启系统。",[19,125521,124962],{},[19,125523,124965,125524,125265],{},[32,125525,125264],{},[19,125527,125528],{},[3317,125529],{"alt":63,"src":125530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125532,125273],{},[19,125534,125535,125537],{},[2144,125536,119402],{}," 一些设备可能没有串口号等。",[391,125539,125541],{"id":125540},"_744-其他注意事项","7.4.4 其他注意事项",[19,125543,125544,125545,125547,125548,125551,125552,20207,125555,125558,125559,125561],{},"并非所有的USB设备端口号都是",[32,125546,124999],{},"的格式，比如Arduino的端口号可能是",[32,125549,125550],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[32,125553,125554],{},"videon",[32,125556,125557],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[32,125560,125554],{},"端口，绑定时需要关联的也是该接口。",[19,125563,125564,125565,125568,125569,125572,125573,125575,125576,125579,125580,125583,125584,125587,125588,125587,125591,125587,125594,230],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[32,125566,125567],{},"KERNEL==\"ttyUSB*\"","修改为",[32,125570,125571],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[32,125574,125567],{},"修改为类似于",[32,125577,125578],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[32,125581,125582],{},"video[0,2,4,6]","表示可以绑定的端口为",[32,125585,125586],{},"video0","或",[32,125589,125590],{},"video2",[32,125592,125593],{},"video4",[32,125595,125596],{},"video6",[14,125598,125600],{"id":125599},"_75-挂载内网网页","7.5 挂载内网网页",[19,125602,125603],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125605,125606],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125608,125609],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125611,125612,125613],{},"Termux 下载地址（F-Droid）：",[2230,125614,125615],{"href":125615,"rel":125616},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25657],[19,125618,125619],{},"首先打开app后，先更新软件缓存：",[58,125621,125623],{"className":118734,"code":125622,"language":118736,"meta":63,"style":63},"pkg update\n",[32,125624,125625],{"__ignoreMap":63},[67,125626,125627,125630],{"class":69,"line":70},[67,125628,125629],{"class":110},"pkg",[67,125631,28030],{"class":114},[19,125633,125634],{},"然后换源",[58,125636,125638],{"className":118734,"code":125637,"language":118736,"meta":63,"style":63},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[32,125639,125640],{"__ignoreMap":63},[67,125641,125642,125644,125647],{"class":69,"line":70},[67,125643,124512],{"class":110},[67,125645,125646],{"class":73}," $PREFIX",[67,125648,125649],{"class":114},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125651,125652],{},"将该文件内容替换为下面：",[58,125654,125656],{"className":118734,"code":125655,"language":118736,"meta":63,"style":63},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[32,125657,125658],{"__ignoreMap":63},[67,125659,125660,125663,125666,125669],{"class":69,"line":70},[67,125661,125662],{"class":110},"deb",[67,125664,125665],{"class":114}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[67,125667,125668],{"class":114}," stable",[67,125670,125671],{"class":114}," main\n",[2994,125673,125674,125701],{},[29,125675,125676,125677,125679,125680],{},"如果你使用的是",[32,125678,124512],{},"编辑器：",[2994,125681,125682,125689,125695],{},[29,125683,125684,125685,125688],{},"按 ",[32,125686,125687],{},"Ctrl+O"," 保存文件。",[29,125690,125684,125691,125694],{},[32,125692,125693],{},"Enter"," 确认文件名。",[29,125696,125684,125697,125700],{},[32,125698,125699],{},"Ctrl+X"," 退出编辑器。",[29,125702,125676,125703,125679,125706],{},[32,125704,125705],{},"vim",[2994,125707,125708,125714],{},[29,125709,125684,125710,125713],{},[32,125711,125712],{},"Esc"," 退出编辑模式。",[29,125715,125716,125717,125719],{},"输入 ",[32,125718,120659],{}," 保存并退出。",[19,125721,125722],{},"接下来重新更新软件源：",[58,125724,125726],{"className":118734,"code":125725,"language":118736,"meta":63,"style":63},"pkg update && pkg upgrade\n",[32,125727,125728],{"__ignoreMap":63},[67,125729,125730,125732,125734,125736,125738],{"class":69,"line":70},[67,125731,125629],{"class":110},[67,125733,118785],{"class":114},[67,125735,27978],{"class":73},[67,125737,125629],{"class":110},[67,125739,118771],{"class":114},[19,125741,125742],{},"安装python：",[58,125744,125746],{"className":118734,"code":125745,"language":118736,"meta":63,"style":63},"pkg install python\n",[32,125747,125748],{"__ignoreMap":63},[67,125749,125750,125752,125754],{"class":69,"line":70},[67,125751,125629],{"class":110},[67,125753,118],{"class":114},[67,125755,125756],{"class":114}," python\n",[19,125758,125759,28259],{},[2144,125760,125761],{},"通过Termux访问设备存储",[19,125763,125764],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[58,125766,125768],{"className":118734,"code":125767,"language":118736,"meta":63,"style":63},"termux-setup-storage\n",[32,125769,125770],{"__ignoreMap":63},[67,125771,125772],{"class":69,"line":70},[67,125773,125767],{"class":110},[26,125775,125776],{},[29,125777,125778,28259,125781],{},[2144,125779,125780],{},"进入HTML文件所在的目录",[26,125782,125783],{},[29,125784,125785,125786,125788],{},"使用",[32,125787,103007],{},"命令进入HTML文件所在的目录：",[58,125790,125792],{"className":118734,"code":125791,"language":118736,"meta":63,"style":63},"cd ~\u002Fyour_html_folder\n",[32,125793,125794],{"__ignoreMap":63},[67,125795,125796,125798],{"class":69,"line":70},[67,125797,103007],{"class":77},[67,125799,125800],{"class":114}," ~\u002Fyour_html_folder\n",[26,125802,125803],{"start":191},[29,125804,125805,28259,125808,125813,125830],{},[2144,125806,125807],{},"启动Python HTTP服务器",[26,125809,125810],{},[29,125811,125812],{},"运行以下命令启动一个简单的HTTP服务器：",[58,125814,125816],{"className":118734,"code":125815,"language":118736,"meta":63,"style":63},"python -m http.server 8000\n",[32,125817,125818],{"__ignoreMap":63},[67,125819,125820,125822,125824,125827],{"class":69,"line":70},[67,125821,62],{"class":110},[67,125823,102631],{"class":77},[67,125825,125826],{"class":114}," http.server",[67,125828,125829],{"class":77}," 8000\n",[26,125831,125832],{"start":202},[29,125833,125834,125835,125838],{},"这会在端口",[32,125836,125837],{},"8000","上启动一个Web服务器。",[2994,125840,125841],{},[29,125842,125843],{},"启动服务器后，Termux会显示日志信息，例如：",[58,125845,125847],{"className":122254,"code":125846,"language":122256,"meta":122257,"style":63},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[32,125848,125849],{"__ignoreMap":63},[67,125850,125851],{"class":69,"line":70},[67,125852,125846],{},[2994,125854,125855],{},[29,125856,125857],{},"这表示服务器已成功启动。",[19,125859,125860],{},[2144,125861,125862],{},"在浏览器中访问HTML文件",[26,125864,125865],{},[29,125866,125867,28259,125870,125875],{},[2144,125868,125869],{},"在同一设备上访问",[26,125871,125872],{},[29,125873,125874],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[58,125876,125879],{"className":125877,"code":125878,"language":73424,"meta":63,"style":63},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[32,125880,125881],{"__ignoreMap":63},[67,125882,125883,125886],{"class":69,"line":70},[67,125884,125885],{"class":73},"http:",[67,125887,125888],{"class":2058},"\u002F\u002Flocalhost:8000\n",[2994,125890,125891],{},[29,125892,125893,125894,125897],{},"如果HTML文件中有",[32,125895,125896],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125899,125901],{"id":125900},"_76-linux重点知识","7.6 Linux重点知识",[391,125903,125905],{"id":125904},"_761-关于点的说明","7.6.1 关于点的说明",[19,125907,125908],{},[3317,125909],{"alt":63,"src":125910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125912,125913],{},"一点本目录，两点上目录",[391,125915,125917],{"id":125916},"_762-目录","7.6.2 目录",[23794,125919,125921],{"id":125920},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125923,125924],{},[2144,125925,125926],{},"\u002Fboot:",[19,125928,125929],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125931,125932],{},[2144,125933,125934],{},"\u002Fetc:",[19,125936,125937],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125939,125940],{},[2144,125941,125942],{},"\u002Flib：",[19,125944,125945],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125947,125948],{},[2144,125949,125950],{},"\u002Fsys:",[19,125952,125953],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23794,125955,125957],{"id":125956},"_7622-指令集合","7.6.2.2 指令集合",[19,125959,125960],{},[2144,125961,125962],{},"\u002Fbin:",[19,125964,125965],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125967,125968],{},[2144,125969,125970],{},"\u002Fsbin:",[19,125972,125973],{},"只有系统管理员才能使用的程序和指令",[23794,125975,125977],{"id":125976},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125979,125980],{},[2144,125981,125982],{},"\u002Fdev:",[19,125984,125985],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125987,125988],{},[2144,125989,125990],{},"\u002Fmedia:",[19,125992,125993],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125995,125996],{},[2144,125997,125998],{},"\u002Fmnt:",[19,126000,126001],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23794,126003,126005],{"id":126004},"_7624-临时文件","7.6.2.4 临时文件",[19,126007,126008],{},[2144,126009,126010],{},"\u002Frun:",[19,126012,126013],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126015,126016],{},[2144,126017,126018],{},"\u002Flost+found:",[19,126020,126021],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126023,126024],{},[2144,126025,126026],{},"\u002Ftmp:",[19,126028,126029],{},"这个目录是用来存放一些临时文件的",[23794,126031,126033],{"id":126032},"_7625-账户","7.6.2.5 账户",[19,126035,126036],{},[2144,126037,126038],{},"\u002Froot：",[19,126040,126041],{},"系统管理员的用户主目录",[19,126043,126044,28259],{},[2144,126045,126046],{},"\u002Fhome",[19,126048,126049],{},"用户的主目录，以用户的账号命名的",[19,126051,126052,28259],{},[2144,126053,126054],{},"\u002Fusr",[19,126056,126057],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126059,126060],{},[2144,126061,126062],{},"\u002Fusr\u002Fbin：",[19,126064,126065],{},"系统用户使用的应用程序与指令",[19,126067,126068],{},[2144,126069,126070],{},"\u002Fusr\u002Fsbin：",[19,126072,126073],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126075,126076],{},[2144,126077,126078],{},"\u002Fusr\u002Fsrc：",[19,126080,126081],{},"内核源代码默认的放置目录",[23794,126083,126085],{"id":126084},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126087,126088],{},[2144,126089,126090],{},"\u002Fvar：",[19,126092,126093],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126095,126096],{},[2144,126097,126098],{},"\u002Fproc:",[19,126100,126101,126102,126105],{},"管理 ",[2144,126103,126104],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23794,126107,126109],{"id":126108},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126111,126112],{},[2144,126113,126114],{},"\u002Fopt:",[19,126116,126117],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126119,126120],{},[2144,126121,126122],{},"\u002Fsrv:",[19,126124,126125],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[391,126127,126129],{"id":126128},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126131,126132],{},[3317,126133],{"alt":63,"src":126134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126136,126137],{},"windows-->linux:",[19,126139,126140],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126142,126143],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126145,126146],{},"linux传输文件到windows",[19,126148,126149],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[391,126151,126153],{"id":126152},"_764-易忘知识","7.6.4 易忘知识",[19,126155,126156],{},"操作系统内核查看",[58,126158,126159],{"className":118734,"code":122728,"language":118736,"meta":63,"style":63},[32,126160,126161],{"__ignoreMap":63},[67,126162,126163,126165],{"class":69,"line":70},[67,126164,71964],{"class":110},[67,126166,122737],{"class":77},[19,126168,126169],{},[3317,126170],{"alt":63,"src":126171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126173,126174],{},[3317,126175],{"alt":63,"src":126176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[58,126178,126180],{"className":118734,"code":126179,"language":118736,"meta":63,"style":63},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[32,126181,126182,126194],{"__ignoreMap":63},[67,126183,126184,126186,126189,126192],{"class":69,"line":70},[67,126185,122945],{"class":110},[67,126187,126188],{"class":114}," mvtest",[67,126190,126191],{"class":114}," mvtest2",[67,126193,4499],{"class":73},[67,126195,126196],{"class":69,"line":191},[67,126197,126198],{"class":110},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126200,126201],{},[3317,126202],{"alt":63,"src":126203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126205,126206],{},[3317,126207],{"alt":63,"src":126208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126210,126211,126212,126215],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[32,126213,126214],{},"du -a"," 可以快速查看磁盘使用细节。",[391,126217,126219],{"id":126218},"_765-vim","7.6.5 Vim",[19,126221,126222],{},[3317,126223],{"alt":63,"src":126224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126226,126227],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126229,126230],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126232,126233],{},[2144,126234,126235],{},"1.命令模式：",[19,126237,126238],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126240,126241],{},"x 删除当前光标所在处的字符",[19,126243,126244],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126246,126247],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126249,126250],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126252,126253],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126255,126256],{},"dd 剪切当前行",[19,126258,126259],{},"yy 复制当前行",[19,126261,126262],{},"p 粘贴剪贴板内容到光标下方",[19,126264,126265],{},"P 粘贴剪贴板内容到光标上方",[19,126267,126268],{},"u 撤销上一次操作",[19,126270,126271],{},"ctrl+r 重做上一次操作",[19,126273,126274,126276],{},[2784,126275],{}," 保存文件",[19,126278,126279,126281],{},[2634,126280],{}," 退出Vim编辑器",[19,126283,126284,126286],{},[2634,126285],{},"! 强制退出Vim编辑器，不保存修改",[19,126288,126289],{},[2144,126290,126291],{},"2.输入模式：",[19,126293,126294],{},[3317,126295],{"alt":63,"src":126296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126298,126299],{},[2144,126300,126301],{},"3.底线命令模式：",[19,126303,126304],{},[3317,126305],{"alt":63,"src":126306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126308,126309],{},"按下esc可以退出底线命令模式",[391,126311,126313],{"id":126312},"_766-apt","7.6.6 apt",[19,126315,126316],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[391,126318,126320],{"id":126319},"_767-home与root的区别","7.6.7 home与root的区别",[19,126322,126323],{},[3317,126324],{"alt":63,"src":126325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126327,126328],{},[3317,126329],{"alt":63,"src":126330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126332,126333],{},[3317,126334],{"alt":63,"src":126335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126337,126338],{},[3317,126339],{"alt":63,"src":126340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[391,126342,126344],{"id":126343},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126346,126347],{},[2230,126348,126349],{"href":126349,"rel":126350},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25657],[26,126352,126353,126356],{},[29,126354,126355],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[29,126357,126358],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126360,126361],{},[3317,126362],{"alt":63,"src":126363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126365,126366],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126368,126369],{},[3317,126370],{"alt":63,"src":126371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[58,126373,126375],{"className":122254,"code":126374,"language":122256,"meta":122257,"style":63},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[32,126376,126377,126382],{"__ignoreMap":63},[67,126378,126379],{"class":69,"line":70},[67,126380,126381],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[67,126383,126384],{"class":69,"line":191},[67,126385,126386],{},".\u002Fpycharm.sh\n",[19,126388,126389],{},"3️⃣创建.desktop文件",[19,126391,126392],{},[2144,126393,126394],{},"原理：",[2994,126396,126397,126407],{},[29,126398,126399,126400,126406],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2144,126401,126402,126405],{},[32,126403,126404],{},".desktop"," 文件"," 来识别应用。",[29,126408,126409,126411,126412],{},[32,126410,126404],{}," 文件相当于一个“应用注册表”，告诉系统：",[2994,126413,126414,126417,126420,126423,126426],{},[29,126415,126416],{},"应用名字（Name）",[29,126418,126419],{},"图标（Icon）",[29,126421,126422],{},"执行命令（Exec）",[29,126424,126425],{},"分类（Categories）",[29,126427,126428],{},"是否需要终端（Terminal）",[58,126430,126432],{"className":122254,"code":126431,"language":122256,"meta":122257,"style":63},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[32,126433,126434,126439],{"__ignoreMap":63},[67,126435,126436],{"class":69,"line":70},[67,126437,126438],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[67,126440,126441],{"class":69,"line":191},[67,126442,126443],{},"nano pycharm.desktop\n",[19,126445,126446],{},"nano是一个命令行下的编辑器，也可以使用vim",[58,126448,126450],{"className":122254,"code":126449,"language":122256,"meta":122257,"style":63},"[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",[32,126451,126452,126457,126462,126467,126472,126477,126482,126487,126492,126497],{"__ignoreMap":63},[67,126453,126454],{"class":69,"line":70},[67,126455,126456],{},"[Desktop Entry]\n",[67,126458,126459],{"class":69,"line":191},[67,126460,126461],{},"Version=1.0\n",[67,126463,126464],{"class":69,"line":202},[67,126465,126466],{},"Type=Application\n",[67,126468,126469],{"class":69,"line":641},[67,126470,126471],{},"Name=PyCharm\n",[67,126473,126474],{"class":69,"line":655},[67,126475,126476],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[67,126478,126479],{"class":69,"line":660},[67,126480,126481],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[67,126483,126484],{"class":69,"line":665},[67,126485,126486],{},"Comment=JetBrains PyCharm IDE\n",[67,126488,126489],{"class":69,"line":677},[67,126490,126491],{},"Categories=Development;IDE;\n",[67,126493,126494],{"class":69,"line":683},[67,126495,126496],{},"Terminal=false\n",[67,126498,126499],{"class":69,"line":689},[67,126500,126501],{},"StartupWMClass=jetbrains-pycharm\n",[2994,126503,126504,126510,126516,126522],{},[29,126505,126506,126509],{},[32,126507,126508],{},"Exec"," → 点击图标时执行的命令",[29,126511,126512,126515],{},[32,126513,126514],{},"Icon"," → 显示在菜单和桌面上的图标",[29,126517,126518,126521],{},[32,126519,126520],{},"Terminal=false"," → 不打开终端",[29,126523,126524,126527],{},[32,126525,126526],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126529,126530,126531],"blockquote",{},[19,126532,126533,126534,126536,126537],{},"可以理解成 ",[32,126535,126404],{}," 文件是 Linux 的 ",[2144,126538,126539],{},"快捷方式配置文件",[19,126541,126542],{},"4️⃣设置可执行权限",[58,126544,126546],{"className":122254,"code":126545,"language":122256,"meta":122257,"style":63},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[32,126547,126548],{"__ignoreMap":63},[67,126549,126550],{"class":69,"line":70},[67,126551,126545],{},[19,126553,126554],{},"5️⃣桌面图标启动的话如下：",[58,126556,126558],{"className":122254,"code":126557,"language":122256,"meta":122257,"style":63},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[32,126559,126560,126565],{"__ignoreMap":63},[67,126561,126562],{"class":69,"line":70},[67,126563,126564],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[67,126566,126567],{"class":69,"line":191},[67,126568,126569],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,126571,126572],{"start":202},[29,126573,126574],{},"下载Appimage文件实现软件的安装",[19,126576,126577],{},"1️⃣先下载appimage",[19,126579,126580],{},[2230,126581,126582],{"href":126582,"rel":126583},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25657],[19,126585,126586],{},[3317,126587],{"alt":63,"src":126588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126590,126591],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126593,126594],{},[3317,126595],{"alt":63,"src":126596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126598,126599],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126601,126602],{},[3317,126603],{"alt":63,"src":126604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126606,126607],{},[3317,126608],{"alt":63,"src":126609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126611,126612,126613,126616],{},"3️⃣给他们放在",[32,126614,126615],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126618,126619],{},"4️⃣给软件执行权限",[58,126621,126623],{"className":122254,"code":126622,"language":122256,"meta":122257,"style":63},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[32,126624,126625,126630],{"__ignoreMap":63},[67,126626,126627],{"class":69,"line":70},[67,126628,126629],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[67,126631,126632],{"class":69,"line":191},[67,126633,126634],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126636,126637],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[58,126639,126641],{"className":118734,"code":126640,"language":118736,"meta":63,"style":63},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[32,126642,126643,126650,126657,126663],{"__ignoreMap":63},[67,126644,126645,126647],{"class":69,"line":70},[67,126646,103007],{"class":77},[67,126648,126649],{"class":114}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[67,126651,126652,126654],{"class":69,"line":191},[67,126653,1126],{"class":110},[67,126655,126656],{"class":114}," .\u002Fqqmusic.desktop\n",[67,126658,126659,126661],{"class":69,"line":202},[67,126660,125705],{"class":110},[67,126662,126656],{"class":114},[67,126664,126665,126667,126669,126671],{"class":69,"line":641},[67,126666,111],{"class":110},[67,126668,26371],{"class":114},[67,126670,124571],{"class":114},[67,126672,126656],{"class":114},[19,126674,126675,126677],{},[32,126676,1126],{},"：一个 Linux 命令，主要功能是：",[2994,126679,126680,126683],{},[29,126681,126682],{},"如果文件不存在，就创建一个新的空文件",[29,126684,126685],{},"如果文件已存在，就更新该文件的最后修改时间",[58,126687,126689],{"className":122254,"code":126688,"language":122256,"meta":122257,"style":63},"[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",[32,126690,126691,126695,126700,126705,126710,126714,126719],{"__ignoreMap":63},[67,126692,126693],{"class":69,"line":70},[67,126694,126456],{},[67,126696,126697],{"class":69,"line":191},[67,126698,126699],{},"Name=QQ音乐\n",[67,126701,126702],{"class":69,"line":202},[67,126703,126704],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[67,126706,126707],{"class":69,"line":641},[67,126708,126709],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[67,126711,126712],{"class":69,"line":655},[67,126713,126466],{},[67,126715,126716],{"class":69,"line":660},[67,126717,126718],{},"Categories=Audio;Music;Player;\n",[67,126720,126721],{"class":69,"line":665},[67,126722,126723],{},"Comment=QQ Music Client for Linux\n",[19,126725,126726],{},"将文件复制进去",[19,126728,126729],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126731,126732],{},[3317,126733],{"alt":63,"src":126734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126736,126737],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126739,126740],{},[3317,126741],{"alt":63,"src":126742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126744,126745,126746,126749,126750,126753],{},"如果你用的不是KDE，那么也可以直接修改",[32,126747,126748],{},"qqmuic.desktop","：在exec的末尾加上",[32,126751,126752],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[58,126755,126757],{"className":122254,"code":126756,"language":122256,"meta":122257,"style":63},"[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",[32,126758,126759,126763,126767,126772,126776,126780,126784],{"__ignoreMap":63},[67,126760,126761],{"class":69,"line":70},[67,126762,126456],{},[67,126764,126765],{"class":69,"line":191},[67,126766,126699],{},[67,126768,126769],{"class":69,"line":202},[67,126770,126771],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[67,126773,126774],{"class":69,"line":641},[67,126775,126709],{},[67,126777,126778],{"class":69,"line":655},[67,126779,126466],{},[67,126781,126782],{"class":69,"line":660},[67,126783,126718],{},[67,126785,126786],{"class":69,"line":665},[67,126787,126723],{},[19,126789,126790],{},[3317,126791],{"alt":63,"src":126792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126794,126795],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[58,126797,126799],{"className":122254,"code":126798,"language":122256,"meta":122257,"style":63},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[32,126800,126801],{"__ignoreMap":63},[67,126802,126803],{"class":69,"line":70},[67,126804,126798],{},[26,126806,126807],{"start":641},[29,126808,126809],{},"去Flathub上安装软件",[19,126811,126812],{},[2230,126813,126814],{"href":126814,"rel":126815},"https:\u002F\u002Fflathub.org\u002F",[25657],[19,126817,126818],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126820,126821],{},[3317,126822],{"alt":63,"src":126823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[58,126825,126827],{"className":122254,"code":126826,"language":122256,"meta":122257,"style":63},"flatpak install flathub com.obsproject.Studio\n",[32,126828,126829],{"__ignoreMap":63},[67,126830,126831],{"class":69,"line":70},[67,126832,126826],{},[19,126834,126835],{},[3317,126836],{"alt":63,"src":126837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126839,126840],{},"2️⃣运行软件",[19,126842,126843],{},"a.官方方式：",[19,126845,126846],{},[3317,126847],{"alt":63,"src":126848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[58,126850,126851],{"className":122254,"code":126826,"language":122256,"meta":122257,"style":63},[32,126852,126853],{"__ignoreMap":63},[67,126854,126855],{"class":69,"line":70},[67,126856,126826],{},[19,126858,126859],{},"b.当普通软件运行：",[19,126861,126862],{},[3317,126863],{"alt":63,"src":126864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126866,126867],{},[3317,126868],{"alt":63,"src":126869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1903,126871,126872],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":63,"searchDepth":191,"depth":191,"links":126874},[126875,126876,126881,126882,126888,126889],{"id":123607,"depth":191,"text":123608},{"id":123949,"depth":191,"text":123950,"children":126877},[126878,126879,126880],{"id":123953,"depth":202,"text":123954},{"id":124020,"depth":202,"text":124021},{"id":124281,"depth":202,"text":124282},{"id":124434,"depth":191,"text":124435},{"id":124672,"depth":191,"text":124673,"children":126883},[126884,126885,126886,126887],{"id":124724,"depth":202,"text":124725},{"id":125010,"depth":202,"text":125011},{"id":125281,"depth":202,"text":125282},{"id":125540,"depth":202,"text":125541},{"id":125599,"depth":191,"text":125600},{"id":125900,"depth":191,"text":125901,"children":126890},[126891,126892,126893,126894,126895,126896,126897,126898],{"id":125904,"depth":202,"text":125905},{"id":125916,"depth":202,"text":125917},{"id":126128,"depth":202,"text":126129},{"id":126152,"depth":202,"text":126153},{"id":126218,"depth":202,"text":126219},{"id":126312,"depth":202,"text":126313},{"id":126319,"depth":202,"text":126320},{"id":126343,"depth":202,"text":126344},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123599,"description":25173},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126905,"title":126906,"body":126907,"description":25173,"extension":1930,"meta":126911,"navigation":630,"path":126912,"seo":126913,"stem":126914,"__hash__":126915},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126908,"toc":126909},[],{"title":63,"searchDepth":191,"depth":191,"links":126910},[],{"category":32047},"\u002Fwiki\u002F2025-01-27-linux",{"title":126906,"description":25173},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126917,"title":126918,"body":126919,"description":126923,"extension":1930,"meta":127314,"navigation":630,"path":127315,"seo":127316,"stem":127317,"__hash__":127318},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126920,"toc":127312},[126921,126924,126928,126945,126948,127001,127005,127007,127047,127056,127060,127063,127304,127309],[19,126922,126923],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126925,126927],{"id":126926},"_1ubuntu环境配置","1.Ubuntu环境配置",[26,126929,126930,126933,126936,126939,126942],{},[29,126931,126932],{},"ubuntu环境换源",[29,126934,126935],{},"安装cuda",[29,126937,126938],{},"安装miniconda",[29,126940,126941],{},"安装pytorch",[29,126943,126944],{},"安装genesis",[19,126946,126947],{},"参考链接：",[58,126949,126951],{"className":101,"code":126950,"language":103,"meta":63,"style":63},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[32,126952,126953],{"__ignoreMap":63},[67,126954,126955,126958,126961,126964,126966,126969,126972,126974,126977,126980,126982,126985,126988,126990,126993,126996,126998],{"class":69,"line":70},[67,126956,126957],{"class":110},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[67,126959,126960],{"class":114},"=blogdetail",[67,126962,126963],{"class":73},"&sharetype",[67,126965,85],{"class":84},[67,126967,126968],{"class":114},"blogdetail",[67,126970,126971],{"class":73},"&sharerId",[67,126973,85],{"class":84},[67,126975,126976],{"class":114},"144728092",[67,126978,126979],{"class":73},"&sharerefer",[67,126981,85],{"class":84},[67,126983,126984],{"class":114},"PC",[67,126986,126987],{"class":73},"&sharesource",[67,126989,85],{"class":84},[67,126991,126992],{"class":114},"qq_69379513",[67,126994,126995],{"class":73},"&sharefrom",[67,126997,85],{"class":84},[67,126999,127000],{"class":114},"from_link\n",[10,127002,127004],{"id":127003},"_2genesis-报错issue","2.Genesis 报错issue",[19,127006,126947],{},[58,127008,127009],{"className":101,"code":126950,"language":103,"meta":63,"style":63},[32,127010,127011],{"__ignoreMap":63},[67,127012,127013,127015,127017,127019,127021,127023,127025,127027,127029,127031,127033,127035,127037,127039,127041,127043,127045],{"class":69,"line":70},[67,127014,126957],{"class":110},[67,127016,126960],{"class":114},[67,127018,126963],{"class":73},[67,127020,85],{"class":84},[67,127022,126968],{"class":114},[67,127024,126971],{"class":73},[67,127026,85],{"class":84},[67,127028,126976],{"class":114},[67,127030,126979],{"class":73},[67,127032,85],{"class":84},[67,127034,126984],{"class":114},[67,127036,126987],{"class":73},[67,127038,85],{"class":84},[67,127040,126992],{"class":114},[67,127042,126995],{"class":73},[67,127044,85],{"class":84},[67,127046,127000],{"class":114},[58,127048,127050],{"className":101,"code":127049,"language":103,"meta":63,"style":63},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[32,127051,127052],{"__ignoreMap":63},[67,127053,127054],{"class":69,"line":70},[67,127055,127049],{"class":110},[10,127057,127059],{"id":127058},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127061,127062],{},"hello_robot.py",[58,127064,127066],{"className":60,"code":127065,"language":62,"meta":63,"style":63},"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",[32,127067,127068,127074,127089,127093,127105,127117,127121,127134,127138,127157,127167,127177,127191,127195,127199,127204,127208,127218,127225,127239,127246,127256,127261,127265,127283,127288,127292,127299],{"__ignoreMap":63},[67,127069,127070,127072],{"class":69,"line":70},[67,127071,622],{"class":84},[67,127073,47073],{"class":73},[67,127075,127076,127079,127082,127084,127086],{"class":69,"line":191},[67,127077,127078],{"class":73},"os.environ[",[67,127080,127081],{"class":114},"'PYOPENGL_PLATFORM'",[67,127083,81],{"class":73},[67,127085,85],{"class":84},[67,127087,127088],{"class":114}," 'glx'\n",[67,127090,127091],{"class":69,"line":202},[67,127092,631],{"emptyLinePlaceholder":630},[67,127094,127095,127097,127100,127102],{"class":69,"line":641},[67,127096,622],{"class":84},[67,127098,127099],{"class":73}," genesis ",[67,127101,649],{"class":84},[67,127103,127104],{"class":73}," gs\n",[67,127106,127107,127109,127112,127114],{"class":69,"line":655},[67,127108,32515],{"class":84},[67,127110,127111],{"class":73}," pynput ",[67,127113,622],{"class":84},[67,127115,127116],{"class":73}," keyboard\n",[67,127118,127119],{"class":69,"line":660},[67,127120,631],{"emptyLinePlaceholder":630},[67,127122,127123,127126,127129,127131],{"class":69,"line":665},[67,127124,127125],{"class":73},"gs.init(",[67,127127,127128],{"class":7033},"backend",[67,127130,85],{"class":84},[67,127132,127133],{"class":73},"gs.gpu)\n",[67,127135,127136],{"class":69,"line":677},[67,127137,631],{"emptyLinePlaceholder":630},[67,127139,127140,127143,127145,127148,127151,127153,127155],{"class":69,"line":683},[67,127141,127142],{"class":73},"scene ",[67,127144,85],{"class":84},[67,127146,127147],{"class":73}," gs.Scene(",[67,127149,127150],{"class":7033},"show_viewer",[67,127152,85],{"class":84},[67,127154,33248],{"class":77},[67,127156,829],{"class":73},[67,127158,127159,127162,127164],{"class":69,"line":689},[67,127160,127161],{"class":73},"plane ",[67,127163,85],{"class":84},[67,127165,127166],{"class":73}," scene.add_entity(gs.morphs.Plane())\n",[67,127168,127169,127172,127174],{"class":69,"line":694},[67,127170,127171],{"class":73},"franka ",[67,127173,85],{"class":84},[67,127175,127176],{"class":73}," scene.add_entity(\n",[67,127178,127179,127182,127184,127186,127189],{"class":69,"line":700},[67,127180,127181],{"class":73},"    gs.morphs.MJCF(",[67,127183,47122],{"class":7033},[67,127185,85],{"class":84},[67,127187,127188],{"class":114},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[67,127190,39815],{"class":73},[67,127192,127193],{"class":69,"line":706},[67,127194,829],{"class":73},[67,127196,127197],{"class":69,"line":712},[67,127198,631],{"emptyLinePlaceholder":630},[67,127200,127201],{"class":69,"line":717},[67,127202,127203],{"class":73},"scene.build()\n",[67,127205,127206],{"class":69,"line":723},[67,127207,631],{"emptyLinePlaceholder":630},[67,127209,127210,127212,127215],{"class":69,"line":729},[67,127211,801],{"class":84},[67,127213,127214],{"class":110}," on_press",[67,127216,127217],{"class":73},"(key):\n",[67,127219,127220,127223],{"class":69,"line":735},[67,127221,127222],{"class":84},"    try",[67,127224,813],{"class":73},[67,127226,127227,127229,127232,127234,127237],{"class":69,"line":741},[67,127228,4329],{"class":84},[67,127230,127231],{"class":73}," key.char ",[67,127233,4774],{"class":84},[67,127235,127236],{"class":114}," 'q'",[67,127238,813],{"class":73},[67,127240,127241,127243],{"class":69,"line":747},[67,127242,17529],{"class":84},[67,127244,127245],{"class":77}," False\n",[67,127247,127248,127251,127254],{"class":69,"line":753},[67,127249,127250],{"class":84},"    except",[67,127252,127253],{"class":77}," AttributeError",[67,127255,813],{"class":73},[67,127257,127258],{"class":69,"line":758},[67,127259,127260],{"class":84},"        pass\n",[67,127262,127263],{"class":69,"line":764},[67,127264,631],{"emptyLinePlaceholder":630},[67,127266,127267,127270,127272,127275,127278,127280],{"class":69,"line":770},[67,127268,127269],{"class":73},"listener ",[67,127271,85],{"class":84},[67,127273,127274],{"class":73}," keyboard.Listener(",[67,127276,127277],{"class":7033},"on_press",[67,127279,85],{"class":84},[67,127281,127282],{"class":73},"on_press)\n",[67,127284,127285],{"class":69,"line":776},[67,127286,127287],{"class":73},"listener.start()\n",[67,127289,127290],{"class":69,"line":782},[67,127291,631],{"emptyLinePlaceholder":630},[67,127293,127294,127296],{"class":69,"line":788},[67,127295,110101],{"class":84},[67,127297,127298],{"class":73}," listener.running:\n",[67,127300,127301],{"class":69,"line":793},[67,127302,127303],{"class":73},"    scene.step()\n",[19,127305,127306],{},[3317,127307],{"alt":63,"src":127308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1903,127310,127311],{},"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":63,"searchDepth":191,"depth":191,"links":127313},[],{"category":25175},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126918,"description":126923},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127320,"title":127321,"body":127322,"description":25173,"extension":1930,"meta":127337,"navigation":630,"path":127338,"seo":127339,"stem":127340,"__hash__":127341},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127323,"toc":127334},[127324,127327,127331],[10,127325,127321],{"id":127326},"_1-基础知识",[14,127328,127330],{"id":127329},"_11-js的组成","1.1 js的组成",[19,127332,127333],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":63,"searchDepth":191,"depth":191,"links":127335},[127336],{"id":127329,"depth":191,"text":127330},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127321,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127343,"title":127344,"body":127345,"description":25173,"extension":1930,"meta":127484,"navigation":630,"path":127485,"seo":127486,"stem":127487,"__hash__":127488},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127346,"toc":127472},[127347,127350,127354,127357,127361,127371,127375,127378,127381,127384,127388,127395,127401,127405,127411,127422,127426,127429,127433,127436,127440,127443,127447,127450,127454,127457,127460,127463,127466,127469],[10,127348,127344],{"id":127349},"_2-vscode必备内容",[14,127351,127353],{"id":127352},"_21-标签分类","2.1 标签分类",[19,127355,127356],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127358,127360],{"id":127359},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127362,127363,127364,127366,127367,127370],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[32,127365,2218],{}," 然后按 ",[32,127368,127369],{},"Tab","，快速自动生成基本结构。",[14,127372,127374],{"id":127373},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127376,127377],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127379,127380],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127382,127383],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127385,127387],{"id":127386},"_24-视图缩放","2.4 视图缩放",[19,127389,127390,127391,127394],{},"缩放视图 ",[32,127392,127393],{},"ctrl+"," 可实现代码增大。",[19,127396,127397,127400],{},[32,127398,127399],{},"ctrl-"," 可实现代码减小。",[14,127402,127404],{"id":127403},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127406,127407,127408,230],{},"VSCode 新建文件快捷键为 ",[32,127409,127410],{},"ctrl+N",[19,127412,127413,127414,127417,127418,127421],{},"保存快捷键为 ",[32,127415,127416],{},"ctrl+S","，将文本保存为 ",[32,127419,127420],{},".html"," 文件。",[14,127423,127425],{"id":127424},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127427,127428],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127430,127432],{"id":127431},"_27-vscode-icons","2.7 vscode-icons",[19,127434,127435],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127437,127439],{"id":127438},"_28-easy-less","2.8 Easy LESS",[19,127441,127442],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127444,127446],{"id":127445},"_29-会了吧插件","2.9 会了吧插件",[19,127448,127449],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127451,127453],{"id":127452},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127455,127456],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127458,127459],{},"②选定多个相同的单词:ctrl+D",[19,127461,127462],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127464,127465],{},"④全局替换某些单词:ctrl+h",[19,127467,127468],{},"⑤快速定位到某一行:ctrl+g",[19,127470,127471],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":63,"searchDepth":191,"depth":191,"links":127473},[127474,127475,127476,127477,127478,127479,127480,127481,127482,127483],{"id":127352,"depth":191,"text":127353},{"id":127359,"depth":191,"text":127360},{"id":127373,"depth":191,"text":127374},{"id":127386,"depth":191,"text":127387},{"id":127403,"depth":191,"text":127404},{"id":127424,"depth":191,"text":127425},{"id":127431,"depth":191,"text":127432},{"id":127438,"depth":191,"text":127439},{"id":127445,"depth":191,"text":127446},{"id":127452,"depth":191,"text":127453},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127344,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127490,"title":127491,"body":127492,"description":25173,"extension":1930,"meta":127651,"navigation":630,"path":127652,"seo":127653,"stem":127654,"__hash__":127655},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127493,"toc":127643},[127494,127497,127501,127511,127517,127523,127527,127536,127540,127545,127548,127551,127555,127558,127568,127577,127586,127595,127605,127612,127617,127622,127635],[10,127495,127491],{"id":127496},"_3-html文本与容器标签",[14,127498,127500],{"id":127499},"_31-标题标签","3.1 标题标签",[19,127502,127503,127506,127507,127510],{},[32,127504,127505],{},"\u003Ch1>","我是一级标签",[32,127508,127509],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127512,127513,127506,127515],{},[32,127514,127505],{},[32,127516,127509],{},[19,127518,124773,127519,127522],{},[32,127520,127521],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127524,127526],{"id":127525},"_32-段落标签","3.2 段落标签",[19,127528,127529,127532,127533],{},[32,127530,127531],{},"\u003Cp>","....",[32,127534,127535],{},"\u003C\u002Fp>",[14,127537,127539],{"id":127538},"_33-换行标签","3.3 换行标签",[19,127541,127542],{},[32,127543,127544],{},"\u003Cbr \u002F>",[19,127546,127547],{},"具有强制换行的作用",[19,127549,127550],{},"单标签",[14,127552,127554],{"id":127553},"_34-文本格式化标签","3.4 文本格式化标签",[19,127556,127557],{},"提供粗体、斜体和下划线等效果",[19,127559,127560,127561,84298,127564,127567],{},"加粗：",[32,127562,127563],{},"\u003Cstrong>...\u003C\u002Fstrong>",[32,127565,127566],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127569,127570,127571,84298,127574,127567],{},"斜体：",[32,127572,127573],{},"\u003Cem>...\u003C\u002Fem>",[32,127575,127576],{},"\u003Ci>...\u003C\u002Fi>",[19,127578,127579,127580,84298,127583,127567],{},"删除线：",[32,127581,127582],{},"\u003Cdel>...\u003C\u002Fdel>",[32,127584,127585],{},"\u003Cs>...\u003C\u002Fs>",[19,127587,127588,127589,84298,127592,127567],{},"下划线：",[32,127590,127591],{},"\u003Cins>...\u003C\u002Fins>",[32,127593,127594],{},"\u003Cu>...\u003C\u002Fu>",[14,127596,127598,127599,20207,127602,104382],{"id":127597},"_35-div和span标签","3.5 ",[32,127600,127601],{},"\u003Cdiv>",[32,127603,127604],{},"\u003Cspan>",[19,127606,127607,1264,127609,127611],{},[32,127608,127601],{},[32,127610,127604],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127613,127614],{},[32,127615,127616],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127618,127619],{},[32,127620,127621],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127623,127624,127625,127627,127628,127630,127631,127634],{},"两者特点：①",[32,127626,127601],{}," 标签用来布局，但一行通常只放一个 ",[32,127629,127601],{},"。可以理解为一个大盒子，独占一行，在 ",[32,127632,127633],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127636,79009,127637,127639,127640,127642],{},[32,127638,127604],{}," 标签也可用于布局，一行可以放多个 ",[32,127641,127604],{},"，可理解为小盒子。",{"title":63,"searchDepth":191,"depth":191,"links":127644},[127645,127646,127647,127648,127649],{"id":127499,"depth":191,"text":127500},{"id":127525,"depth":191,"text":127526},{"id":127538,"depth":191,"text":127539},{"id":127553,"depth":191,"text":127554},{"id":127597,"depth":191,"text":127650},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127491,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127657,"title":127658,"body":127659,"description":25173,"extension":1930,"meta":127856,"navigation":630,"path":127857,"seo":127858,"stem":127859,"__hash__":127860},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127660,"toc":127848},[127661,127664,127668,127671,127677,127684,127690,127696,127699,127702,127705,127708,127711,127714,127717,127721,127724,127727,127730,127736,127742,127748,127755,127759,127765,127771,127774,127777,127783,127789,127795,127798,127801,127805,127808,127818,127824,127828,127837,127841,127844],[10,127662,127658],{"id":127663},"_4-html图像与链接",[14,127665,127667],{"id":127666},"_41-图像标签","4.1 图像标签",[19,127669,127670],{},"（1）标签",[19,127672,127673,127676],{},[32,127674,127675],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127678,127679,127680,127683],{},"src是",[32,127681,127682],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127685,127686,127687],{},"alt:文本，替换文本。图像不能显示的文字 ",[32,127688,127689],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127691,127692,127693],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[32,127694,127695],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127697,127698],{},"width:像素，设置图像的宽度",[19,127700,127701],{},"height:像素，设置图像的高度",[19,127703,127704],{},"border：像素，设置图像的边框粗细",[19,127706,127707],{},"（2）图像标签属性的注意点：",[19,127709,127710],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127712,127713],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127715,127716],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127718,127720],{"id":127719},"_42-路径注意要点","4.2 路径注意要点：",[19,127722,127723],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127725,127726],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127728,127729],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127731,127732,127733],{},"①同一级路径：图像文件位于HTML文件同一级，如",[32,127734,127735],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127737,127738,127739],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[32,127740,127741],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127743,127744,127745],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[32,127746,127747],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127749,127750,127751,2243],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2230,127752,127753],{"href":127753,"rel":127754},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25657],[14,127756,127758],{"id":127757},"_43-超链接标签","4.3 超链接标签",[19,127760,127761,127764],{},[32,127762,127763],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127766,127767,127768],{},"①语法格式：",[32,127769,127770],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127772,127773],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127775,127776],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127778,127779,127780],{},"③链接分类：外部链接：",[32,127781,127782],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127784,127785,127786],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[32,127787,127788],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127790,127791,127792],{},"空链接：如果当时没有确定链接目标时，",[32,127793,127794],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127796,127797],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127799,127800],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127802,127804],{"id":127803},"_44-锚点链接","4.4 锚点链接",[19,127806,127807],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127809,127810,127811,127814,127815],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[32,127812,127813],{},"\u003Ca href=\"#two\">","第二级",[32,127816,127817],{},"\u003C\u002Fa>",[19,127819,127820,127821],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[32,127822,127823],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127825,127827],{"id":127826},"_45-注释标签","4.5 注释标签",[19,127829,127830,127833,127834],{},[32,127831,127832],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[32,127835,127836],{},"ctrl+\u002F",[14,127838,127840],{"id":127839},"_46-特殊字符","4.6 特殊字符",[19,127842,127843],{},"可以实现添加多个空格",[3317,127845],{"style":127846,"src":127847},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":63,"searchDepth":191,"depth":191,"links":127849},[127850,127851,127852,127853,127854,127855],{"id":127666,"depth":191,"text":127667},{"id":127719,"depth":191,"text":127720},{"id":127757,"depth":191,"text":127758},{"id":127803,"depth":191,"text":127804},{"id":127826,"depth":191,"text":127827},{"id":127839,"depth":191,"text":127840},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127658,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127862,"title":127863,"body":127864,"description":25173,"extension":1930,"meta":128157,"navigation":630,"path":128158,"seo":128159,"stem":128160,"__hash__":128161},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127865,"toc":128148},[127866,127869,127873,127876,127879,127882,127885,127888,127891,127894,127897,127900,127920,127926,127930,127933,127936,127939,127942,127945,127948,127952,127955,127958,127961,127964,127977,127982,127985,127988,128003,128006,128009,128012,128015,128018,128022,128025,128032,128035,128038,128041,128044,128047,128053,128056,128059,128065,128068,128071,128074,128080,128083,128086,128100,128107,128110,128113,128120,128129,128132,128135,128138,128142,128145],[10,127867,127863],{"id":127868},"_5-html表格列表与表单",[14,127870,127872],{"id":127871},"_51-表格标签","5.1 表格标签",[19,127874,127875],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127877,127878],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127880,127881],{},"②表格基本语法：",[3317,127883],{"style":127846,"src":127884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127886,127887],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3317,127889],{"style":127846,"src":127890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127892,127893],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3317,127895],{"style":127846,"src":127896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127898,127899],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127901,127902,127905,127906,127908,127909,127912,127913,127915,127916,127919],{},[32,127903,127904],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[32,127907,127904],{},"内部必须拥有",[32,127910,127911],{},"\u003Ctr>","标签，一般位于第一行，",[32,127914,127904],{},"比",[32,127917,127918],{},"\u003Cth>","范围广",[19,127921,127922,127925],{},[32,127923,127924],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127927,127929],{"id":127928},"_52-合并单元格","5.2 合并单元格",[19,127931,127932],{},"（1）合并单元格方式：",[19,127934,127935],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127937,127938],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127940,127941],{},"（2）目标单元格：",[19,127943,127944],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127946,127947],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127949,127951],{"id":127950},"_53-列表标签","5.3 列表标签",[19,127953,127954],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127956,127957],{},"①无序列表：",[3317,127959],{"style":127846,"src":127960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127962,127963],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127965,127966,127969,127970,127973,127974,127976],{},[32,127967,127968],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[32,127971,127972],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[32,127975,127968],{},"中输入其他标签或文字是不对的",[19,127978,127979,127981],{},[32,127980,127972],{},"之间相当于一个容器，可以容纳所有元素",[19,127983,127984],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127986,127987],{},"在css中去除前边的小圆点采用如下代码:",[58,127989,127993],{"className":127990,"code":127991,"language":127992,"meta":63,"style":63},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[32,127994,127995],{"__ignoreMap":63},[67,127996,127997,128000],{"class":69,"line":70},[67,127998,127999],{"class":262},"list-style",[67,128001,128002],{"class":73},": none;\n",[19,128004,128005],{},"②有序列表：",[3317,128007],{"style":127846,"src":128008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128010,128011],{},"③自定义列表：",[3317,128013],{"style":127846,"src":128014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3317,128016],{"style":127846,"src":128017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128019,128021],{"id":128020},"_54-表单标签","5.4 表单标签",[19,128023,128024],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128026,128027,128028,128031],{},"（1）表单域：包含单元素的区域，",[32,128029,128030],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3317,128033],{"style":127846,"src":128034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128036,128037],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128039,128040],{},"表单元素提交必须有name属性",[19,128042,128043],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128045,128046],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128048,78986,128049,128052],{},[32,128050,128051],{},"\u003Cinput>","输入表单元素",[3317,128054],{"style":127846,"src":128055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3317,128057],{"style":127846,"src":128058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128060,128061,128062],{},"单选按钮：",[32,128063,128064],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3317,128066],{"style":127846,"src":128067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128069,128070],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3317,128072],{"style":127846,"src":128073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128075,128076,128079],{},[2144,128077,128078],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128081,128082],{},"②select下拉表单元素：可以节约页面控件",[3317,128084],{"style":127846,"src":128085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128087,128088,15593,128090,128093,128094,128096,128097,128099],{},[2144,128089,2031],{},[32,128091,128092],{},"\u003Cselect>","中至少包含一对",[32,128095,104402],{},"；在",[32,128098,104402],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128101,128102,128103,128106],{},"③",[32,128104,128105],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3317,128108],{"style":127846,"src":128109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128111,128112],{},"3行20列",[14,128114,128116,128117,104382],{"id":128115},"_55-lable标签","5.5 ",[32,128118,128119],{},"\u003Clable>",[19,128121,128122,128123,128125,128126,128128],{},"它不是表单标签，但常常与表单标签搭配使用，",[32,128124,128119],{},"标签用于绑定一个表单标签，当点击",[32,128127,128119],{},"标签内的文本",[19,128130,128131],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3317,128133],{"style":127846,"src":128134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3317,128136],{"style":127846,"src":128137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128139,128141],{"id":128140},"_56-实例","5.6 实例",[3317,128143],{"style":127846,"src":128144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1903,128146,128147],{},"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":63,"searchDepth":191,"depth":191,"links":128149},[128150,128151,128152,128153,128154,128156],{"id":127871,"depth":191,"text":127872},{"id":127928,"depth":191,"text":127929},{"id":127950,"depth":191,"text":127951},{"id":128020,"depth":191,"text":128021},{"id":128115,"depth":191,"text":128155},"5.5 \u003Clable>标签",{"id":128140,"depth":191,"text":128141},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127863,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128163,"title":128164,"body":128165,"description":25173,"extension":1930,"meta":128714,"navigation":630,"path":128715,"seo":128716,"stem":128717,"__hash__":128718},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128166,"toc":128689},[128167,128170,128174,128177,128180,128184,128187,128190,128193,128196,128199,128202,128205,128209,128212,128216,128219,128222,128225,128229,128232,128235,128238,128244,128247,128250,128253,128256,128259,128262,128265,128298,128302,128305,128308,128311,128315,128318,128321,128324,128327,128330,128334,128337,128340,128343,128347,128350,128354,128357,128361,128364,128369,128373,128376,128380,128383,128386,128389,128392,128419,128422,128426,128429,128432,128437,128440,128443,128447,128450,128455,128458,128461,128464,128468,128471,128474,128477,128481,128484,128487,128490,128494,128498,128501,128541,128544,128548,128555,128558,128562,128565,128611,128615,128618,128621,128624,128652,128656,128659,128686],[10,128168,128164],{"id":128169},"_6-css语法与文本样式",[14,128171,128173],{"id":128172},"_61-css语法规范","6.1 css语法规范",[19,128175,128176],{},"由两部分组成，选择器及一条或多条声明",[3317,128178],{"style":127846,"src":128179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128181,128182],{},[2144,128183,2031],{},[19,128185,128186],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128188,128189],{},"②属性与属性值以“键值对”的形式出现",[19,128191,128192],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128194,128195],{},"④属性和属性值之间用英文“;”分开",[3317,128197],{"style":127846,"src":128198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3317,128200],{"style":127846,"src":128201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3317,128203],{"style":127846,"src":128204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128206,128208],{"id":128207},"_62-css选择器","6.2 css选择器",[19,128210,128211],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[391,128213,128215],{"id":128214},"_621-标签选择器","6.2.1 标签选择器",[19,128217,128218],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128220,128221],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3317,128223],{"style":127846,"src":128224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[391,128226,128228],{"id":128227},"_622-类选择器","6.2.2 类选择器",[19,128230,128231],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128233,128234],{},"②样例",[3317,128236],{"style":127846,"src":128237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128239,128240,128241,128243],{},"③ ",[2144,128242,128078],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128245,128246],{},"可以理解为给这个标签起了个名字，来表示；",[19,128248,128249],{},"长名称或词组可以使用横线来为选择器命名；",[19,128251,128252],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128254,128255],{},"命名要有意义；",[3317,128257],{"style":127846,"src":128258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128260,128261],{},"类选择器也可以指定特殊的元素p.center{}",[19,128263,128264],{},"p.center和.center都对",[58,128266,128268],{"className":127990,"code":128267,"language":127992,"meta":63,"style":63},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[32,128269,128270,128275,128284,128294],{"__ignoreMap":63},[67,128271,128272],{"class":69,"line":70},[67,128273,128274],{"class":2058},"\u002F* 类选择器指定特殊元素 *\u002F\n",[67,128276,128277,128279,128282],{"class":69,"line":191},[67,128278,19],{"class":262},[67,128280,128281],{"class":110},".center",[67,128283,17369],{"class":73},[67,128285,128286,128288,128290,128292],{"class":69,"line":202},[67,128287,72286],{"class":77},[67,128289,53203],{"class":73},[67,128291,53358],{"class":77},[67,128293,3148],{"class":73},[67,128295,128296],{"class":69,"line":641},[67,128297,3419],{"class":73},[391,128299,128301],{"id":128300},"_623-多类名使用","6.2.3 多类名使用",[19,128303,128304],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3317,128306],{"style":127846,"src":128307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128309,128310],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[391,128312,128314],{"id":128313},"_624-id选择器","6.2.4 id选择器",[19,128316,128317],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128319,128320],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3317,128322],{"style":127846,"src":128323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128325,128326],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128328,128329],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[391,128331,128333],{"id":128332},"_625-通配符选择器","6.2.5 通配符选择器",[19,128335,128336],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128338,128339],{},"* {",[19,128341,128342],{},"color=\"red\"}",[391,128344,128346],{"id":128345},"_626-总结","6.2.6 总结",[3317,128348],{"style":127846,"src":128349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128351,128353],{"id":128352},"_63-css字体属性","6.3 css字体属性",[19,128355,128356],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[391,128358,128360],{"id":128359},"_631-字体系列","6.3.1 字体系列",[19,128362,128363],{},"font-family: '宋体';",[19,128365,128366,128368],{},[2144,128367,2031],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[391,128370,128372],{"id":128371},"_632-字体大小","6.3.2 字体大小",[19,128374,128375],{},"font-size: 20px",[19,128377,128378,28259],{},[2144,128379,128078],{},[19,128381,128382],{},"①px（像素）大小是网页的最常用单位",[19,128384,128385],{},"②谷歌浏览器默认为16px",[19,128387,128388],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128390,128391],{},"④可以给body指定整个页面的大小：会自动引用",[58,128393,128395],{"className":127990,"code":128394,"language":127992,"meta":63,"style":63},"body {\n  font-size: 16px;\n}\n",[32,128396,128397,128403,128415],{"__ignoreMap":63},[67,128398,128399,128401],{"class":69,"line":70},[67,128400,53565],{"class":262},[67,128402,17369],{"class":73},[67,128404,128405,128407,128409,128411,128413],{"class":69,"line":191},[67,128406,72386],{"class":77},[67,128408,53203],{"class":73},[67,128410,2590],{"class":77},[67,128412,53258],{"class":84},[67,128414,3148],{"class":73},[67,128416,128417],{"class":69,"line":202},[67,128418,3419],{"class":73},[19,128420,128421],{},"⑤标题标签比较特殊，需要单独指定大小",[391,128423,128425],{"id":128424},"_633-字体粗细","6.3.3 字体粗细",[19,128427,128428],{},"font-weight: bold;",[19,128430,128431],{},"font-weight: 100；",[19,128433,128434,128436],{},[2144,128435,2031],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128438,128439],{},"font-weight= 400;",[19,128441,128442],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[391,128444,128446],{"id":128445},"_634-文字样式","6.3.4 文字样式",[19,128448,128449],{},"font-style: normal；",[19,128451,128452,28259],{},[2144,128453,128454],{},"属性值",[19,128456,128457],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128459,128460],{},"②italic：浏览器会显示斜体的字体样式",[3317,128462],{"style":127846,"src":128463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[391,128465,128467],{"id":128466},"_635-字体符合属性","6.3.5 字体符合属性",[3317,128469],{"style":127846,"src":128470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3317,128472],{"style":127846,"src":128473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128475,128476],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128478,128479,28259],{},[2144,128480,128078],{},[19,128482,128483],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128485,128486],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128488,128489],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128491,128493],{"id":128492},"_64-css-test文本属性","6.4 css test文本属性",[391,128495,128497],{"id":128496},"_641-文本颜色","6.4.1 文本颜色",[19,128499,128500],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[58,128502,128504],{"className":127990,"code":128503,"language":127992,"meta":63,"style":63},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[32,128505,128506,128511,128517,128527,128532,128537],{"__ignoreMap":63},[67,128507,128508],{"class":69,"line":70},[67,128509,128510],{"class":2058},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[67,128512,128513,128515],{"class":69,"line":191},[67,128514,19],{"class":262},[67,128516,17369],{"class":73},[67,128518,128519,128521,128523,128525],{"class":69,"line":202},[67,128520,72665],{"class":77},[67,128522,53203],{"class":73},[67,128524,59182],{"class":77},[67,128526,3148],{"class":73},[67,128528,128529],{"class":69,"line":641},[67,128530,128531],{"class":2058},"  \u002F* color: #ff0000; *\u002F\n",[67,128533,128534],{"class":69,"line":655},[67,128535,128536],{"class":2058},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[67,128538,128539],{"class":69,"line":660},[67,128540,3419],{"class":73},[3317,128542],{"style":127846,"src":128543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[391,128545,128547],{"id":128546},"_642-对齐文本","6.4.2 对齐文本",[19,128549,128550,128551,128554],{},"text-align属于用于设置元素内文本内容的 ",[2144,128552,128553],{},"水平对齐"," 方式",[19,128556,128557],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[391,128559,128561],{"id":128560},"_643-装饰文本","6.4.3 装饰文本",[19,128563,128564],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[58,128566,128568],{"className":127990,"code":128567,"language":127992,"meta":63,"style":63},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[32,128569,128570,128576,128586,128590,128596,128607],{"__ignoreMap":63},[67,128571,128572,128574],{"class":69,"line":70},[67,128573,2230],{"class":262},[67,128575,17369],{"class":73},[67,128577,128578,128580,128582,128584],{"class":69,"line":191},[67,128579,72262],{"class":77},[67,128581,53203],{"class":73},[67,128583,56498],{"class":77},[67,128585,3148],{"class":73},[67,128587,128588],{"class":69,"line":202},[67,128589,3419],{"class":73},[67,128591,128592,128594],{"class":69,"line":641},[67,128593,19],{"class":262},[67,128595,17369],{"class":73},[67,128597,128598,128600,128602,128605],{"class":69,"line":655},[67,128599,72262],{"class":77},[67,128601,53203],{"class":73},[67,128603,128604],{"class":77},"underline",[67,128606,3148],{"class":73},[67,128608,128609],{"class":69,"line":660},[67,128610,3419],{"class":73},[391,128612,128614],{"id":128613},"_644-文本缩进","6.4.4 文本缩进",[19,128616,128617],{},"实现文本的第一行首行缩进自己指定的距离",[19,128619,128620],{},"20px往右边走；-20px往左边走",[19,128622,128623],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[58,128625,128627],{"className":127990,"code":128626,"language":127992,"meta":63,"style":63},"p {\n  text-indent: 2em;\n}\n",[32,128628,128629,128635,128648],{"__ignoreMap":63},[67,128630,128631,128633],{"class":69,"line":70},[67,128632,19],{"class":262},[67,128634,17369],{"class":73},[67,128636,128637,128640,128642,128644,128646],{"class":69,"line":191},[67,128638,128639],{"class":77},"  text-indent",[67,128641,53203],{"class":73},[67,128643,2077],{"class":77},[67,128645,25350],{"class":84},[67,128647,3148],{"class":73},[67,128649,128650],{"class":69,"line":202},[67,128651,3419],{"class":73},[391,128653,128655],{"id":128654},"_645-行间距","6.4.5 行间距",[19,128657,128658],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[58,128660,128662],{"className":127990,"code":128661,"language":127992,"meta":63,"style":63},"p {\n  line-height: 1.6;\n}\n",[32,128663,128664,128670,128682],{"__ignoreMap":63},[67,128665,128666,128668],{"class":69,"line":70},[67,128667,19],{"class":262},[67,128669,17369],{"class":73},[67,128671,128672,128675,128677,128680],{"class":69,"line":191},[67,128673,128674],{"class":77},"  line-height",[67,128676,53203],{"class":73},[67,128678,128679],{"class":77},"1.6",[67,128681,3148],{"class":73},[67,128683,128684],{"class":69,"line":202},[67,128685,3419],{"class":73},[1903,128687,128688],{},"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":63,"searchDepth":191,"depth":191,"links":128690},[128691,128692,128700,128707],{"id":128172,"depth":191,"text":128173},{"id":128207,"depth":191,"text":128208,"children":128693},[128694,128695,128696,128697,128698,128699],{"id":128214,"depth":202,"text":128215},{"id":128227,"depth":202,"text":128228},{"id":128300,"depth":202,"text":128301},{"id":128313,"depth":202,"text":128314},{"id":128332,"depth":202,"text":128333},{"id":128345,"depth":202,"text":128346},{"id":128352,"depth":191,"text":128353,"children":128701},[128702,128703,128704,128705,128706],{"id":128359,"depth":202,"text":128360},{"id":128371,"depth":202,"text":128372},{"id":128424,"depth":202,"text":128425},{"id":128445,"depth":202,"text":128446},{"id":128466,"depth":202,"text":128467},{"id":128492,"depth":191,"text":128493,"children":128708},[128709,128710,128711,128712,128713],{"id":128496,"depth":202,"text":128497},{"id":128546,"depth":202,"text":128547},{"id":128560,"depth":202,"text":128561},{"id":128613,"depth":202,"text":128614},{"id":128654,"depth":202,"text":128655},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128164,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128720,"title":128721,"body":128722,"description":25173,"extension":1930,"meta":129371,"navigation":630,"path":129372,"seo":129373,"stem":129374,"__hash__":129375},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128723,"toc":129352},[128724,128727,128731,128735,128795,128799,128809,128812,128815,128819,128844,128848,128851,128854,128857,128860,128863,128867,128870,128873,128915,128918,128944,128950,128953,128957,128961,128967,128970,128973,128976,128979,128982,128985,129030,129034,129037,129040,129044,129048,129077,129080,129085,129088,129091,129094,129097,129101,129105,129108,129110,129113,129117,129120,129124,129127,129130,129133,129137,129141,129147,129157,129160,129163,129166,129169,129172,129295,129303,129311,129349],[10,128725,128721],{"id":128726},"_7-css引入方式与选择器进阶",[14,128728,128730],{"id":128729},"_71-css引入方式","7.1 css引入方式",[391,128732,128734],{"id":128733},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[58,128736,128740],{"className":128737,"code":128738,"language":128739,"meta":63,"style":63},"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",[32,128741,128742,128750,128757,128769,128782,128787],{"__ignoreMap":63},[67,128743,128744,128746,128748],{"class":69,"line":70},[67,128745,259],{"class":73},[67,128747,1903],{"class":262},[67,128749,323],{"class":73},[67,128751,128752,128755],{"class":69,"line":191},[67,128753,128754],{"class":262},"  h1",[67,128756,17369],{"class":73},[67,128758,128759,128762,128764,128767],{"class":69,"line":202},[67,128760,128761],{"class":77},"    color",[67,128763,53203],{"class":73},[67,128765,128766],{"class":77},"blue",[67,128768,3148],{"class":73},[67,128770,128771,128774,128776,128778,128780],{"class":69,"line":641},[67,128772,128773],{"class":77},"    font-size",[67,128775,53203],{"class":73},[67,128777,2789],{"class":77},[67,128779,53258],{"class":84},[67,128781,3148],{"class":73},[67,128783,128784],{"class":69,"line":655},[67,128785,128786],{"class":73},"  }\n",[67,128788,128789,128791,128793],{"class":69,"line":660},[67,128790,376],{"class":73},[67,128792,1903],{"class":262},[67,128794,323],{"class":73},[19,128796,128797,28259],{},[2144,128798,128078],{},[19,128800,78986,128801,128804,128805,128808],{},[32,128802,128803],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[32,128806,128807],{},"\u003Chead>","标签中",[19,128810,128811],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128813,128814],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[391,128816,128818],{"id":128817},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[58,128820,128822],{"className":128737,"code":128821,"language":128739,"meta":63,"style":63},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[32,128823,128824],{"__ignoreMap":63},[67,128825,128826,128828,128830,128832,128834,128837,128840,128842],{"class":69,"line":70},[67,128827,259],{"class":73},[67,128829,19],{"class":262},[67,128831,64386],{"class":110},[67,128833,85],{"class":73},[67,128835,128836],{"class":114},"\"color: red; font-size: 16px;\"",[67,128838,128839],{"class":73},">这是一个段落\u003C\u002F",[67,128841,19],{"class":262},[67,128843,323],{"class":73},[19,128845,128846,28259],{},[2144,128847,128078],{},[19,128849,128850],{},"①style其实就是标签的属性",[19,128852,128853],{},"②在双引号中间，写法要符合css规范",[19,128855,128856],{},"③可以控制当前的标签设置样式",[19,128858,128859],{},"④书写繁琐，简单时才用",[19,128861,128862],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[391,128864,128866],{"id":128865},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128868,128869],{},"使用最多，单独建一个css文件，然后html引用",[19,128871,128872],{},"①css文件部分： style.css",[58,128874,128876],{"className":127990,"code":128875,"language":127992,"meta":63,"style":63},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[32,128877,128878,128883,128889,128899,128911],{"__ignoreMap":63},[67,128879,128880],{"class":69,"line":70},[67,128881,128882],{"class":2058},"\u002F* style.css *\u002F\n",[67,128884,128885,128887],{"class":69,"line":191},[67,128886,10],{"class":262},[67,128888,17369],{"class":73},[67,128890,128891,128893,128895,128897],{"class":69,"line":202},[67,128892,72665],{"class":77},[67,128894,53203],{"class":73},[67,128896,128766],{"class":77},[67,128898,3148],{"class":73},[67,128900,128901,128903,128905,128907,128909],{"class":69,"line":641},[67,128902,72386],{"class":77},[67,128904,53203],{"class":73},[67,128906,2789],{"class":77},[67,128908,53258],{"class":84},[67,128910,3148],{"class":73},[67,128912,128913],{"class":69,"line":655},[67,128914,3419],{"class":73},[19,128916,128917],{},"②html部分",[58,128919,128921],{"className":128737,"code":128920,"language":128739,"meta":63,"style":63},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[32,128922,128923],{"__ignoreMap":63},[67,128924,128925,128927,128929,128931,128933,128935,128937,128939,128942],{"class":69,"line":70},[67,128926,259],{"class":73},[67,128928,70765],{"class":262},[67,128930,70768],{"class":110},[67,128932,85],{"class":73},[67,128934,70773],{"class":114},[67,128936,62818],{"class":110},[67,128938,85],{"class":73},[67,128940,128941],{"class":114},"\"style.css\"",[67,128943,323],{"class":73},[19,128945,128946,128949],{},[32,128947,128948],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128951,128952],{},"ctrl+0回到页面原来大小",[14,128954,128956],{"id":128955},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[391,128958,128960],{"id":128959},"_721-快速生成html","7.2.1 快速生成html",[19,128962,128963,128964],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[32,128965,128966],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128968,128969],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128971,128972],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128974,128975],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128977,128978],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128980,128981],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128983,128984],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[58,128986,128988],{"className":128737,"code":128987,"language":128739,"meta":63,"style":63},"\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",[32,128989,128990,128995,129000,129005,129010,129015,129020,129025],{"__ignoreMap":63},[67,128991,128992],{"class":69,"line":70},[67,128993,128994],{"class":2058},"\u003C!-- Emmet 语法示例 -->\n",[67,128996,128997],{"class":69,"line":191},[67,128998,128999],{"class":2058},"\u003C!-- div*3        → 生成3个div -->\n",[67,129001,129002],{"class":69,"line":202},[67,129003,129004],{"class":2058},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[67,129006,129007],{"class":69,"line":641},[67,129008,129009],{"class":2058},"\u003C!-- div+p        → 兄弟div和p -->\n",[67,129011,129012],{"class":69,"line":655},[67,129013,129014],{"class":2058},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[67,129016,129017],{"class":69,"line":660},[67,129018,129019],{"class":2058},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[67,129021,129022],{"class":69,"line":665},[67,129023,129024],{"class":2058},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[67,129026,129027],{"class":69,"line":677},[67,129028,129029],{"class":2058},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[391,129031,129033],{"id":129032},"_722-快速生成css","7.2.2 快速生成css",[19,129035,129036],{},"简写开头",[19,129038,129039],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129041,129043],{"id":129042},"_73-css复合选择器","7.3 css复合选择器",[391,129045,129047],{"id":129046},"_731-后代选择器","7.3.1 后代选择器",[58,129049,129051],{"className":127990,"code":129050,"language":127992,"meta":63,"style":63},".parent .child {\n  color: blue;\n}\n",[32,129052,129053,129063,129073],{"__ignoreMap":63},[67,129054,129055,129058,129061],{"class":69,"line":70},[67,129056,129057],{"class":110},".parent",[67,129059,129060],{"class":110}," .child",[67,129062,17369],{"class":73},[67,129064,129065,129067,129069,129071],{"class":69,"line":191},[67,129066,72665],{"class":77},[67,129068,53203],{"class":73},[67,129070,128766],{"class":77},[67,129072,3148],{"class":73},[67,129074,129075],{"class":69,"line":202},[67,129076,3419],{"class":73},[19,129078,129079],{},"元素1 元素2 {样式声明}",[19,129081,129082],{},[2144,129083,129084],{},"注意点:",[19,129086,129087],{},"①元素1和元素2中间用空格隔开",[19,129089,129090],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129092,129093],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129095,129096],{},"④元素1和元素2可以是任意基础选择器",[391,129098,129100],{"id":129099},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129102,129103],{},[2144,129104,129084],{},[19,129106,129107],{},"①元素1和元素2中间用大于号隔开",[19,129109,129090],{},[19,129111,129112],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[391,129114,129116],{"id":129115},"_733-并集选择器","7.3.3 并集选择器",[19,129118,129119],{},"元素1，元素2 {样式声明}",[19,129121,129122],{},[2144,129123,129084],{},[19,129125,129126],{},"①元素1和元素2中间用逗号隔开",[19,129128,129129],{},"②逗号可以理解为和的意思",[19,129131,129132],{},"③并集选择器通常用于集体声明",[391,129134,129136],{"id":129135},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129138,129139],{},[2144,129140,129084],{},[19,129142,129143,129144,129146],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70765,129145],{},"－:visited－:hover－:active。",[19,129148,129149,129150,129153,129154,27530],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129151,129152],"hover",{}," 、 ",[129155,129156],"first-child",{},[19,129158,129159],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129161,129162],{},"link对没访问的进行设置",[19,129164,129165],{},"vistied对已访问的进行改变",[19,129167,129168],{},"hover鼠标经过就会变",[19,129170,129171],{},"active常按(点)就会变",[58,129173,129175],{"className":127990,"code":129174,"language":127992,"meta":63,"style":63},"\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",[32,129176,129177,129182,129191,129201,129211,129215,129224,129235,129239,129247,129257,129267,129271,129280,129291],{"__ignoreMap":63},[67,129178,129179],{"class":69,"line":70},[67,129180,129181],{"class":2058},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[67,129183,129184,129186,129189],{"class":69,"line":191},[67,129185,2230],{"class":262},[67,129187,129188],{"class":110},":link",[67,129190,17369],{"class":73},[67,129192,129193,129195,129197,129199],{"class":69,"line":202},[67,129194,72665],{"class":77},[67,129196,53203],{"class":73},[67,129198,64129],{"class":77},[67,129200,3148],{"class":73},[67,129202,129203,129205,129207,129209],{"class":69,"line":641},[67,129204,72262],{"class":77},[67,129206,53203],{"class":73},[67,129208,56498],{"class":77},[67,129210,3148],{"class":73},[67,129212,129213],{"class":69,"line":655},[67,129214,3419],{"class":73},[67,129216,129217,129219,129222],{"class":69,"line":660},[67,129218,2230],{"class":262},[67,129220,129221],{"class":110},":visited",[67,129223,17369],{"class":73},[67,129225,129226,129228,129230,129233],{"class":69,"line":665},[67,129227,72665],{"class":77},[67,129229,53203],{"class":73},[67,129231,129232],{"class":77},"purple",[67,129234,3148],{"class":73},[67,129236,129237],{"class":69,"line":677},[67,129238,3419],{"class":73},[67,129240,129241,129243,129245],{"class":69,"line":683},[67,129242,2230],{"class":262},[67,129244,62701],{"class":110},[67,129246,17369],{"class":73},[67,129248,129249,129251,129253,129255],{"class":69,"line":689},[67,129250,72665],{"class":77},[67,129252,53203],{"class":73},[67,129254,56650],{"class":77},[67,129256,3148],{"class":73},[67,129258,129259,129261,129263,129265],{"class":69,"line":694},[67,129260,72262],{"class":77},[67,129262,53203],{"class":73},[67,129264,128604],{"class":77},[67,129266,3148],{"class":73},[67,129268,129269],{"class":69,"line":700},[67,129270,3419],{"class":73},[67,129272,129273,129275,129278],{"class":69,"line":706},[67,129274,2230],{"class":262},[67,129276,129277],{"class":110},":active",[67,129279,17369],{"class":73},[67,129281,129282,129284,129286,129289],{"class":69,"line":712},[67,129283,72665],{"class":77},[67,129285,53203],{"class":73},[67,129287,129288],{"class":77},"green",[67,129290,3148],{"class":73},[67,129292,129293],{"class":69,"line":717},[67,129294,3419],{"class":73},[391,129296,129298,129299,129302],{"id":129297},"_735-伪类选择器","7.3.5 ",[129300,129301],"focus",{},"伪类选择器",[19,129304,129305,129307,129308,129310],{},[129300,129306],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[32,129309,128051],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[58,129312,129314],{"className":127990,"code":129313,"language":127992,"meta":63,"style":63},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[32,129315,129316,129324,129335,129345],{"__ignoreMap":63},[67,129317,129318,129320,129322],{"class":69,"line":70},[67,129319,55583],{"class":262},[67,129321,63660],{"class":110},[67,129323,17369],{"class":73},[67,129325,129326,129329,129331,129333],{"class":69,"line":191},[67,129327,129328],{"class":77},"  border-color",[67,129330,53203],{"class":73},[67,129332,56650],{"class":77},[67,129334,3148],{"class":73},[67,129336,129337,129339,129341,129343],{"class":69,"line":202},[67,129338,72558],{"class":77},[67,129340,53203],{"class":73},[67,129342,56498],{"class":77},[67,129344,3148],{"class":73},[67,129346,129347],{"class":69,"line":641},[67,129348,3419],{"class":73},[1903,129350,129351],{},"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":63,"searchDepth":191,"depth":191,"links":129353},[129354,129359,129363],{"id":128729,"depth":191,"text":128730,"children":129355},[129356,129357,129358],{"id":128733,"depth":202,"text":128734},{"id":128817,"depth":202,"text":128818},{"id":128865,"depth":202,"text":128866},{"id":128955,"depth":191,"text":128956,"children":129360},[129361,129362],{"id":128959,"depth":202,"text":128960},{"id":129032,"depth":202,"text":129033},{"id":129042,"depth":191,"text":129043,"children":129364},[129365,129366,129367,129368,129369],{"id":129046,"depth":202,"text":129047},{"id":129099,"depth":202,"text":129100},{"id":129115,"depth":202,"text":129116},{"id":129135,"depth":202,"text":129136},{"id":129297,"depth":202,"text":129370},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128721,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129377,"title":129378,"body":129379,"description":25173,"extension":1930,"meta":131302,"navigation":630,"path":131303,"seo":131304,"stem":131305,"__hash__":131306},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129380,"toc":131276},[129381,129384,129388,129397,129401,129427,129432,129435,129438,129441,129444,129448,129451,129461,129469,129473,129508,129513,129516,129519,129522,129525,129529,129532,129541,129545,129558,129563,129566,129569,129572,129576,129579,129583,129586,129641,129644,129675,129678,129732,129736,129739,129905,130028,130031,130034,130037,130040,130044,130047,130051,130054,130057,130061,130064,130095,130122,130150,130153,130157,130183,130226,130230,130324,130327,130354,130357,130360,130363,130366,130369,130372,130375,130378,130381,130385,130442,130469,130473,130521,130525,130566,130568,130571,130574,130577,130580,130584,130676,130679,130682,130685,130689,130812,131013,131017,131021,131024,131027,131030,131034,131037,131040,131065,131068,131071,131074,131077,131080,131084,131092,131154,131157,131215,131218,131221,131224,131227,131230,131233,131236,131273],[10,129382,129378],{"id":129383},"_8-css显示模式与背景特性",[14,129385,129387],{"id":129386},"_81-css元素显示模式","8.1 css元素显示模式",[19,129389,129390,129391,129393,129394,129396],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[32,129392,127601],{},"自己占一行，比如一行可以放多个",[32,129395,127604],{},"，HTML 元素一般分为块元素和行内元素两种类型",[391,129398,129400],{"id":129399},"_811-块元素","8.1.1 块元素",[19,129402,129403,129404,129406,129407,2204,129410,2204,129412,2204,129414,2204,129417,2204,129420,129423,129424,129426],{},"常见的块元素有",[32,129405,127505],{},"~",[32,129408,129409],{},"\u003Ch6>",[32,129411,127531],{},[32,129413,127601],{},[32,129415,129416],{},"\u003Cul>",[32,129418,129419],{},"\u003Col>",[32,129421,129422],{},"\u003Cli>","等，其中 ",[32,129425,127601],{}," 标签是最典型的块元素",[19,129428,129429],{},[2144,129430,129431],{},"块级元素的特点：",[19,129433,129434],{},"① 比较霸道，自己独占一行。",[19,129436,129437],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129439,129440],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129442,129443],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129445,129446],{},[2144,129447,2031],{},[19,129449,129450],{},"①文字类的元素内不能使用块级元素",[19,129452,79009,129453,129455,129456,129458,129459],{},[32,129454,127531],{}," 标签主要用于存放文字，因此 ",[32,129457,127531],{}," 里面不能放块级元素，特别是不能放",[32,129460,127601],{},[19,129462,129463,129464,129406,129466,129468],{},"⑥同理， ",[32,129465,127505],{},[32,129467,129409],{},"等都是文字类块级标签，里面也不能放其他块级元素",[391,129470,129472],{"id":129471},"_812-行内元素","8.1.2 行内元素",[19,129474,129475,129476,2204,129478,2204,129481,2204,129484,2204,129487,2204,129490,2204,129493,2204,129496,2204,129499,2204,129502,129504,129505,129507],{},"常见的行内元素有 ",[32,129477,127763],{},[32,129479,129480],{},"\u003Cstrong>",[32,129482,129483],{},"\u003Cb>",[32,129485,129486],{},"\u003Cem>",[32,129488,129489],{},"\u003Ci>",[32,129491,129492],{},"\u003Cdel>",[32,129494,129495],{},"\u003Cs>",[32,129497,129498],{},"\u003Cins>",[32,129500,129501],{},"\u003Cu>",[32,129503,127604],{}," 等，其中 ",[32,129506,127604],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129509,129510],{},[2144,129511,129512],{},"特点：",[19,129514,129515],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129517,129518],{},"② 高、宽直接设置是无效的。",[19,129520,129521],{},"③ 默认宽度就是它本身内容的宽度。",[19,129523,129524],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129526,129527],{},[2144,129528,2031],{},[19,129530,129531],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129533,129534,129535,129537,129538,129540],{},"②特殊情况链接 ",[32,129536,127763],{}," 里面可以放块级元素，但是给 ",[32,129539,127763],{}," 转换一下块级模式最安全",[391,129542,129544],{"id":129543},"_813-行内块元素","8.1.3 行内块元素",[19,129546,129547,129548,2204,129551,2204,129554,129557],{},"在行内元素中有几个特殊的标签 —— ",[32,129549,129550],{},"\u003Cimg \u002F>",[32,129552,129553],{},"\u003Cinput \u002F>",[32,129555,129556],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129559,129560],{},[2144,129561,129562],{},"行内块元素的特点：",[19,129564,129565],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129567,129568],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129570,129571],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[391,129573,129575],{"id":129574},"_814-总结","8.1.4 总结",[3317,129577],{"style":127846,"src":129578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[391,129580,129582],{"id":129581},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129584,129585],{},"①转换为块元素：display:block;",[58,129587,129589],{"className":127990,"code":129588,"language":127992,"meta":63,"style":63},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[32,129590,129591,129596,129602,129613,129625,129637],{"__ignoreMap":63},[67,129592,129593],{"class":69,"line":70},[67,129594,129595],{"class":2058},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[67,129597,129598,129600],{"class":69,"line":191},[67,129599,2230],{"class":262},[67,129601,17369],{"class":73},[67,129603,129604,129607,129609,129611],{"class":69,"line":202},[67,129605,129606],{"class":77},"  display",[67,129608,53203],{"class":73},[67,129610,62630],{"class":77},[67,129612,3148],{"class":73},[67,129614,129615,129617,129619,129621,129623],{"class":69,"line":641},[67,129616,72328],{"class":77},[67,129618,53203],{"class":73},[67,129620,2302],{"class":77},[67,129622,53258],{"class":84},[67,129624,3148],{"class":73},[67,129626,129627,129629,129631,129633,129635],{"class":69,"line":655},[67,129628,72548],{"class":77},[67,129630,53203],{"class":73},[67,129632,2392],{"class":77},[67,129634,53258],{"class":84},[67,129636,3148],{"class":73},[67,129638,129639],{"class":69,"line":660},[67,129640,3419],{"class":73},[19,129642,129643],{},"②转换为行内元素：display:inline;",[58,129645,129647],{"className":127990,"code":129646,"language":127992,"meta":63,"style":63},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[32,129648,129649,129654,129660,129671],{"__ignoreMap":63},[67,129650,129651],{"class":69,"line":70},[67,129652,129653],{"class":2058},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[67,129655,129656,129658],{"class":69,"line":191},[67,129657,53377],{"class":262},[67,129659,17369],{"class":73},[67,129661,129662,129664,129666,129669],{"class":69,"line":202},[67,129663,129606],{"class":77},[67,129665,53203],{"class":73},[67,129667,129668],{"class":77},"inline",[67,129670,3148],{"class":73},[67,129672,129673],{"class":69,"line":641},[67,129674,3419],{"class":73},[19,129676,129677],{},"③转换为行内块：display:inline-block;",[58,129679,129681],{"className":127990,"code":129680,"language":127992,"meta":63,"style":63},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[32,129682,129683,129688,129694,129704,129716,129728],{"__ignoreMap":63},[67,129684,129685],{"class":69,"line":70},[67,129686,129687],{"class":2058},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[67,129689,129690,129692],{"class":69,"line":191},[67,129691,67],{"class":262},[67,129693,17369],{"class":73},[67,129695,129696,129698,129700,129702],{"class":69,"line":202},[67,129697,129606],{"class":77},[67,129699,53203],{"class":73},[67,129701,74143],{"class":77},[67,129703,3148],{"class":73},[67,129705,129706,129708,129710,129712,129714],{"class":69,"line":641},[67,129707,72328],{"class":77},[67,129709,53203],{"class":73},[67,129711,2601],{"class":77},[67,129713,53258],{"class":84},[67,129715,3148],{"class":73},[67,129717,129718,129720,129722,129724,129726],{"class":69,"line":655},[67,129719,72548],{"class":77},[67,129721,53203],{"class":73},[67,129723,2939],{"class":77},[67,129725,53258],{"class":84},[67,129727,3148],{"class":73},[67,129729,129730],{"class":69,"line":660},[67,129731,3419],{"class":73},[391,129733,129735],{"id":129734},"_816-小米侧边栏","8.1.6 小米侧边栏",[3317,129737],{"style":127846,"src":129738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[58,129740,129742],{"className":128737,"code":129741,"language":128739,"meta":63,"style":63},"\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",[32,129743,129744,129749,129764,129783,129802,129821,129840,129859,129878,129897],{"__ignoreMap":63},[67,129745,129746],{"class":69,"line":70},[67,129747,129748],{"class":2058},"\u003C!-- 小米侧边栏案例 -->\n",[67,129750,129751,129753,129755,129757,129759,129762],{"class":69,"line":191},[67,129752,259],{"class":73},[67,129754,53377],{"class":262},[67,129756,55248],{"class":110},[67,129758,85],{"class":73},[67,129760,129761],{"class":114},"\"sidebar\"",[67,129763,323],{"class":73},[67,129765,129766,129768,129770,129772,129774,129776,129779,129781],{"class":69,"line":202},[67,129767,328],{"class":73},[67,129769,2230],{"class":262},[67,129771,62818],{"class":110},[67,129773,85],{"class":73},[67,129775,62823],{"class":114},[67,129777,129778],{"class":73},">手机 电话卡\u003C\u002F",[67,129780,2230],{"class":262},[67,129782,323],{"class":73},[67,129784,129785,129787,129789,129791,129793,129795,129798,129800],{"class":69,"line":641},[67,129786,328],{"class":73},[67,129788,2230],{"class":262},[67,129790,62818],{"class":110},[67,129792,85],{"class":73},[67,129794,62823],{"class":114},[67,129796,129797],{"class":73},">电视 盒子\u003C\u002F",[67,129799,2230],{"class":262},[67,129801,323],{"class":73},[67,129803,129804,129806,129808,129810,129812,129814,129817,129819],{"class":69,"line":655},[67,129805,328],{"class":73},[67,129807,2230],{"class":262},[67,129809,62818],{"class":110},[67,129811,85],{"class":73},[67,129813,62823],{"class":114},[67,129815,129816],{"class":73},">笔记本 平板\u003C\u002F",[67,129818,2230],{"class":262},[67,129820,323],{"class":73},[67,129822,129823,129825,129827,129829,129831,129833,129836,129838],{"class":69,"line":660},[67,129824,328],{"class":73},[67,129826,2230],{"class":262},[67,129828,62818],{"class":110},[67,129830,85],{"class":73},[67,129832,62823],{"class":114},[67,129834,129835],{"class":73},">出行 穿戴\u003C\u002F",[67,129837,2230],{"class":262},[67,129839,323],{"class":73},[67,129841,129842,129844,129846,129848,129850,129852,129855,129857],{"class":69,"line":665},[67,129843,328],{"class":73},[67,129845,2230],{"class":262},[67,129847,62818],{"class":110},[67,129849,85],{"class":73},[67,129851,62823],{"class":114},[67,129853,129854],{"class":73},">智能 路由器\u003C\u002F",[67,129856,2230],{"class":262},[67,129858,323],{"class":73},[67,129860,129861,129863,129865,129867,129869,129871,129874,129876],{"class":69,"line":677},[67,129862,328],{"class":73},[67,129864,2230],{"class":262},[67,129866,62818],{"class":110},[67,129868,85],{"class":73},[67,129870,62823],{"class":114},[67,129872,129873],{"class":73},">健康 儿童\u003C\u002F",[67,129875,2230],{"class":262},[67,129877,323],{"class":73},[67,129879,129880,129882,129884,129886,129888,129890,129893,129895],{"class":69,"line":683},[67,129881,328],{"class":73},[67,129883,2230],{"class":262},[67,129885,62818],{"class":110},[67,129887,85],{"class":73},[67,129889,62823],{"class":114},[67,129891,129892],{"class":73},">耳机 音响\u003C\u002F",[67,129894,2230],{"class":262},[67,129896,323],{"class":73},[67,129898,129899,129901,129903],{"class":69,"line":689},[67,129900,376],{"class":73},[67,129902,53377],{"class":262},[67,129904,323],{"class":73},[58,129906,129908],{"className":127990,"code":129907,"language":127992,"meta":63,"style":63},".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",[32,129909,129910,129919,129929,129942,129954,129966,129978,129988,129999,130003,130013,130024],{"__ignoreMap":63},[67,129911,129912,129915,129917],{"class":69,"line":70},[67,129913,129914],{"class":110},".sidebar",[67,129916,3253],{"class":262},[67,129918,17369],{"class":73},[67,129920,129921,129923,129925,129927],{"class":69,"line":191},[67,129922,129606],{"class":77},[67,129924,53203],{"class":73},[67,129926,62630],{"class":77},[67,129928,3148],{"class":73},[67,129930,129931,129933,129935,129938,129940],{"class":69,"line":202},[67,129932,72328],{"class":77},[67,129934,53203],{"class":73},[67,129936,129937],{"class":77},"234",[67,129939,53258],{"class":84},[67,129941,3148],{"class":73},[67,129943,129944,129946,129948,129950,129952],{"class":69,"line":641},[67,129945,72548],{"class":77},[67,129947,53203],{"class":73},[67,129949,2443],{"class":77},[67,129951,53258],{"class":84},[67,129953,3148],{"class":73},[67,129955,129956,129958,129960,129962,129964],{"class":69,"line":655},[67,129957,128674],{"class":77},[67,129959,53203],{"class":73},[67,129961,2443],{"class":77},[67,129963,53258],{"class":84},[67,129965,3148],{"class":73},[67,129967,129968,129970,129972,129974,129976],{"class":69,"line":660},[67,129969,72583],{"class":77},[67,129971,53203],{"class":73},[67,129973,2939],{"class":77},[67,129975,53258],{"class":84},[67,129977,3148],{"class":73},[67,129979,129980,129982,129984,129986],{"class":69,"line":665},[67,129981,72665],{"class":77},[67,129983,53203],{"class":73},[67,129985,62603],{"class":77},[67,129987,3148],{"class":73},[67,129989,129990,129992,129994,129997],{"class":69,"line":677},[67,129991,72638],{"class":77},[67,129993,53203],{"class":73},[67,129995,129996],{"class":77},"#55585a",[67,129998,3148],{"class":73},[67,130000,130001],{"class":69,"line":683},[67,130002,3419],{"class":73},[67,130004,130005,130007,130009,130011],{"class":69,"line":689},[67,130006,129914],{"class":110},[67,130008,3253],{"class":262},[67,130010,62701],{"class":110},[67,130012,17369],{"class":73},[67,130014,130015,130017,130019,130022],{"class":69,"line":694},[67,130016,72638],{"class":77},[67,130018,53203],{"class":73},[67,130020,130021],{"class":77},"#ff6700",[67,130023,3148],{"class":73},[67,130025,130026],{"class":69,"line":700},[67,130027,3419],{"class":73},[3317,130029],{"style":127846,"src":130030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130032,130033],{},"行高=盒子高度：实现文字的垂直居中",[19,130035,130036],{},"原理讲解：",[3317,130038],{"style":127846,"src":130039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130041,130043],{"id":130042},"_82-css背景","8.2 css背景",[19,130045,130046],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[391,130048,130050],{"id":130049},"_821-背景颜色","8.2.1 背景颜色",[19,130052,130053],{},"background-color:颜色值;",[19,130055,130056],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[391,130058,130060],{"id":130059},"_822-背景图片","8.2.2 背景图片",[19,130062,130063],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[58,130065,130067],{"className":127990,"code":130066,"language":127992,"meta":63,"style":63},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[32,130068,130069,130075,130091],{"__ignoreMap":63},[67,130070,130071,130073],{"class":69,"line":70},[67,130072,53377],{"class":262},[67,130074,17369],{"class":73},[67,130076,130077,130080,130082,130084,130086,130089],{"class":69,"line":191},[67,130078,130079],{"class":77},"  background-image",[67,130081,53203],{"class":73},[67,130083,63487],{"class":77},[67,130085,854],{"class":73},[67,130087,130088],{"class":7033},"images\u002Fbg.png",[67,130090,4544],{"class":73},[67,130092,130093],{"class":69,"line":202},[67,130094,3419],{"class":73},[399,130096,130097,130106],{},[402,130098,130099],{},[405,130100,130101,130104],{},[408,130102,130103],{"align":410},"参数值",[408,130105,414],{"align":410},[419,130107,130108,130115],{},[405,130109,130110,130112],{},[424,130111,56498],{"align":410},[424,130113,130114],{"align":410},"无背景图（默认的）",[405,130116,130117,130119],{},[424,130118,63487],{"align":410},[424,130120,130121],{"align":410},"使用绝对或相对地址指定背景图像",[58,130123,130124],{"className":127990,"code":130066,"language":127992,"meta":63,"style":63},[32,130125,130126,130132,130146],{"__ignoreMap":63},[67,130127,130128,130130],{"class":69,"line":70},[67,130129,53377],{"class":262},[67,130131,17369],{"class":73},[67,130133,130134,130136,130138,130140,130142,130144],{"class":69,"line":191},[67,130135,130079],{"class":77},[67,130137,53203],{"class":73},[67,130139,63487],{"class":77},[67,130141,854],{"class":73},[67,130143,130088],{"class":7033},[67,130145,4544],{"class":73},[67,130147,130148],{"class":69,"line":202},[67,130149,3419],{"class":73},[19,130151,130152],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[391,130154,130156],{"id":130155},"_823-背景平铺","8.2.3 背景平铺",[58,130158,130160],{"className":127990,"code":130159,"language":127992,"meta":63,"style":63},"div {\n  background-repeat: no-repeat;\n}\n",[32,130161,130162,130168,130179],{"__ignoreMap":63},[67,130163,130164,130166],{"class":69,"line":70},[67,130165,53377],{"class":262},[67,130167,17369],{"class":73},[67,130169,130170,130173,130175,130177],{"class":69,"line":191},[67,130171,130172],{"class":77},"  background-repeat",[67,130174,53203],{"class":73},[67,130176,63497],{"class":77},[67,130178,3148],{"class":73},[67,130180,130181],{"class":69,"line":202},[67,130182,3419],{"class":73},[399,130184,130185,130193],{},[402,130186,130187],{},[405,130188,130189,130191],{},[408,130190,130103],{"align":410},[408,130192,414],{"align":410},[419,130194,130195,130203,130210,130218],{},[405,130196,130197,130200],{},[424,130198,130199],{"align":410},"repeat",[424,130201,130202],{"align":410},"背景图像在纵向和横向上平铺（默认的）",[405,130204,130205,130207],{},[424,130206,63497],{"align":410},[424,130208,130209],{"align":410},"背景图像不平铺",[405,130211,130212,130215],{},[424,130213,130214],{"align":410},"repeat-x",[424,130216,130217],{"align":410},"背景图像在横向上平铺",[405,130219,130220,130223],{},[424,130221,130222],{"align":410},"repeat-y",[424,130224,130225],{"align":410},"背景图像在纵向平铺",[391,130227,130229],{"id":130228},"_824-背景图片位置","8.2.4 背景图片位置",[58,130231,130233],{"className":127990,"code":130232,"language":127992,"meta":63,"style":63},"\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",[32,130234,130235,130240,130246,130260,130264,130269,130275,130291,130295,130300,130306,130320],{"__ignoreMap":63},[67,130236,130237],{"class":69,"line":70},[67,130238,130239],{"class":2058},"\u002F* 方位名词 *\u002F\n",[67,130241,130242,130244],{"class":69,"line":191},[67,130243,53377],{"class":262},[67,130245,17369],{"class":73},[67,130247,130248,130251,130253,130255,130258],{"class":69,"line":202},[67,130249,130250],{"class":77},"  background-position",[67,130252,53203],{"class":73},[67,130254,53358],{"class":77},[67,130256,130257],{"class":77}," top",[67,130259,3148],{"class":73},[67,130261,130262],{"class":69,"line":641},[67,130263,3419],{"class":73},[67,130265,130266],{"class":69,"line":655},[67,130267,130268],{"class":2058},"\u002F* 精确单位 *\u002F\n",[67,130270,130271,130273],{"class":69,"line":660},[67,130272,53377],{"class":262},[67,130274,17369],{"class":73},[67,130276,130277,130279,130281,130283,130285,130287,130289],{"class":69,"line":665},[67,130278,130250],{"class":77},[67,130280,53203],{"class":73},[67,130282,2689],{"class":77},[67,130284,53258],{"class":84},[67,130286,59265],{"class":77},[67,130288,53258],{"class":84},[67,130290,3148],{"class":73},[67,130292,130293],{"class":69,"line":677},[67,130294,3419],{"class":73},[67,130296,130297],{"class":69,"line":683},[67,130298,130299],{"class":2058},"\u002F* 混合单位 *\u002F\n",[67,130301,130302,130304],{"class":69,"line":689},[67,130303,53377],{"class":262},[67,130305,17369],{"class":73},[67,130307,130308,130310,130312,130314,130316,130318],{"class":69,"line":694},[67,130309,130250],{"class":77},[67,130311,53203],{"class":73},[67,130313,2689],{"class":77},[67,130315,53258],{"class":84},[67,130317,18941],{"class":77},[67,130319,3148],{"class":73},[67,130321,130322],{"class":69,"line":700},[67,130323,3419],{"class":73},[19,130325,130326],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[399,130328,130329,130337],{},[402,130330,130331],{},[405,130332,130333,130335],{},[408,130334,130103],{"align":410},[408,130336,27658],{"align":410},[419,130338,130339,130346],{},[405,130340,130341,130343],{},[424,130342,53733],{"align":410},[424,130344,130345],{"align":410},"百分数|由浮点数和单位标识符组成的长度值",[405,130347,130348,130351],{},[424,130349,130350],{"align":410},"position",[424,130352,130353],{"align":410},"top|center|bottom|left|center|right 方位名词",[19,130355,130356],{},"其他说明：",[19,130358,130359],{},"①参数是方位名词",[19,130361,130362],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130364,130365],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130367,130368],{},"②参数是精确单位",[19,130370,130371],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130373,130374],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130376,130377],{},"③参数是混合单位",[19,130379,130380],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[391,130382,130384],{"id":130383},"_825-背景图片固定","8.2.5 背景图片固定",[58,130386,130388],{"className":127990,"code":130387,"language":127992,"meta":63,"style":63},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[32,130389,130390,130395,130401,130413,130417,130422,130428,130438],{"__ignoreMap":63},[67,130391,130392],{"class":69,"line":70},[67,130393,130394],{"class":2058},"\u002F* 背景滚动（默认） *\u002F\n",[67,130396,130397,130399],{"class":69,"line":191},[67,130398,53377],{"class":262},[67,130400,17369],{"class":73},[67,130402,130403,130406,130408,130411],{"class":69,"line":202},[67,130404,130405],{"class":77},"  background-attachment",[67,130407,53203],{"class":73},[67,130409,130410],{"class":77},"scroll",[67,130412,3148],{"class":73},[67,130414,130415],{"class":69,"line":641},[67,130416,3419],{"class":73},[67,130418,130419],{"class":69,"line":655},[67,130420,130421],{"class":2058},"\u002F* 背景固定 *\u002F\n",[67,130423,130424,130426],{"class":69,"line":660},[67,130425,53377],{"class":262},[67,130427,17369],{"class":73},[67,130429,130430,130432,130434,130436],{"class":69,"line":665},[67,130431,130405],{"class":77},[67,130433,53203],{"class":73},[67,130435,87992],{"class":77},[67,130437,3148],{"class":73},[67,130439,130440],{"class":69,"line":677},[67,130441,3419],{"class":73},[399,130443,130444,130453],{},[402,130445,130446],{},[405,130447,130448,130451],{},[408,130449,130450],{"align":410},"参数",[408,130452,414],{"align":410},[419,130454,130455,130462],{},[405,130456,130457,130459],{},[424,130458,130410],{"align":410},[424,130460,130461],{"align":410},"背景图像是随对象内容滚动",[405,130463,130464,130466],{},[424,130465,87992],{"align":410},[424,130467,130468],{"align":410},"背景图像固定",[391,130470,130472],{"id":130471},"_826-背景样式合写","8.2.6 背景样式合写",[58,130474,130476],{"className":127990,"code":130475,"language":127992,"meta":63,"style":63},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[32,130477,130478,130483,130489,130517],{"__ignoreMap":63},[67,130479,130480],{"class":69,"line":70},[67,130481,130482],{"class":2058},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[67,130484,130485,130487],{"class":69,"line":191},[67,130486,53377],{"class":262},[67,130488,17369],{"class":73},[67,130490,130491,130493,130495,130497,130500,130502,130504,130506,130508,130511,130513,130515],{"class":69,"line":202},[67,130492,72371],{"class":77},[67,130494,53203],{"class":73},[67,130496,62603],{"class":77},[67,130498,130499],{"class":77}," url",[67,130501,854],{"class":73},[67,130503,130088],{"class":7033},[67,130505,15512],{"class":73},[67,130507,63497],{"class":77},[67,130509,130510],{"class":77}," fixed",[67,130512,18941],{"class":77},[67,130514,130257],{"class":77},[67,130516,3148],{"class":73},[67,130518,130519],{"class":69,"line":641},[67,130520,3419],{"class":73},[391,130522,130524],{"id":130523},"_827-背景色半透明","8.2.7 背景色半透明",[58,130526,130528],{"className":127990,"code":130527,"language":127992,"meta":63,"style":63},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[32,130529,130530,130536,130562],{"__ignoreMap":63},[67,130531,130532,130534],{"class":69,"line":70},[67,130533,53377],{"class":262},[67,130535,17369],{"class":73},[67,130537,130538,130540,130542,130544,130546,130548,130550,130552,130554,130556,130558,130560],{"class":69,"line":191},[67,130539,72371],{"class":77},[67,130541,53203],{"class":73},[67,130543,56871],{"class":77},[67,130545,854],{"class":73},[67,130547,78],{"class":77},[67,130549,1868],{"class":73},[67,130551,78],{"class":77},[67,130553,1868],{"class":73},[67,130555,78],{"class":77},[67,130557,1868],{"class":73},[67,130559,102278],{"class":77},[67,130561,4544],{"class":73},[67,130563,130564],{"class":69,"line":202},[67,130565,3419],{"class":73},[19,130567,101153],{},[19,130569,130570],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130572,130573],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130575,130576],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130578,130579],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[391,130581,130583],{"id":130582},"_828-总结","8.2.8 总结",[399,130585,130586,130597],{},[402,130587,130588],{},[405,130589,130590,130593,130595],{},[408,130591,130592],{"align":410},"属性",[408,130594,414],{"align":410},[408,130596,2147],{"align":410},[419,130598,130599,130610,130621,130632,130643,130654,130665],{},[405,130600,130601,130604,130607],{},[424,130602,130603],{"align":410},"background-color",[424,130605,130606],{"align":410},"背景颜色",[424,130608,130609],{"align":410},"预定义的颜色值\u002F十六进制\u002FRGB代码",[405,130611,130612,130615,130618],{},[424,130613,130614],{"align":410},"background-image",[424,130616,130617],{"align":410},"背景图片",[424,130619,130620],{"align":410},"url(图片路径)",[405,130622,130623,130626,130629],{},[424,130624,130625],{"align":410},"background-repeat",[424,130627,130628],{"align":410},"是否平铺",[424,130630,130631],{"align":410},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[405,130633,130634,130637,130640],{},[424,130635,130636],{"align":410},"background-position",[424,130638,130639],{"align":410},"背景位置",[424,130641,130642],{"align":410},"length\u002Fposition 分别是x和y坐标",[405,130644,130645,130648,130651],{},[424,130646,130647],{"align":410},"background-attachment",[424,130649,130650],{"align":410},"背景附着",[424,130652,130653],{"align":410},"scroll(背景滚动) \u002Ffixed (背景固定)",[405,130655,130656,130659,130662],{},[424,130657,130658],{"align":410},"背景简写",[424,130660,130661],{"align":410},"书写更简单",[424,130663,130664],{"align":410},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[405,130666,130667,130670,130673],{},[424,130668,130669],{"align":410},"背景半透明",[424,130671,130672],{"align":410},"背景颜色半透明",[424,130674,130675],{"align":410},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130677,130678],{},"颜色渐变：",[3317,130680],{"style":127846,"src":130681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3317,130683],{"style":127846,"src":130684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[391,130686,130688],{"id":130687},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[58,130690,130692],{"className":128737,"code":130691,"language":128739,"meta":63,"style":63},"\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",[32,130693,130694,130709,130728,130747,130766,130785,130804],{"__ignoreMap":63},[67,130695,130696,130698,130700,130702,130704,130707],{"class":69,"line":70},[67,130697,259],{"class":73},[67,130699,53377],{"class":262},[67,130701,55248],{"class":110},[67,130703,85],{"class":73},[67,130705,130706],{"class":114},"\"nav\"",[67,130708,323],{"class":73},[67,130710,130711,130713,130715,130717,130719,130721,130724,130726],{"class":69,"line":191},[67,130712,328],{"class":73},[67,130714,2230],{"class":262},[67,130716,62818],{"class":110},[67,130718,85],{"class":73},[67,130720,62823],{"class":114},[67,130722,130723],{"class":73},">五彩导航1\u003C\u002F",[67,130725,2230],{"class":262},[67,130727,323],{"class":73},[67,130729,130730,130732,130734,130736,130738,130740,130743,130745],{"class":69,"line":202},[67,130731,328],{"class":73},[67,130733,2230],{"class":262},[67,130735,62818],{"class":110},[67,130737,85],{"class":73},[67,130739,62823],{"class":114},[67,130741,130742],{"class":73},">五彩导航2\u003C\u002F",[67,130744,2230],{"class":262},[67,130746,323],{"class":73},[67,130748,130749,130751,130753,130755,130757,130759,130762,130764],{"class":69,"line":641},[67,130750,328],{"class":73},[67,130752,2230],{"class":262},[67,130754,62818],{"class":110},[67,130756,85],{"class":73},[67,130758,62823],{"class":114},[67,130760,130761],{"class":73},">五彩导航3\u003C\u002F",[67,130763,2230],{"class":262},[67,130765,323],{"class":73},[67,130767,130768,130770,130772,130774,130776,130778,130781,130783],{"class":69,"line":655},[67,130769,328],{"class":73},[67,130771,2230],{"class":262},[67,130773,62818],{"class":110},[67,130775,85],{"class":73},[67,130777,62823],{"class":114},[67,130779,130780],{"class":73},">五彩导航4\u003C\u002F",[67,130782,2230],{"class":262},[67,130784,323],{"class":73},[67,130786,130787,130789,130791,130793,130795,130797,130800,130802],{"class":69,"line":660},[67,130788,328],{"class":73},[67,130790,2230],{"class":262},[67,130792,62818],{"class":110},[67,130794,85],{"class":73},[67,130796,62823],{"class":114},[67,130798,130799],{"class":73},">五彩导航5\u003C\u002F",[67,130801,2230],{"class":262},[67,130803,323],{"class":73},[67,130805,130806,130808,130810],{"class":69,"line":665},[67,130807,376],{"class":73},[67,130809,53377],{"class":262},[67,130811,323],{"class":73},[58,130813,130815],{"className":127990,"code":130814,"language":127992,"meta":63,"style":63},".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",[32,130816,130817,130826,130836,130848,130860,130870,130882,130892,130896,130921,130944,130967,130990],{"__ignoreMap":63},[67,130818,130819,130822,130824],{"class":69,"line":70},[67,130820,130821],{"class":110},".nav",[67,130823,3253],{"class":262},[67,130825,17369],{"class":73},[67,130827,130828,130830,130832,130834],{"class":69,"line":191},[67,130829,129606],{"class":77},[67,130831,53203],{"class":73},[67,130833,74143],{"class":77},[67,130835,3148],{"class":73},[67,130837,130838,130840,130842,130844,130846],{"class":69,"line":202},[67,130839,72328],{"class":77},[67,130841,53203],{"class":73},[67,130843,2806],{"class":77},[67,130845,53258],{"class":84},[67,130847,3148],{"class":73},[67,130849,130850,130852,130854,130856,130858],{"class":69,"line":641},[67,130851,72548],{"class":77},[67,130853,53203],{"class":73},[67,130855,2845],{"class":77},[67,130857,53258],{"class":84},[67,130859,3148],{"class":73},[67,130861,130862,130864,130866,130868],{"class":69,"line":655},[67,130863,72286],{"class":77},[67,130865,53203],{"class":73},[67,130867,53358],{"class":77},[67,130869,3148],{"class":73},[67,130871,130872,130874,130876,130878,130880],{"class":69,"line":660},[67,130873,128674],{"class":77},[67,130875,53203],{"class":73},[67,130877,2845],{"class":77},[67,130879,53258],{"class":84},[67,130881,3148],{"class":73},[67,130883,130884,130886,130888,130890],{"class":69,"line":665},[67,130885,72665],{"class":77},[67,130887,53203],{"class":73},[67,130889,62603],{"class":77},[67,130891,3148],{"class":73},[67,130893,130894],{"class":69,"line":677},[67,130895,3419],{"class":73},[67,130897,130898,130900,130902,130905,130907,130909,130912,130914,130916,130918],{"class":69,"line":683},[67,130899,130821],{"class":110},[67,130901,3253],{"class":262},[67,130903,130904],{"class":110},":nth-child",[67,130906,854],{"class":73},[67,130908,2209],{"class":77},[67,130910,130911],{"class":73},") { ",[67,130913,130603],{"class":77},[67,130915,53203],{"class":73},[67,130917,130021],{"class":77},[67,130919,130920],{"class":73},"; }\n",[67,130922,130923,130925,130927,130929,130931,130933,130935,130937,130939,130942],{"class":69,"line":689},[67,130924,130821],{"class":110},[67,130926,3253],{"class":262},[67,130928,130904],{"class":110},[67,130930,854],{"class":73},[67,130932,2077],{"class":77},[67,130934,130911],{"class":73},[67,130936,130603],{"class":77},[67,130938,53203],{"class":73},[67,130940,130941],{"class":77},"#ff0000",[67,130943,130920],{"class":73},[67,130945,130946,130948,130950,130952,130954,130956,130958,130960,130962,130965],{"class":69,"line":694},[67,130947,130821],{"class":110},[67,130949,3253],{"class":262},[67,130951,130904],{"class":110},[67,130953,854],{"class":73},[67,130955,2071],{"class":77},[67,130957,130911],{"class":73},[67,130959,130603],{"class":77},[67,130961,53203],{"class":73},[67,130963,130964],{"class":77},"#00a4ff",[67,130966,130920],{"class":73},[67,130968,130969,130971,130973,130975,130977,130979,130981,130983,130985,130988],{"class":69,"line":700},[67,130970,130821],{"class":110},[67,130972,3253],{"class":262},[67,130974,130904],{"class":110},[67,130976,854],{"class":73},[67,130978,1047],{"class":77},[67,130980,130911],{"class":73},[67,130982,130603],{"class":77},[67,130984,53203],{"class":73},[67,130986,130987],{"class":77},"#ff00ff",[67,130989,130920],{"class":73},[67,130991,130992,130994,130996,130998,131000,131002,131004,131006,131008,131011],{"class":69,"line":706},[67,130993,130821],{"class":110},[67,130995,3253],{"class":262},[67,130997,130904],{"class":110},[67,130999,854],{"class":73},[67,131001,2310],{"class":77},[67,131003,130911],{"class":73},[67,131005,130603],{"class":77},[67,131007,53203],{"class":73},[67,131009,131010],{"class":77},"#00ff00",[67,131012,130920],{"class":73},[14,131014,131016],{"id":131015},"_83-css三大特性","8.3 css三大特性",[391,131018,131020],{"id":131019},"_831-层叠性","8.3.1 层叠性",[19,131022,131023],{},"为了解决样式冲突问题",[19,131025,131026],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131028,131029],{},"   ②样式不冲突，不会层叠",[391,131031,131033],{"id":131032},"_832-继承性","8.3.2 继承性",[19,131035,131036],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131038,131039],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[58,131041,131043],{"className":127990,"code":131042,"language":127992,"meta":63,"style":63},"p {\n  color: #333;\n}\n",[32,131044,131045,131051,131061],{"__ignoreMap":63},[67,131046,131047,131049],{"class":69,"line":70},[67,131048,19],{"class":262},[67,131050,17369],{"class":73},[67,131052,131053,131055,131057,131059],{"class":69,"line":191},[67,131054,72665],{"class":77},[67,131056,53203],{"class":73},[67,131058,64129],{"class":77},[67,131060,3148],{"class":73},[67,131062,131063],{"class":69,"line":202},[67,131064,3419],{"class":73},[3317,131066],{"style":127846,"src":131067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131069,131070],{},"解释：①行高可以跟单位也可以不跟单位",[19,131072,131073],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131075,131076],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131078,131079],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[391,131081,131083],{"id":131082},"_833-优先级","8.3.3 优先级",[26,131085,131086,131089],{},[29,131087,131088],{},"选择器相同，则执行层叠性",[29,131090,131091],{},"选择器不同，则根据选择器权重执行",[399,131093,131094,131104],{},[402,131095,131096],{},[405,131097,131098,131101],{},[408,131099,131100],{"align":410},"选择器",[408,131102,131103],{"align":410},"选择器权重",[419,131105,131106,131114,131122,131130,131138,131146],{},[405,131107,131108,131111],{},[424,131109,131110],{"align":410},"继承 或者*",[424,131112,131113],{"align":410},"0，0，0，0",[405,131115,131116,131119],{},[424,131117,131118],{"align":410},"标签选择器",[424,131120,131121],{"align":410},"0，0，0，1",[405,131123,131124,131127],{},[424,131125,131126],{"align":410},"类选择器，伪类选择器",[424,131128,131129],{"align":410},"0，0，1，0",[405,131131,131132,131135],{},[424,131133,131134],{"align":410},"ID选择器",[424,131136,131137],{"align":410},"0，1，0，0",[405,131139,131140,131143],{},[424,131141,131142],{"align":410},"行内样式",[424,131144,131145],{"align":410},"1，0，0，0",[405,131147,131148,131151],{},[424,131149,131150],{"align":410},"！important",[424,131152,131153],{"align":410},"无穷大",[19,131155,131156],{},"! important用法：",[58,131158,131160],{"className":127990,"code":131159,"language":127992,"meta":63,"style":63},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[32,131161,131162,131167,131173,131186,131190,131195,131201,131211],{"__ignoreMap":63},[67,131163,131164],{"class":69,"line":70},[67,131165,131166],{"class":2058},"\u002F* !important 拥有最高优先级 *\u002F\n",[67,131168,131169,131171],{"class":69,"line":191},[67,131170,53377],{"class":262},[67,131172,17369],{"class":73},[67,131174,131175,131177,131179,131181,131184],{"class":69,"line":202},[67,131176,72665],{"class":77},[67,131178,53203],{"class":73},[67,131180,53411],{"class":77},[67,131182,131183],{"class":84}," !important",[67,131185,3148],{"class":73},[67,131187,131188],{"class":69,"line":641},[67,131189,3419],{"class":73},[67,131191,131192],{"class":69,"line":655},[67,131193,131194],{"class":2058},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[67,131196,131197,131199],{"class":69,"line":660},[67,131198,53377],{"class":262},[67,131200,17369],{"class":73},[67,131202,131203,131205,131207,131209],{"class":69,"line":665},[67,131204,72665],{"class":77},[67,131206,53203],{"class":73},[67,131208,59182],{"class":77},[67,131210,3148],{"class":73},[67,131212,131213],{"class":69,"line":677},[67,131214,3419],{"class":73},[19,131216,131217],{},"优先级注意点：",[19,131219,131220],{},"①权重是有4组数字组成,但是不会有进位",[19,131222,131223],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131225,131226],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131228,131229],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131231,131232],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131234,131235],{},"⑥复合选择器",[399,131237,131238,131248],{},[402,131239,131240],{},[405,131241,131242,131245],{},[408,131243,131244],{"align":410},"div ul li",[408,131246,131247],{"align":410},"0,0,0,3",[419,131249,131250,131258,131266],{},[405,131251,131252,131255],{},[424,131253,131254],{"align":410},".nav ul li",[424,131256,131257],{"align":410},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[405,131259,131260,131263],{},[424,131261,131262],{"align":410},"a:hover",[424,131264,131265],{"align":410},"0,0,1,1",[405,131267,131268,131271],{},[424,131269,131270],{"align":410},".nav a",[424,131272,131265],{"align":410},[1903,131274,131275],{},"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":63,"searchDepth":191,"depth":191,"links":131277},[131278,131286,131297],{"id":129386,"depth":191,"text":129387,"children":131279},[131280,131281,131282,131283,131284,131285],{"id":129399,"depth":202,"text":129400},{"id":129471,"depth":202,"text":129472},{"id":129543,"depth":202,"text":129544},{"id":129574,"depth":202,"text":129575},{"id":129581,"depth":202,"text":129582},{"id":129734,"depth":202,"text":129735},{"id":130042,"depth":191,"text":130043,"children":131287},[131288,131289,131290,131291,131292,131293,131294,131295,131296],{"id":130049,"depth":202,"text":130050},{"id":130059,"depth":202,"text":130060},{"id":130155,"depth":202,"text":130156},{"id":130228,"depth":202,"text":130229},{"id":130383,"depth":202,"text":130384},{"id":130471,"depth":202,"text":130472},{"id":130523,"depth":202,"text":130524},{"id":130582,"depth":202,"text":130583},{"id":130687,"depth":202,"text":130688},{"id":131015,"depth":191,"text":131016,"children":131298},[131299,131300,131301],{"id":131019,"depth":202,"text":131020},{"id":131032,"depth":202,"text":131033},{"id":131082,"depth":202,"text":131083},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129378,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131308,"title":131309,"body":131310,"description":25173,"extension":1930,"meta":132900,"navigation":630,"path":132901,"seo":132902,"stem":132903,"__hash__":132904},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131311,"toc":132879},[131312,131315,131319,131322,131325,131328,131331,131334,131337,131340,131344,131352,131389,131425,131428,131442,131447,131481,131484,131577,131582,131585,131615,131618,131623,131631,131635,131642,131688,131732,131737,131740,131743,131746,131749,131752,131755,131757,131760,131764,131769,131813,131818,131821,131824,131861,131866,131869,131872,131875,131878,131910,131913,131916,131919,131951,131954,131957,131960,131964,131967,131999,132002,132006,132026,132029,132037,132040,132044,132049,132052,132084,132089,132092,132130,132134,132139,132142,132145,132176,132179,132196,132201,132253,132313,132318,132372,132410,132414,132418,132421,132425,132433,132436,132438,132449,132454,132502,132536,132539,132542,132545,132548,132592,132595,132598,132601,132604,132607,132610,132654,132657,132660,132663,132666,132669,132672,132678,132681,132725,132728,132731,132734,132737,132740,132784,132787,132789,132792,132796,132800,132838,132842,132845,132848,132852,132860,132864,132867,132870,132873,132876],[10,131313,131309],{"id":131314},"_9-css盒模型浮动与切图",[14,131316,131318],{"id":131317},"_91-盒子模型","9.1 盒子模型",[19,131320,131321],{},"利用盒子来设计网页",[19,131323,131324],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131326,131327],{},"网页布局设置：",[19,131329,131330],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131332,131333],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131335,131336],{},"③往盒子里装内容",[3317,131338],{"style":127846,"src":131339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[391,131341,131343],{"id":131342},"_911-边框border","9.1.1 边框（border）",[26,131345,131346,131349],{},[29,131347,131348],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[29,131350,131351],{},"语法",[58,131353,131355],{"className":127990,"code":131354,"language":127992,"meta":63,"style":63},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[32,131356,131357,131362,131368,131385],{"__ignoreMap":63},[67,131358,131359],{"class":69,"line":70},[67,131360,131361],{"class":2058},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[67,131363,131364,131366],{"class":69,"line":191},[67,131365,53377],{"class":262},[67,131367,17369],{"class":73},[67,131369,131370,131372,131374,131376,131378,131380,131383],{"class":69,"line":202},[67,131371,72656],{"class":77},[67,131373,53203],{"class":73},[67,131375,2209],{"class":77},[67,131377,53258],{"class":84},[67,131379,53287],{"class":77},[67,131381,131382],{"class":77}," #ccc",[67,131384,3148],{"class":73},[67,131386,131387],{"class":69,"line":641},[67,131388,3419],{"class":73},[399,131390,131391,131399],{},[402,131392,131393],{},[405,131394,131395,131397],{},[408,131396,130592],{"align":410},[408,131398,414],{"align":410},[419,131400,131401,131409,131417],{},[405,131402,131403,131406],{},[424,131404,131405],{"align":410},"border-width",[424,131407,131408],{"align":410},"定义边框粗细，单位是px",[405,131410,131411,131414],{},[424,131412,131413],{"align":410},"border-style",[424,131415,131416],{"align":410},"边框的样式",[405,131418,131419,131422],{},[424,131420,131421],{"align":410},"border-color",[424,131423,131424],{"align":410},"边框的颜色",[19,131426,131427],{},"边框样式 border-style 可以设置如下值：",[2994,131429,131430,131433,131436,131439],{},[29,131431,131432],{},"none：没有边框即忽略所有边框的宽度（默认值）",[29,131434,131435],{},"solid：边框为单实线(最为常用的)",[29,131437,131438],{},"dashed：边框为虚线",[29,131440,131441],{},"dotted：边框为点线",[26,131443,131444],{"start":202},[29,131445,131446],{},"边框的合写分写",[58,131448,131449],{"className":127990,"code":131354,"language":127992,"meta":63,"style":63},[32,131450,131451,131455,131461,131477],{"__ignoreMap":63},[67,131452,131453],{"class":69,"line":70},[67,131454,131361],{"class":2058},[67,131456,131457,131459],{"class":69,"line":191},[67,131458,53377],{"class":262},[67,131460,17369],{"class":73},[67,131462,131463,131465,131467,131469,131471,131473,131475],{"class":69,"line":202},[67,131464,72656],{"class":77},[67,131466,53203],{"class":73},[67,131468,2209],{"class":77},[67,131470,53258],{"class":84},[67,131472,53287],{"class":77},[67,131474,131382],{"class":77},[67,131476,3148],{"class":73},[67,131478,131479],{"class":69,"line":641},[67,131480,3419],{"class":73},[19,131482,131483],{},"边框分开写法：",[58,131485,131487],{"className":127990,"code":131486,"language":127992,"meta":63,"style":63},"\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",[32,131488,131489,131494,131500,131518,131536,131555,131573],{"__ignoreMap":63},[67,131490,131491],{"class":69,"line":70},[67,131492,131493],{"class":2058},"\u002F* 边框分开写法 *\u002F\n",[67,131495,131496,131498],{"class":69,"line":191},[67,131497,53377],{"class":262},[67,131499,17369],{"class":73},[67,131501,131502,131505,131507,131509,131511,131513,131516],{"class":69,"line":202},[67,131503,131504],{"class":77},"  border-top",[67,131506,53203],{"class":73},[67,131508,2209],{"class":77},[67,131510,53258],{"class":84},[67,131512,53287],{"class":77},[67,131514,131515],{"class":77}," #000",[67,131517,3148],{"class":73},[67,131519,131520,131523,131525,131527,131529,131531,131534],{"class":69,"line":641},[67,131521,131522],{"class":77},"  border-right",[67,131524,53203],{"class":73},[67,131526,2077],{"class":77},[67,131528,53258],{"class":84},[67,131530,64001],{"class":77},[67,131532,131533],{"class":77}," #333",[67,131535,3148],{"class":73},[67,131537,131538,131541,131543,131545,131547,131550,131553],{"class":69,"line":655},[67,131539,131540],{"class":77},"  border-bottom",[67,131542,53203],{"class":73},[67,131544,2071],{"class":77},[67,131546,53258],{"class":84},[67,131548,131549],{"class":77}," dotted",[67,131551,131552],{"class":77}," #666",[67,131554,3148],{"class":73},[67,131556,131557,131560,131562,131564,131566,131568,131571],{"class":69,"line":660},[67,131558,131559],{"class":77},"  border-left",[67,131561,53203],{"class":73},[67,131563,2209],{"class":77},[67,131565,53258],{"class":84},[67,131567,53287],{"class":77},[67,131569,131570],{"class":77}," #999",[67,131572,3148],{"class":73},[67,131574,131575],{"class":69,"line":665},[67,131576,3419],{"class":73},[26,131578,131579],{"start":641},[29,131580,131581],{},"表格的细线边框",[19,131583,131584],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[58,131586,131588],{"className":127990,"code":131587,"language":127992,"meta":63,"style":63},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[32,131589,131590,131595,131601,131611],{"__ignoreMap":63},[67,131591,131592],{"class":69,"line":70},[67,131593,131594],{"class":2058},"\u002F* 表格细线边框合并 *\u002F\n",[67,131596,131597,131599],{"class":69,"line":191},[67,131598,399],{"class":262},[67,131600,17369],{"class":73},[67,131602,131603,131605,131607,131609],{"class":69,"line":202},[67,131604,72338],{"class":77},[67,131606,53203],{"class":73},[67,131608,66795],{"class":77},[67,131610,3148],{"class":73},[67,131612,131613],{"class":69,"line":641},[67,131614,3419],{"class":73},[19,131616,131617],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[26,131619,131620],{"start":655},[29,131621,131622],{},"解决边框额外增加盒子的实际大小的方法：",[2994,131624,131625,131628],{},[29,131626,131627],{},"测量盒子大小的时候,不量边框",[29,131629,131630],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[391,131632,131634],{"id":131633},"_912-内边距","9.1.2 内边距",[26,131636,131637,131640],{},[29,131638,131639],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[29,131641,131351],{},[399,131643,131644,131654],{},[402,131645,131646],{},[405,131647,131648,131651],{},[408,131649,131650],{"align":410},"值的个数",[408,131652,131653],{"align":410},"表达意思",[419,131655,131656,131664,131672,131680],{},[405,131657,131658,131661],{},[424,131659,131660],{"align":410},"padding: 5px;",[424,131662,131663],{"align":410},"1个值，代表上下左右都有5个元素",[405,131665,131666,131669],{},[424,131667,131668],{"align":410},"padding: 5px 10px;",[424,131670,131671],{"align":410},"2个值，代表上下内边距为5像素，左右内边距为10像素",[405,131673,131674,131677],{},[424,131675,131676],{"align":410},"padding: 5px 10px 20px;",[424,131678,131679],{"align":410},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[405,131681,131682,131685],{},[424,131683,131684],{"align":410},"padding: 5px 10px 20px 30px;",[424,131686,131687],{"align":410},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[399,131689,131690,131698],{},[402,131691,131692],{},[405,131693,131694,131696],{},[408,131695,130592],{"align":410},[408,131697,414],{"align":410},[419,131699,131700,131708,131716,131724],{},[405,131701,131702,131705],{},[424,131703,131704],{"align":410},"padding-left",[424,131706,131707],{"align":410},"左内边距",[405,131709,131710,131713],{},[424,131711,131712],{"align":410},"padding-right",[424,131714,131715],{"align":410},"右内边距",[405,131717,131718,131721],{},[424,131719,131720],{"align":410},"padding-top",[424,131722,131723],{"align":410},"上内边距",[405,131725,131726,131729],{},[424,131727,131728],{"align":410},"padding-bottom",[424,131730,131731],{"align":410},"下内边距",[26,131733,131734],{"start":202},[29,131735,131736],{},"内边距会影响盒子的实际大小",[19,131738,131739],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131741,131742],{},"①内容和边框有了距离，添加了内边距",[19,131744,131745],{},"②padding影响了盒子实际大小",[19,131747,131748],{},"内边距对盒子大小的影响：",[19,131750,131751],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131753,131754],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131756,96979],{},[19,131758,131759],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[391,131761,131763],{"id":131762},"_913-外边距","9.1.3 外边距",[26,131765,131766],{},[29,131767,131768],{},"控制盒子与盒子之间的距离",[399,131770,131771,131779],{},[402,131772,131773],{},[405,131774,131775,131777],{},[408,131776,130592],{"align":410},[408,131778,414],{"align":410},[419,131780,131781,131789,131797,131805],{},[405,131782,131783,131786],{},[424,131784,131785],{"align":410},"margin-left",[424,131787,131788],{"align":410},"左外边距",[405,131790,131791,131794],{},[424,131792,131793],{"align":410},"margin-right",[424,131795,131796],{"align":410},"右外边距",[405,131798,131799,131802],{},[424,131800,131801],{"align":410},"margin-top",[424,131803,131804],{"align":410},"上外边距",[405,131806,131807,131810],{},[424,131808,131809],{"align":410},"margin-bottom",[424,131811,131812],{"align":410},"下外边距",[26,131814,131815],{"start":191},[29,131816,131817],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131819,131820],{},"①盒子必须指定了宽度（width）",[19,131822,131823],{},"②盒子左右的外边距都设置为 auto",[58,131825,131827],{"className":127990,"code":131826,"language":127992,"meta":63,"style":63},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[32,131828,131829,131834,131841,131857],{"__ignoreMap":63},[67,131830,131831],{"class":69,"line":70},[67,131832,131833],{"class":2058},"\u002F* margin 复合写法（同上） *\u002F\n",[67,131835,131836,131839],{"class":69,"line":191},[67,131837,131838],{"class":110},".box",[67,131840,17369],{"class":73},[67,131842,131843,131845,131847,131849,131851,131854],{"class":69,"line":202},[67,131844,72230],{"class":77},[67,131846,53203],{"class":73},[67,131848,78],{"class":77},[67,131850,53322],{"class":77},[67,131852,131853],{"class":73},";  ",[67,131855,131856],{"class":2058},"\u002F* 块级盒子水平居中 *\u002F\n",[67,131858,131859],{"class":69,"line":641},[67,131860,3419],{"class":73},[26,131862,131863],{"start":202},[29,131864,131865],{},"外边距塌陷问题",[19,131867,131868],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3317,131870],{"style":127846,"src":131871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131873,131874],{},"解决方案：",[19,131876,131877],{},"①可以为父亲元素定义上边距",[58,131879,131880],{"className":127990,"code":131826,"language":127992,"meta":63,"style":63},[32,131881,131882,131886,131892,131906],{"__ignoreMap":63},[67,131883,131884],{"class":69,"line":70},[67,131885,131833],{"class":2058},[67,131887,131888,131890],{"class":69,"line":191},[67,131889,131838],{"class":110},[67,131891,17369],{"class":73},[67,131893,131894,131896,131898,131900,131902,131904],{"class":69,"line":202},[67,131895,72230],{"class":77},[67,131897,53203],{"class":73},[67,131899,78],{"class":77},[67,131901,53322],{"class":77},[67,131903,131853],{"class":73},[67,131905,131856],{"class":2058},[67,131907,131908],{"class":69,"line":641},[67,131909,3419],{"class":73},[19,131911,131912],{},"②可以为父亲元素定义上内边距",[19,131914,131915],{},"③可以为父亲元素添加overflow:hidden",[3317,131917],{"style":127846,"src":131918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[58,131920,131921],{"className":127990,"code":131826,"language":127992,"meta":63,"style":63},[32,131922,131923,131927,131933,131947],{"__ignoreMap":63},[67,131924,131925],{"class":69,"line":70},[67,131926,131833],{"class":2058},[67,131928,131929,131931],{"class":69,"line":191},[67,131930,131838],{"class":110},[67,131932,17369],{"class":73},[67,131934,131935,131937,131939,131941,131943,131945],{"class":69,"line":202},[67,131936,72230],{"class":77},[67,131938,53203],{"class":73},[67,131940,78],{"class":77},[67,131942,53322],{"class":77},[67,131944,131853],{"class":73},[67,131946,131856],{"class":2058},[67,131948,131949],{"class":69,"line":641},[67,131950,3419],{"class":73},[3317,131952],{"style":127846,"src":131953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131955,131956],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131958,131959],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[391,131961,131963],{"id":131962},"_914-清除内外边距","9.1.4 清除内外边距",[19,131965,131966],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[58,131968,131969],{"className":127990,"code":131826,"language":127992,"meta":63,"style":63},[32,131970,131971,131975,131981,131995],{"__ignoreMap":63},[67,131972,131973],{"class":69,"line":70},[67,131974,131833],{"class":2058},[67,131976,131977,131979],{"class":69,"line":191},[67,131978,131838],{"class":110},[67,131980,17369],{"class":73},[67,131982,131983,131985,131987,131989,131991,131993],{"class":69,"line":202},[67,131984,72230],{"class":77},[67,131986,53203],{"class":73},[67,131988,78],{"class":77},[67,131990,53322],{"class":77},[67,131992,131853],{"class":73},[67,131994,131856],{"class":2058},[67,131996,131997],{"class":69,"line":641},[67,131998,3419],{"class":73},[19,132000,132001],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[391,132003,132005],{"id":132004},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[2994,132007,132008,132011,132014,132017,132020,132023],{},[29,132009,132010],{},"文件→打开 ：可以打开我们要测量的图片",[29,132012,132013],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[29,132015,132016],{},"右击标尺，把里面的单位改为像素",[29,132018,132019],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[29,132021,132022],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[29,132024,132025],{},"用选区拖动 可以测量大小",[3317,132027],{"style":127846,"src":132028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[2994,132030,132031,132034],{},[29,132032,132033],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[29,132035,132036],{},"吸管取色工具",[3317,132038],{"style":127846,"src":132039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[391,132041,132043],{"id":132042},"_916-案例","9.1.6 案例",[26,132045,132046],{},[29,132047,132048],{},"小米商品",[3317,132050],{"style":127846,"src":132051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[58,132053,132054],{"className":127990,"code":131826,"language":127992,"meta":63,"style":63},[32,132055,132056,132060,132066,132080],{"__ignoreMap":63},[67,132057,132058],{"class":69,"line":70},[67,132059,131833],{"class":2058},[67,132061,132062,132064],{"class":69,"line":191},[67,132063,131838],{"class":110},[67,132065,17369],{"class":73},[67,132067,132068,132070,132072,132074,132076,132078],{"class":69,"line":202},[67,132069,72230],{"class":77},[67,132071,53203],{"class":73},[67,132073,78],{"class":77},[67,132075,53322],{"class":77},[67,132077,131853],{"class":73},[67,132079,131856],{"class":2058},[67,132081,132082],{"class":69,"line":641},[67,132083,3419],{"class":73},[26,132085,132086],{"start":191},[29,132087,132088],{},"快报模块",[3317,132090],{"style":127846,"src":132091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[58,132093,132095],{"className":128737,"code":132094,"language":128739,"meta":63,"style":63},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[32,132096,132097,132102,132117,132122],{"__ignoreMap":63},[67,132098,132099],{"class":69,"line":70},[67,132100,132101],{"class":2058},"\u003C!-- HTML 代码示例 -->\n",[67,132103,132104,132106,132108,132110,132112,132115],{"class":69,"line":191},[67,132105,259],{"class":73},[67,132107,53377],{"class":262},[67,132109,55248],{"class":110},[67,132111,85],{"class":73},[67,132113,132114],{"class":114},"\"example\"",[67,132116,323],{"class":73},[67,132118,132119],{"class":69,"line":202},[67,132120,132121],{"class":73},"  示例内容\n",[67,132123,132124,132126,132128],{"class":69,"line":641},[67,132125,376],{"class":73},[67,132127,53377],{"class":262},[67,132129,323],{"class":73},[391,132131,132133],{"id":132132},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[26,132135,132136],{},[29,132137,132138],{},"圆角边框",[19,132140,132141],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3317,132143],{"style":127846,"src":132144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[58,132146,132148],{"className":127990,"code":132147,"language":127992,"meta":63,"style":63},"div {\n  border: 1px solid #ccc;\n}\n",[32,132149,132150,132156,132172],{"__ignoreMap":63},[67,132151,132152,132154],{"class":69,"line":70},[67,132153,53377],{"class":262},[67,132155,17369],{"class":73},[67,132157,132158,132160,132162,132164,132166,132168,132170],{"class":69,"line":191},[67,132159,72656],{"class":77},[67,132161,53203],{"class":73},[67,132163,2209],{"class":77},[67,132165,53258],{"class":84},[67,132167,53287],{"class":77},[67,132169,131382],{"class":77},[67,132171,3148],{"class":73},[67,132173,132174],{"class":69,"line":202},[67,132175,3419],{"class":73},[19,132177,132178],{},"解释:",[2994,132180,132181,132184,132187,132190,132193],{},[29,132182,132183],{},"参数值可以为数值或百分比的形式",[29,132185,132186],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[29,132188,132189],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[29,132191,132192],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[29,132194,132195],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[26,132197,132198],{"start":191},[29,132199,132200],{},"盒子阴影",[58,132202,132204],{"className":127990,"code":132203,"language":127992,"meta":63,"style":63},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[32,132205,132206,132212,132249],{"__ignoreMap":63},[67,132207,132208,132210],{"class":69,"line":70},[67,132209,53377],{"class":262},[67,132211,17369],{"class":73},[67,132213,132214,132217,132219,132221,132223,132225,132227,132229,132231,132233,132235,132237,132239,132241,132243,132245,132247],{"class":69,"line":191},[67,132215,132216],{"class":77},"  box-shadow",[67,132218,53203],{"class":73},[67,132220,78],{"class":77},[67,132222,16553],{"class":77},[67,132224,53258],{"class":84},[67,132226,3871],{"class":77},[67,132228,53258],{"class":84},[67,132230,80527],{"class":77},[67,132232,854],{"class":73},[67,132234,78],{"class":77},[67,132236,1868],{"class":73},[67,132238,78],{"class":77},[67,132240,1868],{"class":73},[67,132242,78],{"class":77},[67,132244,1868],{"class":73},[67,132246,87969],{"class":77},[67,132248,4544],{"class":73},[67,132250,132251],{"class":69,"line":202},[67,132252,3419],{"class":73},[399,132254,132255,132263],{},[402,132256,132257],{},[405,132258,132259,132261],{},[408,132260,2147],{"align":410},[408,132262,29275],{"align":410},[419,132264,132265,132273,132281,132289,132297,132305],{},[405,132266,132267,132270],{},[424,132268,132269],{"align":410},"h-shadow",[424,132271,132272],{"align":410},"必需,水平阴影的位置,允许负值",[405,132274,132275,132278],{},[424,132276,132277],{"align":410},"v-shadow",[424,132279,132280],{"align":410},"必需,垂直阴影的位置,允许负值",[405,132282,132283,132286],{},[424,132284,132285],{"align":410},"blur",[424,132287,132288],{"align":410},"可选,模糊距离,就是影子的虚实",[405,132290,132291,132294],{},[424,132292,132293],{"align":410},"spread",[424,132295,132296],{"align":410},"可选,阴影尺寸",[405,132298,132299,132302],{},[424,132300,132301],{"align":410},"color",[424,132303,132304],{"align":410},"可选,阴影的颜色",[405,132306,132307,132310],{},[424,132308,132309],{"align":410},"inset",[424,132311,132312],{"align":410},"可选,将外部阴影(outset)改为内部阴影",[26,132314,132315],{"start":202},[29,132316,132317],{},"文字阴影",[58,132319,132321],{"className":127990,"code":132320,"language":127992,"meta":63,"style":63},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[32,132322,132323,132329,132368],{"__ignoreMap":63},[67,132324,132325,132327],{"class":69,"line":70},[67,132326,19],{"class":262},[67,132328,17369],{"class":73},[67,132330,132331,132334,132336,132338,132340,132342,132344,132346,132348,132350,132352,132354,132356,132358,132360,132362,132364,132366],{"class":69,"line":191},[67,132332,132333],{"class":77},"  text-shadow",[67,132335,53203],{"class":73},[67,132337,2209],{"class":77},[67,132339,53258],{"class":84},[67,132341,906],{"class":77},[67,132343,53258],{"class":84},[67,132345,16553],{"class":77},[67,132347,53258],{"class":84},[67,132349,80527],{"class":77},[67,132351,854],{"class":73},[67,132353,78],{"class":77},[67,132355,1868],{"class":73},[67,132357,78],{"class":77},[67,132359,1868],{"class":73},[67,132361,78],{"class":77},[67,132363,1868],{"class":73},[67,132365,102278],{"class":77},[67,132367,4544],{"class":73},[67,132369,132370],{"class":69,"line":202},[67,132371,3419],{"class":73},[399,132373,132374,132382],{},[402,132375,132376],{},[405,132377,132378,132380],{},[408,132379,2147],{"align":410},[408,132381,29275],{"align":410},[419,132383,132384,132390,132397,132404],{},[405,132385,132386,132388],{},[424,132387,132269],{"align":410},[424,132389,132272],{"align":410},[405,132391,132392,132394],{},[424,132393,132277],{"align":410},[424,132395,132396],{"align":410},"必需,垂直阴影位置,允许负值",[405,132398,132399,132401],{},[424,132400,132285],{"align":410},[424,132402,132403],{"align":410},"可选,模糊的距离",[405,132405,132406,132408],{},[424,132407,132301],{"align":410},[424,132409,132304],{"align":410},[14,132411,132413],{"id":132412},"_92-浮动","9.2 浮动",[391,132415,132417],{"id":132416},"_921-浮动介绍","9.2.1 浮动介绍",[19,132419,132420],{},"在16.2中详细介绍",[391,132422,132424],{"id":132423},"_922-清除浮动","9.2.2 清除浮动",[26,132426,132427,132430],{},[29,132428,132429],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[29,132431,132432],{},"清除浮动的本质",[19,132434,132435],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132437,10831],{},[2994,132439,132440,132443,132446],{},[29,132441,132442],{},"如果父盒子本身有高度，则不需要清除浮动",[29,132444,132445],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[29,132447,132448],{},"父级有了高度，就不会影响下面的标准流了",[26,132450,132451],{"start":202},[29,132452,132453],{},"清除浮动样式",[58,132455,132457],{"className":127990,"code":132456,"language":127992,"meta":63,"style":63},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[32,132458,132459,132466,132477,132481,132488,132498],{"__ignoreMap":63},[67,132460,132461,132464],{"class":69,"line":70},[67,132462,132463],{"class":110},".left",[67,132465,17369],{"class":73},[67,132467,132468,132471,132473,132475],{"class":69,"line":191},[67,132469,132470],{"class":77},"  float",[67,132472,53203],{"class":73},[67,132474,410],{"class":77},[67,132476,3148],{"class":73},[67,132478,132479],{"class":69,"line":202},[67,132480,3419],{"class":73},[67,132482,132483,132486],{"class":69,"line":641},[67,132484,132485],{"class":110},".right",[67,132487,17369],{"class":73},[67,132489,132490,132492,132494,132496],{"class":69,"line":655},[67,132491,132470],{"class":77},[67,132493,53203],{"class":73},[67,132495,74282],{"class":77},[67,132497,3148],{"class":73},[67,132499,132500],{"class":69,"line":660},[67,132501,3419],{"class":73},[399,132503,132504,132512],{},[402,132505,132506],{},[405,132507,132508,132510],{},[408,132509,128454],{"align":410},[408,132511,29275],{"align":410},[419,132513,132514,132521,132528],{},[405,132515,132516,132518],{},[424,132517,410],{"align":410},[424,132519,132520],{"align":410},"不允许左侧有浮动元素（清除左侧浮动的影响）",[405,132522,132523,132525],{},[424,132524,74282],{"align":410},[424,132526,132527],{"align":410},"不允许右侧有浮动元素（清除右侧浮动的影响）",[405,132529,132530,132533],{},[424,132531,132532],{"align":410},"both",[424,132534,132535],{"align":410},"同时清除左右侧浮动的影响",[19,132537,132538],{},"法一",[19,132540,132541],{},"额外标签法也称为隔墙法",[19,132543,132544],{},"使用方式：",[19,132546,132547],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[58,132549,132550],{"className":127990,"code":132456,"language":127992,"meta":63,"style":63},[32,132551,132552,132558,132568,132572,132578,132588],{"__ignoreMap":63},[67,132553,132554,132556],{"class":69,"line":70},[67,132555,132463],{"class":110},[67,132557,17369],{"class":73},[67,132559,132560,132562,132564,132566],{"class":69,"line":191},[67,132561,132470],{"class":77},[67,132563,53203],{"class":73},[67,132565,410],{"class":77},[67,132567,3148],{"class":73},[67,132569,132570],{"class":69,"line":202},[67,132571,3419],{"class":73},[67,132573,132574,132576],{"class":69,"line":641},[67,132575,132485],{"class":110},[67,132577,17369],{"class":73},[67,132579,132580,132582,132584,132586],{"class":69,"line":655},[67,132581,132470],{"class":77},[67,132583,53203],{"class":73},[67,132585,74282],{"class":77},[67,132587,3148],{"class":73},[67,132589,132590],{"class":69,"line":660},[67,132591,3419],{"class":73},[19,132593,132594],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132596,132597],{},"优点： 通俗易懂，书写方便",[19,132599,132600],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132602,132603],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132605,132606],{},"法二",[19,132608,132609],{},"父级添加overflow属性",[58,132611,132612],{"className":127990,"code":132456,"language":127992,"meta":63,"style":63},[32,132613,132614,132620,132630,132634,132640,132650],{"__ignoreMap":63},[67,132615,132616,132618],{"class":69,"line":70},[67,132617,132463],{"class":110},[67,132619,17369],{"class":73},[67,132621,132622,132624,132626,132628],{"class":69,"line":191},[67,132623,132470],{"class":77},[67,132625,53203],{"class":73},[67,132627,410],{"class":77},[67,132629,3148],{"class":73},[67,132631,132632],{"class":69,"line":202},[67,132633,3419],{"class":73},[67,132635,132636,132638],{"class":69,"line":641},[67,132637,132485],{"class":110},[67,132639,17369],{"class":73},[67,132641,132642,132644,132646,132648],{"class":69,"line":655},[67,132643,132470],{"class":77},[67,132645,53203],{"class":73},[67,132647,74282],{"class":77},[67,132649,3148],{"class":73},[67,132651,132652],{"class":69,"line":660},[67,132653,3419],{"class":73},[19,132655,132656],{},"overflow: hidden;",[19,132658,132659],{},"优点：代码简洁",[19,132661,132662],{},"缺点：无法显示溢出的部分",[19,132664,132665],{},"注意：是给父元素添加代码",[19,132667,132668],{},"法三",[19,132670,132671],{},"父级添加after伪元素",[19,132673,132674,132677],{},[132675,132676],"after",{}," 方式是额外标签法的升级版",[19,132679,132680],{},"使用的时候复制就可以",[58,132682,132683],{"className":127990,"code":132456,"language":127992,"meta":63,"style":63},[32,132684,132685,132691,132701,132705,132711,132721],{"__ignoreMap":63},[67,132686,132687,132689],{"class":69,"line":70},[67,132688,132463],{"class":110},[67,132690,17369],{"class":73},[67,132692,132693,132695,132697,132699],{"class":69,"line":191},[67,132694,132470],{"class":77},[67,132696,53203],{"class":73},[67,132698,410],{"class":77},[67,132700,3148],{"class":73},[67,132702,132703],{"class":69,"line":202},[67,132704,3419],{"class":73},[67,132706,132707,132709],{"class":69,"line":641},[67,132708,132485],{"class":110},[67,132710,17369],{"class":73},[67,132712,132713,132715,132717,132719],{"class":69,"line":655},[67,132714,132470],{"class":77},[67,132716,53203],{"class":73},[67,132718,74282],{"class":77},[67,132720,3148],{"class":73},[67,132722,132723],{"class":69,"line":660},[67,132724,3419],{"class":73},[19,132726,132727],{},"优点：没有增加标签，结构更简单",[19,132729,132730],{},"缺点：照顾低版本浏览器",[19,132732,132733],{},"代表网站： 百度、淘宝网、网易等",[19,132735,132736],{},"法四",[19,132738,132739],{},"父级添加双伪元素",[58,132741,132742],{"className":127990,"code":132456,"language":127992,"meta":63,"style":63},[32,132743,132744,132750,132760,132764,132770,132780],{"__ignoreMap":63},[67,132745,132746,132748],{"class":69,"line":70},[67,132747,132463],{"class":110},[67,132749,17369],{"class":73},[67,132751,132752,132754,132756,132758],{"class":69,"line":191},[67,132753,132470],{"class":77},[67,132755,53203],{"class":73},[67,132757,410],{"class":77},[67,132759,3148],{"class":73},[67,132761,132762],{"class":69,"line":202},[67,132763,3419],{"class":73},[67,132765,132766,132768],{"class":69,"line":641},[67,132767,132485],{"class":110},[67,132769,17369],{"class":73},[67,132771,132772,132774,132776,132778],{"class":69,"line":655},[67,132773,132470],{"class":77},[67,132775,53203],{"class":73},[67,132777,74282],{"class":77},[67,132779,3148],{"class":73},[67,132781,132782],{"class":69,"line":660},[67,132783,3419],{"class":73},[19,132785,132786],{},"优点：代码更简洁",[19,132788,132730],{},[19,132790,132791],{},"代表网站：小米、腾讯等",[14,132793,132795],{"id":132794},"_93-ps切图","9.3 PS切图",[391,132797,132799],{"id":132798},"_931-常见图片格式","9.3.1 常见图片格式",[399,132801,132802,132812],{},[402,132803,132804],{},[405,132805,132806,132809],{},[408,132807,132808],{"align":410},"jpg图像格式",[408,132810,132811],{"align":410},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[419,132813,132814,132822,132830],{},[405,132815,132816,132819],{},[424,132817,132818],{"align":410},"gif图像格式",[424,132820,132821],{"align":410},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[405,132823,132824,132827],{},[424,132825,132826],{"align":410},"png图像格式",[424,132828,132829],{"align":410},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[405,132831,132832,132835],{},[424,132833,132834],{"align":410},"PSD图像格式",[424,132836,132837],{"align":410},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[391,132839,132841],{"id":132840},"_932-图层切图","9.3.2 图层切图",[19,132843,132844],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132846,132847],{},"按住shift选中两个图层->图层菜单->合并图层",[391,132849,132851],{"id":132850},"_933-切片切图","9.3.3 切片切图",[2994,132853,132854,132857],{},[29,132855,132856],{},"利用切片工具手动划出",[29,132858,132859],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[391,132861,132863],{"id":132862},"_934-切图步骤","9.3.4 切图步骤",[19,132865,132866],{},"用切片工具选中：",[3317,132868],{"style":127846,"src":132869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132871,132872],{},"文件 -> 导出",[3317,132874],{"style":127846,"src":132875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1903,132877,132878],{},"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":63,"searchDepth":191,"depth":191,"links":132880},[132881,132890,132894],{"id":131317,"depth":191,"text":131318,"children":132882},[132883,132884,132885,132886,132887,132888,132889],{"id":131342,"depth":202,"text":131343},{"id":131633,"depth":202,"text":131634},{"id":131762,"depth":202,"text":131763},{"id":131962,"depth":202,"text":131963},{"id":132004,"depth":202,"text":132005},{"id":132042,"depth":202,"text":132043},{"id":132132,"depth":202,"text":132133},{"id":132412,"depth":191,"text":132413,"children":132891},[132892,132893],{"id":132416,"depth":202,"text":132417},{"id":132423,"depth":202,"text":132424},{"id":132794,"depth":191,"text":132795,"children":132895},[132896,132897,132898,132899],{"id":132798,"depth":202,"text":132799},{"id":132840,"depth":202,"text":132841},{"id":132850,"depth":202,"text":132851},{"id":132862,"depth":202,"text":132863},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131309,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132906,"title":132907,"body":132908,"description":25173,"extension":1930,"meta":133549,"navigation":630,"path":133550,"seo":133551,"stem":133552,"__hash__":133553},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132909,"toc":133537},[132910,132913,132917,132943,132977,132981,132985,132988,133030,133037,133047,133055,133057,133060,133063,133066,133073,133087,133091,133094,133123,133127,133130,133144,133148,133151,133179,133183,133186,133212,133216,133221,133254,133259,133287,133291,133308,133354,133359,133403,133420,133527,133535],[10,132911,132907],{"id":132912},"_10-css规范与学成在线案例",[14,132914,132916],{"id":132915},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[26,132918,132919,132925,132931,132937],{},[29,132920,132921,132924],{},[2144,132922,132923],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[29,132926,132927,132930],{},[2144,132928,132929],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[29,132932,132933,132936],{},[2144,132934,132935],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[29,132938,132939,132942],{},[2144,132940,132941],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[58,132944,132945],{"className":127990,"code":131354,"language":127992,"meta":63,"style":63},[32,132946,132947,132951,132957,132973],{"__ignoreMap":63},[67,132948,132949],{"class":69,"line":70},[67,132950,131361],{"class":2058},[67,132952,132953,132955],{"class":69,"line":191},[67,132954,53377],{"class":262},[67,132956,17369],{"class":73},[67,132958,132959,132961,132963,132965,132967,132969,132971],{"class":69,"line":202},[67,132960,72656],{"class":77},[67,132962,53203],{"class":73},[67,132964,2209],{"class":77},[67,132966,53258],{"class":84},[67,132968,53287],{"class":77},[67,132970,131382],{"class":77},[67,132972,3148],{"class":73},[67,132974,132975],{"class":69,"line":641},[67,132976,3419],{"class":73},[14,132978,132980],{"id":132979},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[391,132982,132984],{"id":132983},"_1021-header头部制作","10.2.1 header头部制作",[3317,132986],{"style":127846,"src":132987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[2994,132989,132990,132997,133004,133010,133017,133024],{},[29,132991,132992,132993,132996],{},"1号是版心盒子 ",[2144,132994,132995],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[29,132998,132999,133000,133003],{},"版心盒子 里面包含 2号盒子 ",[2144,133001,133002],{},"logo"," 图标",[29,133005,133006,133007,133009],{},"版心盒子 里面包含 3号盒子 ",[2144,133008,55475],{}," 导航栏",[29,133011,133012,133013,133016],{},"版心盒子 里面包含 4号盒子 ",[2144,133014,133015],{},"search"," 搜索框",[29,133018,133019,133020,133023],{},"版心盒子 里面包含 5号盒子 ",[2144,133021,133022],{},"user"," 个人信息",[29,133025,133026,133027],{},"注意，要求里面的 ",[2144,133028,133029],{},"4个子盒子 必须都浮动",[26,133031,133032],{},[29,133033,133034],{},[2144,133035,133036],{},"导航栏注意点:",[19,133038,133039,133040,133043,133044],{},"实际开发中， ",[2144,133041,133042],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2144,133045,133046],{},"用 li 包含链接(li+a)的做法",[2994,133048,133049,133052],{},[29,133050,133051],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[29,133053,133054],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133056,10831],{},[19,133058,133059],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133061,133062],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133064,133065],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[26,133067,133068],{"start":191},[29,133069,133070],{},[2144,133071,133072],{},"4号盒子search的细节：",[2994,133074,133075,133078,133081],{},[29,133076,133077],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[29,133079,133080],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[29,133082,133083,133086],{},[32,133084,133085],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[391,133088,133090],{"id":133089},"_1022-banner制作","10.2.2 banner制作",[3317,133092],{"style":127846,"src":133093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[2994,133095,133096,133103,133109,133116],{},[29,133097,133098,133099,133102],{},"1号盒子是通栏的大盒子 ",[2144,133100,133101],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[29,133104,133105,133106,133108],{},"2号盒子是版心 ",[2144,133107,2784],{}," ， 要水平居中对齐",[29,133110,133111,133112,133115],{},"3号盒子版心内，左对齐 ",[2144,133113,133114],{},"subnav"," 侧导航栏",[29,133117,133118,133119,133122],{},"4号盒子版心内，右对齐 ",[2144,133120,133121],{},"course"," 课程",[391,133124,133126],{"id":133125},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3317,133128],{"style":127846,"src":133129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[2994,133131,133132,133135,133138,133141],{},[29,133133,133134],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[29,133136,133137],{},"1号盒子是标题 H3 左侧浮动",[29,133139,133140],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[29,133142,133143],{},"3号盒子 右浮动 mod 修改",[391,133145,133147],{"id":133146},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3317,133149],{"style":127846,"src":133150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[2994,133152,133153,133159,133166,133173,133176],{},[29,133154,133155,133156,133158],{},"1号盒子为最大的盒子 ",[2144,133157,55476],{}," 版心水平居中对齐",[29,133160,133161,133162,133165],{},"2号盒子为上面部分 ",[2144,133163,133164],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[29,133167,133168,133169,133172],{},"3号盒子为底下部分 ",[2144,133170,133171],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[29,133174,133175],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[29,133177,133178],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[391,133180,133182],{"id":133181},"_1025-底部模块制作","10.2.5 底部模块制作",[3317,133184],{"style":127846,"src":133185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[2994,133187,133188,133195,133198,133205],{},[29,133189,133190,133191,133194],{},"1号盒子通栏大盒子 底部 ",[2144,133192,133193],{},"footer"," 给高度 底色是白色",[29,133196,133197],{},"2号盒子版心水平居中",[29,133199,133200,133201,133204],{},"3号盒子版权 ",[2144,133202,133203],{},"copyright"," 左对齐",[29,133206,133207,133208,133211],{},"4号盒子 链接组 ",[2144,133209,133210],{},"links"," 右对齐",[391,133213,133215],{"id":133214},"_1026-代码模块","10.2.6 代码模块",[26,133217,133218],{},[29,133219,133220],{},"html部分",[58,133222,133224],{"className":128737,"code":133223,"language":128739,"meta":63,"style":63},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[32,133225,133226],{"__ignoreMap":63},[67,133227,133228,133230,133232,133234,133236,133239,133242,133244,133247,133250,133252],{"class":69,"line":70},[67,133229,259],{"class":73},[67,133231,2230],{"class":262},[67,133233,62818],{"class":110},[67,133235,85],{"class":73},[67,133237,133238],{"class":114},"\"https:\u002F\u002Fexample.com\"",[67,133240,133241],{"class":110}," target",[67,133243,85],{"class":73},[67,133245,133246],{"class":114},"\"_blank\"",[67,133248,133249],{"class":73},">链接文字\u003C\u002F",[67,133251,2230],{"class":262},[67,133253,323],{"class":73},[26,133255,133256],{"start":191},[29,133257,133258],{},"css部分",[58,133260,133261],{"className":128737,"code":133223,"language":128739,"meta":63,"style":63},[32,133262,133263],{"__ignoreMap":63},[67,133264,133265,133267,133269,133271,133273,133275,133277,133279,133281,133283,133285],{"class":69,"line":70},[67,133266,259],{"class":73},[67,133268,2230],{"class":262},[67,133270,62818],{"class":110},[67,133272,85],{"class":73},[67,133274,133238],{"class":114},[67,133276,133241],{"class":110},[67,133278,85],{"class":73},[67,133280,133246],{"class":114},[67,133282,133249],{"class":73},[67,133284,2230],{"class":262},[67,133286,323],{"class":73},[391,133288,133290],{"id":133289},"_1027-收获","10.2.7 收获",[26,133292,133293,133296,133299,133302,133305],{},[29,133294,133295],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[29,133297,133298],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[29,133300,133301],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[29,133303,133304],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[29,133306,133307],{},"遗忘代码",[58,133309,133311],{"className":127990,"code":133310,"language":127992,"meta":63,"style":63},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[32,133312,133313,133335,133340,133350],{"__ignoreMap":63},[67,133314,133315,133317,133319,133321,133323,133325,133327,133329,133331,133333],{"class":69,"line":70},[67,133316,53377],{"class":262},[67,133318,1868],{"class":73},[67,133320,19],{"class":262},[67,133322,1868],{"class":73},[67,133324,10],{"class":262},[67,133326,1868],{"class":73},[67,133328,2994],{"class":262},[67,133330,1868],{"class":73},[67,133332,29],{"class":262},[67,133334,17369],{"class":73},[67,133336,133337],{"class":69,"line":191},[67,133338,133339],{"class":2058},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[67,133341,133342,133344,133346,133348],{"class":69,"line":202},[67,133343,129606],{"class":77},[67,133345,53203],{"class":73},[67,133347,62630],{"class":77},[67,133349,3148],{"class":73},[67,133351,133352],{"class":69,"line":641},[67,133353,3419],{"class":73},[26,133355,133356],{"start":660},[29,133357,133358],{},"html引css的程序",[58,133360,133361],{"className":127990,"code":133310,"language":127992,"meta":63,"style":63},[32,133362,133363,133385,133389,133399],{"__ignoreMap":63},[67,133364,133365,133367,133369,133371,133373,133375,133377,133379,133381,133383],{"class":69,"line":70},[67,133366,53377],{"class":262},[67,133368,1868],{"class":73},[67,133370,19],{"class":262},[67,133372,1868],{"class":73},[67,133374,10],{"class":262},[67,133376,1868],{"class":73},[67,133378,2994],{"class":262},[67,133380,1868],{"class":73},[67,133382,29],{"class":262},[67,133384,17369],{"class":73},[67,133386,133387],{"class":69,"line":191},[67,133388,133339],{"class":2058},[67,133390,133391,133393,133395,133397],{"class":69,"line":202},[67,133392,129606],{"class":77},[67,133394,53203],{"class":73},[67,133396,62630],{"class":77},[67,133398,3148],{"class":73},[67,133400,133401],{"class":69,"line":641},[67,133402,3419],{"class":73},[26,133404,133405,133408,133411,133414,133417],{"start":665},[29,133406,133407],{},"浮动的盒子不会有外边距合并问题",[29,133409,133410],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[29,133412,133413],{},"ctrl+g快速定位行；shift+alt多个光标",[29,133415,133416],{},"学习上方各个模块的选择器起名方法，以后就这样用",[29,133418,133419],{},"在写选择器时尽量写全一些，例如",[58,133421,133423],{"className":127990,"code":133422,"language":127992,"meta":63,"style":63},"\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",[32,133424,133425,133430,133446,133451,133466,133471,133486,133491,133506,133511],{"__ignoreMap":63},[67,133426,133427],{"class":69,"line":70},[67,133428,133429],{"class":2058},"\u002F* 静态定位（默认） *\u002F\n",[67,133431,133432,133435,133437,133439,133441,133444],{"class":69,"line":191},[67,133433,133434],{"class":110},".static",[67,133436,81567],{"class":73},[67,133438,130350],{"class":77},[67,133440,53203],{"class":73},[67,133442,133443],{"class":77},"static",[67,133445,130920],{"class":73},[67,133447,133448],{"class":69,"line":202},[67,133449,133450],{"class":2058},"\u002F* 相对定位 *\u002F\n",[67,133452,133453,133456,133458,133460,133462,133464],{"class":69,"line":641},[67,133454,133455],{"class":110},".relative",[67,133457,81567],{"class":73},[67,133459,130350],{"class":77},[67,133461,53203],{"class":73},[67,133463,56525],{"class":77},[67,133465,130920],{"class":73},[67,133467,133468],{"class":69,"line":655},[67,133469,133470],{"class":2058},"\u002F* 绝对定位 *\u002F\n",[67,133472,133473,133476,133478,133480,133482,133484],{"class":69,"line":660},[67,133474,133475],{"class":110},".absolute",[67,133477,81567],{"class":73},[67,133479,130350],{"class":77},[67,133481,53203],{"class":73},[67,133483,56592],{"class":77},[67,133485,130920],{"class":73},[67,133487,133488],{"class":69,"line":665},[67,133489,133490],{"class":2058},"\u002F* 固定定位 *\u002F\n",[67,133492,133493,133496,133498,133500,133502,133504],{"class":69,"line":677},[67,133494,133495],{"class":110},".fixed",[67,133497,81567],{"class":73},[67,133499,130350],{"class":77},[67,133501,53203],{"class":73},[67,133503,87992],{"class":77},[67,133505,130920],{"class":73},[67,133507,133508],{"class":69,"line":683},[67,133509,133510],{"class":2058},"\u002F* 粘性定位 *\u002F\n",[67,133512,133513,133516,133518,133520,133522,133525],{"class":69,"line":689},[67,133514,133515],{"class":110},".sticky",[67,133517,81567],{"class":73},[67,133519,130350],{"class":77},[67,133521,53203],{"class":73},[67,133523,133524],{"class":77},"sticky",[67,133526,130920],{"class":73},[26,133528,133529,133532],{"start":700},[29,133530,133531],{},"一定要用好注释",[29,133533,133534],{},"浮动的盒子不会有外边距合并的问题",[1903,133536,132878],{},{"title":63,"searchDepth":191,"depth":191,"links":133538},[133539,133540],{"id":132915,"depth":191,"text":132916},{"id":132979,"depth":191,"text":132980,"children":133541},[133542,133543,133544,133545,133546,133547,133548],{"id":132983,"depth":202,"text":132984},{"id":133089,"depth":202,"text":133090},{"id":133125,"depth":202,"text":133126},{"id":133146,"depth":202,"text":133147},{"id":133181,"depth":202,"text":133182},{"id":133214,"depth":202,"text":133215},{"id":133289,"depth":202,"text":133290},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132907,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133555,"title":133556,"body":133557,"description":25173,"extension":1930,"meta":135043,"navigation":630,"path":135044,"seo":135045,"stem":135046,"__hash__":135047},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133558,"toc":135035},[133559,133562,133566,133570,133581,133585,133602,133646,133679,133682,133699,133702,133705,133749,133753,133757,133760,133763,133767,133770,133781,133844,133885,133888,133903,133957,133965,133968,133979,134033,134059,134062,134075,134129,134161,134215,134238,134292,134295,134298,134305,134359,134380,134434,134437,134440,134525,134533,134590,134613,134617,134620,134638,134642,134661,134715,134753,134757,134760,134763,134785,134789,134797,134800,134805,134816,134819,134823,134837,134881,134884,134888,134891,134896,134922,134927,135004,135007,135011,135014,135017,135020,135023,135026,135029,135032],[10,133560,133556],{"id":133561},"_11-传统布局与定位体系",[14,133563,133565],{"id":133564},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[391,133567,133569],{"id":133568},"_1111-普通流标准流","11.1.1 普通流（标准流）",[2994,133571,133572,133575,133578],{},[29,133573,133574],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[29,133576,133577],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[29,133579,133580],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[391,133582,133584],{"id":133583},"_1112-浮动","11.1.2 浮动",[2994,133586,133587,133590,133593,133596,133599],{},[29,133588,133589],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[29,133591,133592],{},"浮动可以改变元素标签默认的排列方式",[29,133594,133595],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[29,133597,133598],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[29,133600,133601],{},"在使用行内块转换时盒子之间是有空隙的",[58,133603,133604],{"className":127990,"code":132456,"language":127992,"meta":63,"style":63},[32,133605,133606,133612,133622,133626,133632,133642],{"__ignoreMap":63},[67,133607,133608,133610],{"class":69,"line":70},[67,133609,132463],{"class":110},[67,133611,17369],{"class":73},[67,133613,133614,133616,133618,133620],{"class":69,"line":191},[67,133615,132470],{"class":77},[67,133617,53203],{"class":73},[67,133619,410],{"class":77},[67,133621,3148],{"class":73},[67,133623,133624],{"class":69,"line":202},[67,133625,3419],{"class":73},[67,133627,133628,133630],{"class":69,"line":641},[67,133629,132485],{"class":110},[67,133631,17369],{"class":73},[67,133633,133634,133636,133638,133640],{"class":69,"line":655},[67,133635,132470],{"class":77},[67,133637,53203],{"class":73},[67,133639,74282],{"class":77},[67,133641,3148],{"class":73},[67,133643,133644],{"class":69,"line":660},[67,133645,3419],{"class":73},[399,133647,133648,133656],{},[402,133649,133650],{},[405,133651,133652,133654],{},[408,133653,128454],{"align":410},[408,133655,29275],{"align":410},[419,133657,133658,133665,133672],{},[405,133659,133660,133662],{},[424,133661,56498],{"align":410},[424,133663,133664],{"align":410},"元素不浮动（默认值）",[405,133666,133667,133669],{},[424,133668,410],{"align":410},[424,133670,133671],{"align":410},"元素向左浮动",[405,133673,133674,133676],{},[424,133675,74282],{"align":410},[424,133677,133678],{"align":410},"元素向右浮动",[19,133680,133681],{},"浮动重点：",[2994,133683,133684,133687,133690,133693,133696],{},[29,133685,133686],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[29,133688,133689],{},"浮动的元素会一行内显示并且元素顶部对齐",[29,133691,133692],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[29,133694,133695],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[29,133697,133698],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133700,133701],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133703,133704],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[58,133706,133707],{"className":127990,"code":132456,"language":127992,"meta":63,"style":63},[32,133708,133709,133715,133725,133729,133735,133745],{"__ignoreMap":63},[67,133710,133711,133713],{"class":69,"line":70},[67,133712,132463],{"class":110},[67,133714,17369],{"class":73},[67,133716,133717,133719,133721,133723],{"class":69,"line":191},[67,133718,132470],{"class":77},[67,133720,53203],{"class":73},[67,133722,410],{"class":77},[67,133724,3148],{"class":73},[67,133726,133727],{"class":69,"line":202},[67,133728,3419],{"class":73},[67,133730,133731,133733],{"class":69,"line":641},[67,133732,132485],{"class":110},[67,133734,17369],{"class":73},[67,133736,133737,133739,133741,133743],{"class":69,"line":655},[67,133738,132470],{"class":77},[67,133740,53203],{"class":73},[67,133742,74282],{"class":77},[67,133744,3148],{"class":73},[67,133746,133747],{"class":69,"line":660},[67,133748,3419],{"class":73},[391,133750,133752],{"id":133751},"_1113-定位","11.1.3 定位",[23794,133754,133756],{"id":133755},"_11131-使用场景","11.1.3.1 使用场景",[19,133758,133759],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133761,133762],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23794,133764,133766],{"id":133765},"_11132-定位组成","11.1.3.2 定位组成",[19,133768,133769],{},"定位 = 定位模式 + 边偏移",[26,133771,133772],{},[29,133773,133774,133777,133778],{},[2144,133775,133776],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2144,133779,133780],{},"定位模式",[58,133782,133784],{"className":127990,"code":133783,"language":127992,"meta":63,"style":63},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[32,133785,133786,133792,133806,133823,133840],{"__ignoreMap":63},[67,133787,133788,133790],{"class":69,"line":70},[67,133789,131838],{"class":110},[67,133791,17369],{"class":73},[67,133793,133794,133797,133799,133801,133803],{"class":69,"line":191},[67,133795,133796],{"class":77},"  position",[67,133798,53203],{"class":73},[67,133800,56525],{"class":77},[67,133802,131853],{"class":73},[67,133804,133805],{"class":2058},"\u002F* 定位模式 *\u002F\n",[67,133807,133808,133811,133813,133815,133817,133820],{"class":69,"line":202},[67,133809,133810],{"class":77},"  top",[67,133812,53203],{"class":73},[67,133814,2437],{"class":77},[67,133816,53258],{"class":84},[67,133818,133819],{"class":73},";           ",[67,133821,133822],{"class":2058},"\u002F* 边偏移：上 *\u002F\n",[67,133824,133825,133828,133830,133832,133834,133837],{"class":69,"line":641},[67,133826,133827],{"class":77},"  left",[67,133829,53203],{"class":73},[67,133831,2689],{"class":77},[67,133833,53258],{"class":84},[67,133835,133836],{"class":73},";          ",[67,133838,133839],{"class":2058},"\u002F* 边偏移：左 *\u002F\n",[67,133841,133842],{"class":69,"line":655},[67,133843,3419],{"class":73},[399,133845,133846,133855],{},[402,133847,133848],{},[405,133849,133850,133852],{},[408,133851,2147],{"align":410},[408,133853,133854],{"align":410},"语义",[419,133856,133857,133864,133871,133878],{},[405,133858,133859,133861],{},[424,133860,133443],{"align":410},[424,133862,133863],{"align":410},"静态定位",[405,133865,133866,133868],{},[424,133867,56525],{"align":410},[424,133869,133870],{"align":410},"相对定位",[405,133872,133873,133875],{},[424,133874,56592],{"align":410},[424,133876,133877],{"align":410},"绝对定位",[405,133879,133880,133882],{},[424,133881,87992],{"align":410},[424,133883,133884],{"align":410},"固定定位",[19,133886,133887],{},"（1）静态定位：",[2994,133889,133890,133901],{},[29,133891,133892,133893,133896,133897,133900],{},"静态定位是元素的 ",[2144,133894,133895],{},"默认定位方式"," ， ",[2144,133898,133899],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[29,133902,7000],{},[58,133904,133905],{"className":127990,"code":133783,"language":127992,"meta":63,"style":63},[32,133906,133907,133913,133925,133939,133953],{"__ignoreMap":63},[67,133908,133909,133911],{"class":69,"line":70},[67,133910,131838],{"class":110},[67,133912,17369],{"class":73},[67,133914,133915,133917,133919,133921,133923],{"class":69,"line":191},[67,133916,133796],{"class":77},[67,133918,53203],{"class":73},[67,133920,56525],{"class":77},[67,133922,131853],{"class":73},[67,133924,133805],{"class":2058},[67,133926,133927,133929,133931,133933,133935,133937],{"class":69,"line":202},[67,133928,133810],{"class":77},[67,133930,53203],{"class":73},[67,133932,2437],{"class":77},[67,133934,53258],{"class":84},[67,133936,133819],{"class":73},[67,133938,133822],{"class":2058},[67,133940,133941,133943,133945,133947,133949,133951],{"class":69,"line":641},[67,133942,133827],{"class":77},[67,133944,53203],{"class":73},[67,133946,2689],{"class":77},[67,133948,53258],{"class":84},[67,133950,133836],{"class":73},[67,133952,133839],{"class":2058},[67,133954,133955],{"class":69,"line":655},[67,133956,3419],{"class":73},[2994,133958,133959,133962],{},[29,133960,133961],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[29,133963,133964],{},"静态定位在布局时我们几乎不用的",[19,133966,133967],{},"（2）相对定位",[2994,133969,133970,133977],{},[29,133971,133972,133973,133976],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2144,133974,133975],{},"原来的位置"," 来说的（自恋型）",[29,133978,7000],{},[58,133980,133981],{"className":127990,"code":133783,"language":127992,"meta":63,"style":63},[32,133982,133983,133989,134001,134015,134029],{"__ignoreMap":63},[67,133984,133985,133987],{"class":69,"line":70},[67,133986,131838],{"class":110},[67,133988,17369],{"class":73},[67,133990,133991,133993,133995,133997,133999],{"class":69,"line":191},[67,133992,133796],{"class":77},[67,133994,53203],{"class":73},[67,133996,56525],{"class":77},[67,133998,131853],{"class":73},[67,134000,133805],{"class":2058},[67,134002,134003,134005,134007,134009,134011,134013],{"class":69,"line":202},[67,134004,133810],{"class":77},[67,134006,53203],{"class":73},[67,134008,2437],{"class":77},[67,134010,53258],{"class":84},[67,134012,133819],{"class":73},[67,134014,133822],{"class":2058},[67,134016,134017,134019,134021,134023,134025,134027],{"class":69,"line":641},[67,134018,133827],{"class":77},[67,134020,53203],{"class":73},[67,134022,2689],{"class":77},[67,134024,53258],{"class":84},[67,134026,133836],{"class":73},[67,134028,133839],{"class":2058},[67,134030,134031],{"class":69,"line":655},[67,134032,3419],{"class":73},[2994,134034,134035],{},[29,134036,134037,134038,134040,134041,134043,134044,134047,134048,134051,134052,134054,134055,134058],{},"相对定位的特点：",[55478,134039],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55478,134042],{},"  ② ",[2144,134045,134046],{},"原来"," 在标准流的 ",[2144,134049,134050],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55478,134053],{},"  ③因此， ",[2144,134056,134057],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134060,134061],{},"（3）绝对定位",[2994,134063,134064,134073],{},[29,134065,134066,134068,134069,134072],{},[2144,134067,133877],{}," 是元素在移动位置的时候，是相对于它 ",[2144,134070,134071],{},"祖先元素"," 来说的（拼爹型）",[29,134074,7000],{},[58,134076,134077],{"className":127990,"code":133783,"language":127992,"meta":63,"style":63},[32,134078,134079,134085,134097,134111,134125],{"__ignoreMap":63},[67,134080,134081,134083],{"class":69,"line":70},[67,134082,131838],{"class":110},[67,134084,17369],{"class":73},[67,134086,134087,134089,134091,134093,134095],{"class":69,"line":191},[67,134088,133796],{"class":77},[67,134090,53203],{"class":73},[67,134092,56525],{"class":77},[67,134094,131853],{"class":73},[67,134096,133805],{"class":2058},[67,134098,134099,134101,134103,134105,134107,134109],{"class":69,"line":202},[67,134100,133810],{"class":77},[67,134102,53203],{"class":73},[67,134104,2437],{"class":77},[67,134106,53258],{"class":84},[67,134108,133819],{"class":73},[67,134110,133822],{"class":2058},[67,134112,134113,134115,134117,134119,134121,134123],{"class":69,"line":641},[67,134114,133827],{"class":77},[67,134116,53203],{"class":73},[67,134118,2689],{"class":77},[67,134120,53258],{"class":84},[67,134122,133836],{"class":73},[67,134124,133839],{"class":2058},[67,134126,134127],{"class":69,"line":655},[67,134128,3419],{"class":73},[2994,134130,134131,134146,134155,134158],{},[29,134132,134133,134134,134136,134137,134139,134140,134142,134143,134145],{},"绝对定位的特点：",[55478,134135],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55478,134138],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55478,134141],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55478,134144],{},"  (4)固定定位",[29,134147,134148,134150,134151,134154],{},[2144,134149,133884],{}," 是元素 ",[2144,134152,134153],{},"固定于浏览器可视区的位置"," 。（认死理型）",[29,134156,134157],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[29,134159,134160],{},"语法:",[58,134162,134163],{"className":127990,"code":133783,"language":127992,"meta":63,"style":63},[32,134164,134165,134171,134183,134197,134211],{"__ignoreMap":63},[67,134166,134167,134169],{"class":69,"line":70},[67,134168,131838],{"class":110},[67,134170,17369],{"class":73},[67,134172,134173,134175,134177,134179,134181],{"class":69,"line":191},[67,134174,133796],{"class":77},[67,134176,53203],{"class":73},[67,134178,56525],{"class":77},[67,134180,131853],{"class":73},[67,134182,133805],{"class":2058},[67,134184,134185,134187,134189,134191,134193,134195],{"class":69,"line":202},[67,134186,133810],{"class":77},[67,134188,53203],{"class":73},[67,134190,2437],{"class":77},[67,134192,53258],{"class":84},[67,134194,133819],{"class":73},[67,134196,133822],{"class":2058},[67,134198,134199,134201,134203,134205,134207,134209],{"class":69,"line":641},[67,134200,133827],{"class":77},[67,134202,53203],{"class":73},[67,134204,2689],{"class":77},[67,134206,53258],{"class":84},[67,134208,133836],{"class":73},[67,134210,133839],{"class":2058},[67,134212,134213],{"class":69,"line":655},[67,134214,3419],{"class":73},[2994,134216,134217,134226],{},[29,134218,134219,134220,134222,134223,134225],{},"特点:",[55478,134221],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55478,134224],{},"  ②固定定位不再占有原先的位置,完全脱标",[29,134227,134228,134229,134231,134232,134234,134235,134237],{},"固定在版心位置的方法:",[55478,134230],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55478,134233],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55478,134236],{},"  实例：",[58,134239,134240],{"className":127990,"code":133783,"language":127992,"meta":63,"style":63},[32,134241,134242,134248,134260,134274,134288],{"__ignoreMap":63},[67,134243,134244,134246],{"class":69,"line":70},[67,134245,131838],{"class":110},[67,134247,17369],{"class":73},[67,134249,134250,134252,134254,134256,134258],{"class":69,"line":191},[67,134251,133796],{"class":77},[67,134253,53203],{"class":73},[67,134255,56525],{"class":77},[67,134257,131853],{"class":73},[67,134259,133805],{"class":2058},[67,134261,134262,134264,134266,134268,134270,134272],{"class":69,"line":202},[67,134263,133810],{"class":77},[67,134265,53203],{"class":73},[67,134267,2437],{"class":77},[67,134269,53258],{"class":84},[67,134271,133819],{"class":73},[67,134273,133822],{"class":2058},[67,134275,134276,134278,134280,134282,134284,134286],{"class":69,"line":641},[67,134277,133827],{"class":77},[67,134279,53203],{"class":73},[67,134281,2689],{"class":77},[67,134283,53258],{"class":84},[67,134285,133836],{"class":73},[67,134287,133839],{"class":2058},[67,134289,134290],{"class":69,"line":655},[67,134291,3419],{"class":73},[3317,134293],{"style":127846,"src":134294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134296,134297],{},"(5)粘性定位",[2994,134299,134300,134303],{},[29,134301,134302],{},"粘性定位可以被认为是相对定位和固定定位的混合",[29,134304,7000],{},[58,134306,134307],{"className":127990,"code":133783,"language":127992,"meta":63,"style":63},[32,134308,134309,134315,134327,134341,134355],{"__ignoreMap":63},[67,134310,134311,134313],{"class":69,"line":70},[67,134312,131838],{"class":110},[67,134314,17369],{"class":73},[67,134316,134317,134319,134321,134323,134325],{"class":69,"line":191},[67,134318,133796],{"class":77},[67,134320,53203],{"class":73},[67,134322,56525],{"class":77},[67,134324,131853],{"class":73},[67,134326,133805],{"class":2058},[67,134328,134329,134331,134333,134335,134337,134339],{"class":69,"line":202},[67,134330,133810],{"class":77},[67,134332,53203],{"class":73},[67,134334,2437],{"class":77},[67,134336,53258],{"class":84},[67,134338,133819],{"class":73},[67,134340,133822],{"class":2058},[67,134342,134343,134345,134347,134349,134351,134353],{"class":69,"line":641},[67,134344,133827],{"class":77},[67,134346,53203],{"class":73},[67,134348,2689],{"class":77},[67,134350,53258],{"class":84},[67,134352,133836],{"class":73},[67,134354,133839],{"class":2058},[67,134356,134357],{"class":69,"line":655},[67,134358,3419],{"class":73},[2994,134360,134361],{},[29,134362,134363,134364,134366,134367,134369,134370,134372,134373,134376,134377,134379],{},"粘性定位的特点：",[55478,134365],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55478,134368],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55478,134371],{},"  ③必须添加 top 、left、right、bottom ",[2144,134374,134375],{},"其中一个"," 才有效",[55478,134378],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[58,134381,134382],{"className":127990,"code":133783,"language":127992,"meta":63,"style":63},[32,134383,134384,134390,134402,134416,134430],{"__ignoreMap":63},[67,134385,134386,134388],{"class":69,"line":70},[67,134387,131838],{"class":110},[67,134389,17369],{"class":73},[67,134391,134392,134394,134396,134398,134400],{"class":69,"line":191},[67,134393,133796],{"class":77},[67,134395,53203],{"class":73},[67,134397,56525],{"class":77},[67,134399,131853],{"class":73},[67,134401,133805],{"class":2058},[67,134403,134404,134406,134408,134410,134412,134414],{"class":69,"line":202},[67,134405,133810],{"class":77},[67,134407,53203],{"class":73},[67,134409,2437],{"class":77},[67,134411,53258],{"class":84},[67,134413,133819],{"class":73},[67,134415,133822],{"class":2058},[67,134417,134418,134420,134422,134424,134426,134428],{"class":69,"line":641},[67,134419,133827],{"class":77},[67,134421,53203],{"class":73},[67,134423,2689],{"class":77},[67,134425,53258],{"class":84},[67,134427,133836],{"class":73},[67,134429,133839],{"class":2058},[67,134431,134432],{"class":69,"line":655},[67,134433,3419],{"class":73},[3317,134435],{"style":127846,"src":134436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134438,134439],{},"(6)总结",[399,134441,134442,134457],{},[402,134443,134444],{},[405,134445,134446,134448,134451,134454],{},[408,134447,133780],{"align":410},[408,134449,134450],{"align":410},"是否脱标",[408,134452,134453],{"align":410},"移动位置",[408,134455,134456],{"align":410},"是否常用",[419,134458,134459,134472,134486,134500,134513],{},[405,134460,134461,134464,134466,134469],{},[424,134462,134463],{"align":410},"Static 静态定位",[424,134465,106347],{"align":410},[424,134467,134468],{"align":410},"不能使用边偏移",[424,134470,134471],{"align":410},"很少",[405,134473,134474,134477,134480,134483],{},[424,134475,134476],{"align":410},"Relative 相对定位",[424,134478,134479],{"align":410},"否(占有位置)",[424,134481,134482],{"align":410},"相对于自身位置移动",[424,134484,134485],{"align":410},"基本单独使用",[405,134487,134488,134491,134494,134497],{},[424,134489,134490],{"align":410},"Absolute 绝对定位",[424,134492,134493],{"align":410},"是(不占有位置)",[424,134495,134496],{"align":410},"带有定位的父级",[424,134498,134499],{"align":410},"要和定位父级元素搭配使用",[405,134501,134502,134505,134507,134510],{},[424,134503,134504],{"align":410},"Fixed 固定定位",[424,134506,134493],{"align":410},[424,134508,134509],{"align":410},"浏览器可视区",[424,134511,134512],{"align":410},"单独使用,不需要父级",[405,134514,134515,134518,134520,134522],{},[424,134516,134517],{"align":410},"Sticky 粘性定位",[424,134519,134479],{"align":410},[424,134521,134509],{"align":410},[424,134523,134524],{"align":410},"当前阶段少",[26,134526,134527],{"start":191},[29,134528,134529,134532],{},[2144,134530,134531],{},"边偏移"," 则决定了该元素的最终位置",[399,134534,134535,134546],{},[402,134536,134537],{},[405,134538,134539,134542,134544],{},[408,134540,134541],{"align":410},"边偏移属性",[408,134543,29278],{"align":410},[408,134545,29275],{"align":410},[419,134547,134548,134559,134570,134580],{},[405,134549,134550,134553,134556],{},[424,134551,134552],{"align":410},"top",[424,134554,134555],{"align":410},"top: 80px;",[424,134557,134558],{"align":410},"顶端偏移量，定义元素相对于父元素上边线的距离",[405,134560,134561,134564,134567],{},[424,134562,134563],{"align":410},"bottom",[424,134565,134566],{"align":410},"bottom: 80px ;",[424,134568,134569],{"align":410},"底部偏移量，定义元素相对于其父元素下边线的距离",[405,134571,134572,134574,134577],{},[424,134573,410],{"align":410},[424,134575,134576],{"align":410},"left: 80px ;",[424,134578,134579],{"align":410},"左侧偏移量，定义元素相对于其父元素左边线的距离",[405,134581,134582,134584,134587],{},[424,134583,74282],{"align":410},[424,134585,134586],{"align":410},"right: 80px ;",[424,134588,134589],{"align":410},"右侧偏移量，定义元素相对于其父元素右边线的距离",[2994,134591,134592],{},[29,134593,10831,134594,134596,134597,134599,134600,134602,134603,134606,134607,134609,134610,134612],{},[55478,134595],{},"  ① ",[2144,134598,134531],{}," 需要和 ",[2144,134601,133780],{}," 联合使用， ",[2144,134604,134605],{},"单独使用无效"," ；",[55478,134608],{},"  ②top和bottom不要同时使用",[55478,134611],{},"  ③left和right不要同时使用",[23794,134614,134616],{"id":134615},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134618,134619],{},"子级是绝对定位的话，父级要用相对定位",[2994,134621,134622,134625,134628,134631],{},[29,134623,134624],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[29,134626,134627],{},"父盒子需要加定位限制子盒子在父盒子内显示",[29,134629,134630],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[29,134632,134633,134634,134637],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2144,134635,134636],{},"子绝父绝"," 也会遇到",[23794,134639,134641],{"id":134640},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[2994,134643,134644,134659],{},[29,134645,134646,134647,134650,134651,134654,134655,134658],{},"在使用 ",[2144,134648,134649],{},"定位"," 布局时，可能会 ",[2144,134652,134653],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2144,134656,134657],{},"z-index"," 来控制盒子的前后次序 (z轴)",[29,134660,7000],{},[58,134662,134663],{"className":127990,"code":133783,"language":127992,"meta":63,"style":63},[32,134664,134665,134671,134683,134697,134711],{"__ignoreMap":63},[67,134666,134667,134669],{"class":69,"line":70},[67,134668,131838],{"class":110},[67,134670,17369],{"class":73},[67,134672,134673,134675,134677,134679,134681],{"class":69,"line":191},[67,134674,133796],{"class":77},[67,134676,53203],{"class":73},[67,134678,56525],{"class":77},[67,134680,131853],{"class":73},[67,134682,133805],{"class":2058},[67,134684,134685,134687,134689,134691,134693,134695],{"class":69,"line":202},[67,134686,133810],{"class":77},[67,134688,53203],{"class":73},[67,134690,2437],{"class":77},[67,134692,53258],{"class":84},[67,134694,133819],{"class":73},[67,134696,133822],{"class":2058},[67,134698,134699,134701,134703,134705,134707,134709],{"class":69,"line":641},[67,134700,133827],{"class":77},[67,134702,53203],{"class":73},[67,134704,2689],{"class":77},[67,134706,53258],{"class":84},[67,134708,133836],{"class":73},[67,134710,133839],{"class":2058},[67,134712,134713],{"class":69,"line":655},[67,134714,3419],{"class":73},[2994,134716,134717],{},[29,134718,134719,134720,134596,134722,134724,134725,129153,134728,84298,134731,134733,134734,134736,134737,134740,134741,134606,134744,134746,134747,134750,134752],{},"z-index的特性",[55478,134721],{},[2144,134723,128454],{}," ： ",[2144,134726,134727],{},"正整数",[2144,134729,134730],{},"负整数",[2144,134732,78],{}," ，默认值是 0，数值越大，盒子越靠上；",[55478,134735],{},"  ②如果 ",[2144,134738,134739],{},"属性值相同"," ，则按照书写顺序， ",[2144,134742,134743],{},"后来居上",[55478,134745],{},"  ③数字后面 ",[2144,134748,134749],{},"不能加单位",[55478,134751],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23794,134754,134756],{"id":134755},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134758,134759],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134761,134762],{},"方法:",[2994,134764,134765,134775],{},[29,134766,134767,134768,134771,134772],{},"left: 50%; 让 ",[2144,134769,134770],{},"盒子的左侧"," 移动到 ",[2144,134773,134774],{},"父级元素的水平中心位置",[29,134776,134777,134778,134781,134782],{},"margin-left: -100px; 让盒子 ",[2144,134779,134780],{},"向左"," 移动 ",[2144,134783,134784],{},"自身宽度的一半",[23794,134786,134788],{"id":134787},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[26,134790,134791,134794],{},[29,134792,134793],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[29,134795,134796],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134798,134799],{},"也就是说绝对定位和固定定位和浮动类似",[26,134801,134802],{"start":202},[29,134803,134804],{},"display 是显示模式， 可以改变显示模式有以下方式:",[2994,134806,134807,134810,134813],{},[29,134808,134809],{},"可以用inline-block 转换为行内块",[29,134811,134812],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[29,134814,134815],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134817,134818],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23794,134820,134822],{"id":134821},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[26,134824,134825,134828,134831,134834],{},[29,134826,134827],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[29,134829,134830],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[29,134832,134833],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[29,134835,134836],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[58,134838,134839],{"className":127990,"code":132456,"language":127992,"meta":63,"style":63},[32,134840,134841,134847,134857,134861,134867,134877],{"__ignoreMap":63},[67,134842,134843,134845],{"class":69,"line":70},[67,134844,132463],{"class":110},[67,134846,17369],{"class":73},[67,134848,134849,134851,134853,134855],{"class":69,"line":191},[67,134850,132470],{"class":77},[67,134852,53203],{"class":73},[67,134854,410],{"class":77},[67,134856,3148],{"class":73},[67,134858,134859],{"class":69,"line":202},[67,134860,3419],{"class":73},[67,134862,134863,134865],{"class":69,"line":641},[67,134864,132485],{"class":110},[67,134866,17369],{"class":73},[67,134868,134869,134871,134873,134875],{"class":69,"line":655},[67,134870,132470],{"class":77},[67,134872,53203],{"class":73},[67,134874,74282],{"class":77},[67,134876,3148],{"class":73},[67,134878,134879],{"class":69,"line":660},[67,134880,3419],{"class":73},[3317,134882],{"style":127846,"src":134883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23794,134885,134887],{"id":134886},"_11138-轮播图","11.1.3.8 轮播图",[3317,134889],{"style":127846,"src":134890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[26,134892,134893],{},[29,134894,134895],{},"制作顺序:",[2994,134897,134898,134901,134904,134913],{},[29,134899,134900],{},"大盒子我们类名为： tb-promo 淘宝广告",[29,134902,134903],{},"里面先放一张图片",[29,134905,134906,134907,134909,134910,134912],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55478,134908],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55478,134911],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[29,134914,134915,134916,134918,134919,134921],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55478,134917],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55478,134920],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[26,134923,134924],{"start":191},[29,134925,134926],{},"代码模块",[58,134928,134930],{"className":127990,"code":134929,"language":127992,"meta":63,"style":63},"\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",[32,134931,134932,134937,134944,134954,134964,134974,134978,134983,134990,135000],{"__ignoreMap":63},[67,134933,134934],{"class":69,"line":70},[67,134935,134936],{"class":2058},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[67,134938,134939,134942],{"class":69,"line":191},[67,134940,134941],{"class":110},".son",[67,134943,17369],{"class":73},[67,134945,134946,134948,134950,134952],{"class":69,"line":202},[67,134947,133796],{"class":77},[67,134949,53203],{"class":73},[67,134951,56592],{"class":77},[67,134953,3148],{"class":73},[67,134955,134956,134958,134960,134962],{"class":69,"line":641},[67,134957,133810],{"class":77},[67,134959,53203],{"class":73},[67,134961,78],{"class":77},[67,134963,3148],{"class":73},[67,134965,134966,134968,134970,134972],{"class":69,"line":655},[67,134967,133827],{"class":77},[67,134969,53203],{"class":73},[67,134971,78],{"class":77},[67,134973,3148],{"class":73},[67,134975,134976],{"class":69,"line":660},[67,134977,3419],{"class":73},[67,134979,134980],{"class":69,"line":665},[67,134981,134982],{"class":2058},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[67,134984,134985,134988],{"class":69,"line":677},[67,134986,134987],{"class":110},".father",[67,134989,17369],{"class":73},[67,134991,134992,134994,134996,134998],{"class":69,"line":683},[67,134993,133796],{"class":77},[67,134995,53203],{"class":73},[67,134997,56525],{"class":77},[67,134999,3148],{"class":73},[67,135001,135002],{"class":69,"line":689},[67,135003,3419],{"class":73},[19,135005,135006],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[391,135008,135010],{"id":135009},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3317,135012],{"style":127846,"src":135013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135015,135016],{},"✨ 黄金口诀：",[19,135018,135019],{},"\"TOP正下负上，LEFT正右负左\"",[19,135021,135022],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135024,135025],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135027,135028],{},"✨ 简单记：",[19,135030,135031],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1903,135033,135034],{},"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":63,"searchDepth":191,"depth":191,"links":135036},[135037],{"id":133564,"depth":191,"text":133565,"children":135038},[135039,135040,135041,135042],{"id":133568,"depth":202,"text":133569},{"id":133583,"depth":202,"text":133584},{"id":133751,"depth":202,"text":133752},{"id":135009,"depth":202,"text":135010},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133556,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135049,"title":135050,"body":135051,"description":25173,"extension":1930,"meta":136474,"navigation":630,"path":136475,"seo":136476,"stem":136477,"__hash__":136478},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135052,"toc":136453},[135053,135056,135060,135068,135072,135077,135085,135097,135101,135106,135114,135125,135129,135134,135175,135183,135187,135190,135193,135196,135290,135293,135387,135390,135484,135487,135490,135525,135528,135531,135561,135564,135567,135570,135573,135576,135579,135582,135652,135655,135659,135663,135704,135708,135714,135717,135720,135724,135727,135730,135733,135814,135817,135820,135824,135828,135831,135834,135837,135840,135843,135849,135858,135862,135881,135885,135895,135898,135901,135904,135907,135910,135913,135916,135919,135928,135932,135941,135944,135949,136002,136007,136173,136176,136179,136184,136187,136190,136193,136196,136201,136349,136352,136355,136360,136363,136368,136402,136405,136408,136412,136415,136422,136425,136428,136431,136434,136437,136440,136443,136447,136450],[10,135054,135050],{"id":135055},"_12-显示隐藏与图形资源",[14,135057,135059],{"id":135058},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[2994,135061,135062,135065],{},[29,135063,135064],{},"目的:让一个元素在页面中消失或者显示出来",[29,135066,135067],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[391,135069,135071],{"id":135070},"_1211-display-显示","12.1.1 display 显示",[26,135073,135074],{},[29,135075,135076],{},"display 设置或检索对象是否及如何显示",[2994,135078,135079,135082],{},[29,135080,135081],{},"display: none;隐藏对象",[29,135083,135084],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[26,135086,135087,135094],{"start":191},[29,135088,135089,135090,135093],{},"特点： display 隐藏元素后， ",[2144,135091,135092],{},"不再占"," 有原来的位置",[29,135095,135096],{},"在js中使用非常的广泛",[391,135098,135100],{"id":135099},"_1212-visibility可见性","12.1.2 visibility可见性",[26,135102,135103],{},[29,135104,135105],{},"visibility 属性用于指定一个元素应可见还是隐藏",[2994,135107,135108,135111],{},[29,135109,135110],{},"visibility： visible；元素可见",[29,135112,135113],{},"visibility：hidden；元素隐藏",[26,135115,135116,135119,135122],{"start":191},[29,135117,135118],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[29,135120,135121],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[29,135123,135124],{},"隐藏后继续占有原有位置",[391,135126,135128],{"id":135127},"_1213-overflow溢出","12.1.3 overflow溢出",[2994,135130,135131],{},[29,135132,135133],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[399,135135,135136,135144],{},[402,135137,135138],{},[405,135139,135140,135142],{},[408,135141,128454],{"align":410},[408,135143,29275],{"align":410},[419,135145,135146,135154,135161,135168],{},[405,135147,135148,135151],{},[424,135149,135150],{"align":410},"visible",[424,135152,135153],{"align":410},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[405,135155,135156,135158],{},[424,135157,63475],{"align":410},[424,135159,135160],{"align":410},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[405,135162,135163,135165],{},[424,135164,130410],{"align":410},[424,135166,135167],{"align":410},"不管超出内容否，总是显示滚动条",[405,135169,135170,135172],{},[424,135171,74423],{"align":410},[424,135173,135174],{"align":410},"超出自动显示滚动条，不超出不显示滚动条",[2994,135176,135177,135180],{},[29,135178,135179],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[29,135181,135182],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[391,135184,135186],{"id":135185},"_1214-案例收获","12.1.4 案例收获",[3317,135188],{"style":127846,"src":135189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135191,135192],{},"问题：没做出来动态效果，使用hover没实现",[19,135194,135195],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[58,135197,135198],{"className":127990,"code":133422,"language":127992,"meta":63,"style":63},[32,135199,135200,135204,135218,135222,135236,135240,135254,135258,135272,135276],{"__ignoreMap":63},[67,135201,135202],{"class":69,"line":70},[67,135203,133429],{"class":2058},[67,135205,135206,135208,135210,135212,135214,135216],{"class":69,"line":191},[67,135207,133434],{"class":110},[67,135209,81567],{"class":73},[67,135211,130350],{"class":77},[67,135213,53203],{"class":73},[67,135215,133443],{"class":77},[67,135217,130920],{"class":73},[67,135219,135220],{"class":69,"line":202},[67,135221,133450],{"class":2058},[67,135223,135224,135226,135228,135230,135232,135234],{"class":69,"line":641},[67,135225,133455],{"class":110},[67,135227,81567],{"class":73},[67,135229,130350],{"class":77},[67,135231,53203],{"class":73},[67,135233,56525],{"class":77},[67,135235,130920],{"class":73},[67,135237,135238],{"class":69,"line":655},[67,135239,133470],{"class":2058},[67,135241,135242,135244,135246,135248,135250,135252],{"class":69,"line":660},[67,135243,133475],{"class":110},[67,135245,81567],{"class":73},[67,135247,130350],{"class":77},[67,135249,53203],{"class":73},[67,135251,56592],{"class":77},[67,135253,130920],{"class":73},[67,135255,135256],{"class":69,"line":665},[67,135257,133490],{"class":2058},[67,135259,135260,135262,135264,135266,135268,135270],{"class":69,"line":677},[67,135261,133495],{"class":110},[67,135263,81567],{"class":73},[67,135265,130350],{"class":77},[67,135267,53203],{"class":73},[67,135269,87992],{"class":77},[67,135271,130920],{"class":73},[67,135273,135274],{"class":69,"line":683},[67,135275,133510],{"class":2058},[67,135277,135278,135280,135282,135284,135286,135288],{"class":69,"line":689},[67,135279,133515],{"class":110},[67,135281,81567],{"class":73},[67,135283,130350],{"class":77},[67,135285,53203],{"class":73},[67,135287,133524],{"class":77},[67,135289,130920],{"class":73},[19,135291,135292],{},"完整代码：",[58,135294,135295],{"className":127990,"code":133422,"language":127992,"meta":63,"style":63},[32,135296,135297,135301,135315,135319,135333,135337,135351,135355,135369,135373],{"__ignoreMap":63},[67,135298,135299],{"class":69,"line":70},[67,135300,133429],{"class":2058},[67,135302,135303,135305,135307,135309,135311,135313],{"class":69,"line":191},[67,135304,133434],{"class":110},[67,135306,81567],{"class":73},[67,135308,130350],{"class":77},[67,135310,53203],{"class":73},[67,135312,133443],{"class":77},[67,135314,130920],{"class":73},[67,135316,135317],{"class":69,"line":202},[67,135318,133450],{"class":2058},[67,135320,135321,135323,135325,135327,135329,135331],{"class":69,"line":641},[67,135322,133455],{"class":110},[67,135324,81567],{"class":73},[67,135326,130350],{"class":77},[67,135328,53203],{"class":73},[67,135330,56525],{"class":77},[67,135332,130920],{"class":73},[67,135334,135335],{"class":69,"line":655},[67,135336,133470],{"class":2058},[67,135338,135339,135341,135343,135345,135347,135349],{"class":69,"line":660},[67,135340,133475],{"class":110},[67,135342,81567],{"class":73},[67,135344,130350],{"class":77},[67,135346,53203],{"class":73},[67,135348,56592],{"class":77},[67,135350,130920],{"class":73},[67,135352,135353],{"class":69,"line":665},[67,135354,133490],{"class":2058},[67,135356,135357,135359,135361,135363,135365,135367],{"class":69,"line":677},[67,135358,133495],{"class":110},[67,135360,81567],{"class":73},[67,135362,130350],{"class":77},[67,135364,53203],{"class":73},[67,135366,87992],{"class":77},[67,135368,130920],{"class":73},[67,135370,135371],{"class":69,"line":683},[67,135372,133510],{"class":2058},[67,135374,135375,135377,135379,135381,135383,135385],{"class":69,"line":689},[67,135376,133515],{"class":110},[67,135378,81567],{"class":73},[67,135380,130350],{"class":77},[67,135382,53203],{"class":73},[67,135384,133524],{"class":77},[67,135386,130920],{"class":73},[19,135388,135389],{},"分布思路重点详解：",[58,135391,135392],{"className":127990,"code":133422,"language":127992,"meta":63,"style":63},[32,135393,135394,135398,135412,135416,135430,135434,135448,135452,135466,135470],{"__ignoreMap":63},[67,135395,135396],{"class":69,"line":70},[67,135397,133429],{"class":2058},[67,135399,135400,135402,135404,135406,135408,135410],{"class":69,"line":191},[67,135401,133434],{"class":110},[67,135403,81567],{"class":73},[67,135405,130350],{"class":77},[67,135407,53203],{"class":73},[67,135409,133443],{"class":77},[67,135411,130920],{"class":73},[67,135413,135414],{"class":69,"line":202},[67,135415,133450],{"class":2058},[67,135417,135418,135420,135422,135424,135426,135428],{"class":69,"line":641},[67,135419,133455],{"class":110},[67,135421,81567],{"class":73},[67,135423,130350],{"class":77},[67,135425,53203],{"class":73},[67,135427,56525],{"class":77},[67,135429,130920],{"class":73},[67,135431,135432],{"class":69,"line":655},[67,135433,133470],{"class":2058},[67,135435,135436,135438,135440,135442,135444,135446],{"class":69,"line":660},[67,135437,133475],{"class":110},[67,135439,81567],{"class":73},[67,135441,130350],{"class":77},[67,135443,53203],{"class":73},[67,135445,56592],{"class":77},[67,135447,130920],{"class":73},[67,135449,135450],{"class":69,"line":665},[67,135451,133490],{"class":2058},[67,135453,135454,135456,135458,135460,135462,135464],{"class":69,"line":677},[67,135455,133495],{"class":110},[67,135457,81567],{"class":73},[67,135459,130350],{"class":77},[67,135461,53203],{"class":73},[67,135463,87992],{"class":77},[67,135465,130920],{"class":73},[67,135467,135468],{"class":69,"line":683},[67,135469,133510],{"class":2058},[67,135471,135472,135474,135476,135478,135480,135482],{"class":69,"line":689},[67,135473,133515],{"class":110},[67,135475,81567],{"class":73},[67,135477,130350],{"class":77},[67,135479,53203],{"class":73},[67,135481,133524],{"class":77},[67,135483,130920],{"class":73},[3317,135485],{"style":127846,"src":135486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135488,135489],{},"图片太大，盒子太小，此时需要修改图片的大小",[58,135491,135493],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[32,135494,135495],{"__ignoreMap":63},[67,135496,135497,135499,135501,135503,135505,135508,135510,135512,135515,135518,135520,135523],{"class":69,"line":70},[67,135498,259],{"class":73},[67,135500,3317],{"class":262},[67,135502,57000],{"class":110},[67,135504,85],{"class":73},[67,135506,135507],{"class":114},"\"images\u002Fpic.jpg\"",[67,135509,57008],{"class":110},[67,135511,85],{"class":73},[67,135513,135514],{"class":114},"\"描述文字\"",[67,135516,135517],{"class":110}," title",[67,135519,85],{"class":73},[67,135521,135522],{"class":114},"\"悬停提示\"",[67,135524,323],{"class":73},[3317,135526],{"style":127846,"src":135527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135529,135530],{},"制造遮罩层",[58,135532,135533],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,135534,135535],{"__ignoreMap":63},[67,135536,135537,135539,135541,135543,135545,135547,135549,135551,135553,135555,135557,135559],{"class":69,"line":70},[67,135538,259],{"class":73},[67,135540,3317],{"class":262},[67,135542,57000],{"class":110},[67,135544,85],{"class":73},[67,135546,135507],{"class":114},[67,135548,57008],{"class":110},[67,135550,85],{"class":73},[67,135552,135514],{"class":114},[67,135554,135517],{"class":110},[67,135556,85],{"class":73},[67,135558,135522],{"class":114},[67,135560,323],{"class":73},[19,135562,135563],{},"此时是这样的为标准流",[3317,135565],{"style":127846,"src":135566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135568,135569],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135571,135572],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135574,135575],{},"让他在中间，用center(background-position)",[19,135577,135578],{},"将需要变的尽可能放到一个盒子中",[19,135580,135581],{},"放大盒子上内部盒子发生变化",[58,135583,135585],{"className":127990,"code":135584,"language":127992,"meta":63,"style":63},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[32,135586,135587,135593,135603,135607,135614,135624,135636,135648],{"__ignoreMap":63},[67,135588,135589,135591],{"class":69,"line":70},[67,135590,129057],{"class":110},[67,135592,17369],{"class":73},[67,135594,135595,135597,135599,135601],{"class":69,"line":191},[67,135596,133796],{"class":77},[67,135598,53203],{"class":73},[67,135600,56525],{"class":77},[67,135602,3148],{"class":73},[67,135604,135605],{"class":69,"line":202},[67,135606,3419],{"class":73},[67,135608,135609,135612],{"class":69,"line":641},[67,135610,135611],{"class":110},".child",[67,135613,17369],{"class":73},[67,135615,135616,135618,135620,135622],{"class":69,"line":655},[67,135617,133796],{"class":77},[67,135619,53203],{"class":73},[67,135621,56592],{"class":77},[67,135623,3148],{"class":73},[67,135625,135626,135628,135630,135632,135634],{"class":69,"line":660},[67,135627,133810],{"class":77},[67,135629,53203],{"class":73},[67,135631,2645],{"class":77},[67,135633,2319],{"class":84},[67,135635,3148],{"class":73},[67,135637,135638,135640,135642,135644,135646],{"class":69,"line":665},[67,135639,133827],{"class":77},[67,135641,53203],{"class":73},[67,135643,2645],{"class":77},[67,135645,2319],{"class":84},[67,135647,3148],{"class":73},[67,135649,135650],{"class":69,"line":677},[67,135651,3419],{"class":73},[19,135653,135654],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135656,135658],{"id":135657},"_122-精灵图","12.2 精灵图",[391,135660,135662],{"id":135661},"_1221-理解","12.2.1 理解",[26,135664,135665,135683],{},[29,135666,135667,135668,133896,135671,135674,135675,135678,135679,135682],{},"目的： ",[2144,135669,135670],{},"为了有效地减少服务器接收和发送请求的次数",[2144,135672,135673],{},"提高"," 页面的 ",[2144,135676,135677],{},"加载速度"," ，出现了 ",[2144,135680,135681],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[29,135684,135685,135686,135688,135689,135691,135692,135694,135695,135697,135698,135700,135701,135703],{},"使用精灵图核心：",[55478,135687],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55478,135690],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55478,135693],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55478,135696],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55478,135699],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55478,135702],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[391,135705,135707],{"id":135706},"_1222-扒图","12.2.2 扒图",[58,135709,135712],{"className":135710,"code":135711,"language":603},[601],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[32,135713,135711],{"__ignoreMap":63},[3317,135715],{"style":127846,"src":135716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3317,135718],{"style":127846,"src":135719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[391,135721,135723],{"id":135722},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3317,135725],{"style":127846,"src":135726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135728,135729],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3317,135731],{"style":127846,"src":135732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[58,135734,135736],{"className":127990,"code":135735,"language":127992,"meta":63,"style":63},"\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",[32,135737,135738,135743,135750,135762,135774,135793,135810],{"__ignoreMap":63},[67,135739,135740],{"class":69,"line":70},[67,135741,135742],{"class":2058},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[67,135744,135745,135748],{"class":69,"line":191},[67,135746,135747],{"class":110},".icon",[67,135749,17369],{"class":73},[67,135751,135752,135754,135756,135758,135760],{"class":69,"line":202},[67,135753,72328],{"class":77},[67,135755,53203],{"class":73},[67,135757,2689],{"class":77},[67,135759,53258],{"class":84},[67,135761,3148],{"class":73},[67,135763,135764,135766,135768,135770,135772],{"class":69,"line":641},[67,135765,72548],{"class":77},[67,135767,53203],{"class":73},[67,135769,2689],{"class":77},[67,135771,53258],{"class":84},[67,135773,3148],{"class":73},[67,135775,135776,135778,135780,135782,135784,135787,135789,135791],{"class":69,"line":655},[67,135777,72371],{"class":77},[67,135779,53203],{"class":73},[67,135781,63487],{"class":77},[67,135783,854],{"class":73},[67,135785,135786],{"class":7033},"sprites.png",[67,135788,15512],{"class":73},[67,135790,63497],{"class":77},[67,135792,3148],{"class":73},[67,135794,135795,135797,135799,135801,135803,135806,135808],{"class":69,"line":660},[67,135796,130250],{"class":77},[67,135798,53203],{"class":73},[67,135800,53529],{"class":77},[67,135802,53258],{"class":84},[67,135804,135805],{"class":77}," -20",[67,135807,53258],{"class":84},[67,135809,3148],{"class":73},[67,135811,135812],{"class":69,"line":665},[67,135813,3419],{"class":73},[3317,135815],{"style":127846,"src":135816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135818,135819],{},"在前端中坐标轴的正方向是右和下",[14,135821,135823],{"id":135822},"_123-字体图标","12.3 字体图标",[391,135825,135827],{"id":135826},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135829,135830],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135832,135833],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135835,135836],{},"1.图片文件还是比较大的。",[19,135838,135839],{},"2.图片本身放大和缩小会失真。",[19,135841,135842],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135844,135845,135846,27530],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2144,135847,135848],{},"字体图标 iconfont",[19,135850,135851,135854,135855,230],{},[2144,135852,135853],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2144,135856,135857],{},"展示的是图标，本质属于字体",[391,135859,135861],{"id":135860},"_1232-字体图标的优点","12.3.2 字体图标的优点",[2994,135863,135864,135869,135872,135875,135878],{},[29,135865,135866,135868],{},[2144,135867,27665],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[29,135870,135871],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[29,135873,135874],{},"兼容性：几乎支持所有的浏览器，请放心使用",[29,135876,135877],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[29,135879,135880],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[391,135882,135884],{"id":135883},"_1233-字体库下载网站","12.3.3 字体库下载网站",[2994,135886,135887],{},[29,135888,135889,135890],{},"icomoon字体库：",[2230,135891,135894],{"href":135892,"rel":135893},"http:\u002F\u002Ficomoon.io\u002F",[25657],"http:\u002F\u002Ficomoon.io",[19,135896,135897],{},"进去之后点icomoon app",[3317,135899],{"style":127846,"src":135900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135902,135903],{},"可以对其编辑：",[3317,135905],{"style":127846,"src":135906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135908,135909],{},"生成字体：",[3317,135911],{"style":127846,"src":135912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135914,135915],{},"下载：",[3317,135917],{"style":127846,"src":135918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[2994,135920,135921],{},[29,135922,135923,135924],{},"阿里iconfont字体库： ",[2230,135925,135926],{"href":135926,"rel":135927},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25657],[391,135929,135931],{"id":135930},"_1234-字体图标的引入","12.3.4 字体图标的引入",[26,135933,135934],{},[29,135935,135936,135937,135940],{},"把下载包里面的 ",[2144,135938,135939],{},"fonts"," 文件夹放入页面根目录下",[3317,135942],{"style":127846,"src":135943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[26,135945,135946],{"start":191},[29,135947,135948],{},"字体文件格式",[399,135950,135951,135960],{},[402,135952,135953],{},[405,135954,135955,135958],{},[408,135956,135957],{"align":410},"格式",[408,135959,25536],{"align":410},[419,135961,135962,135972,135982,135992],{},[405,135963,135964,135969],{},[424,135965,135966],{"align":410},[2144,135967,135968],{},".ttf",[424,135970,135971],{"align":410},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[405,135973,135974,135979],{},[424,135975,135976],{"align":410},[2144,135977,135978],{},".woff",[424,135980,135981],{"align":410},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[405,135983,135984,135989],{},[424,135985,135986],{"align":410},[2144,135987,135988],{},".eot",[424,135990,135991],{"align":410},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[405,135993,135994,135999],{},[424,135995,135996],{"align":410},[2144,135997,135998],{},"svg",[424,136000,136001],{"align":410},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[26,136003,136004],{"start":202},[29,136005,136006],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[58,136008,136010],{"className":127990,"code":136009,"language":127992,"meta":63,"style":63},"\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",[32,136011,136012,136017,136024,136036,136052,136077,136098,136118,136138,136142,136148,136158,136169],{"__ignoreMap":63},[67,136013,136014],{"class":69,"line":70},[67,136015,136016],{"class":2058},"\u002F* 引入字体图标 *\u002F\n",[67,136018,136019,136022],{"class":69,"line":191},[67,136020,136021],{"class":84},"@font-face",[67,136023,17369],{"class":73},[67,136025,136026,136029,136031,136034],{"class":69,"line":202},[67,136027,136028],{"class":77},"  font-family",[67,136030,53203],{"class":73},[67,136032,136033],{"class":114},"'icomoon'",[67,136035,3148],{"class":73},[67,136037,136038,136041,136043,136045,136047,136050],{"class":69,"line":641},[67,136039,136040],{"class":77},"  src",[67,136042,53203],{"class":73},[67,136044,63487],{"class":77},[67,136046,854],{"class":73},[67,136048,136049],{"class":114},"'fonts\u002Ficomoon.eot'",[67,136051,4544],{"class":73},[67,136053,136054,136056,136058,136060,136062,136065,136067,136070,136072,136075],{"class":69,"line":655},[67,136055,136040],{"class":77},[67,136057,53203],{"class":73},[67,136059,63487],{"class":77},[67,136061,854],{"class":73},[67,136063,136064],{"class":114},"'fonts\u002Ficomoon.eot?#iefix'",[67,136066,15512],{"class":73},[67,136068,136069],{"class":77},"format",[67,136071,854],{"class":73},[67,136073,136074],{"class":114},"'embedded-opentype'",[67,136076,39815],{"class":73},[67,136078,136079,136082,136084,136087,136089,136091,136093,136096],{"class":69,"line":660},[67,136080,136081],{"class":77},"       url",[67,136083,854],{"class":73},[67,136085,136086],{"class":114},"'fonts\u002Ficomoon.woff'",[67,136088,15512],{"class":73},[67,136090,136069],{"class":77},[67,136092,854],{"class":73},[67,136094,136095],{"class":114},"'woff'",[67,136097,39815],{"class":73},[67,136099,136100,136102,136104,136107,136109,136111,136113,136116],{"class":69,"line":665},[67,136101,136081],{"class":77},[67,136103,854],{"class":73},[67,136105,136106],{"class":114},"'fonts\u002Ficomoon.ttf'",[67,136108,15512],{"class":73},[67,136110,136069],{"class":77},[67,136112,854],{"class":73},[67,136114,136115],{"class":114},"'truetype'",[67,136117,39815],{"class":73},[67,136119,136120,136122,136124,136127,136129,136131,136133,136136],{"class":69,"line":677},[67,136121,136081],{"class":77},[67,136123,854],{"class":73},[67,136125,136126],{"class":114},"'fonts\u002Ficomoon.svg#icomoon'",[67,136128,15512],{"class":73},[67,136130,136069],{"class":77},[67,136132,854],{"class":73},[67,136134,136135],{"class":114},"'svg'",[67,136137,4544],{"class":73},[67,136139,136140],{"class":69,"line":683},[67,136141,3419],{"class":73},[67,136143,136144,136146],{"class":69,"line":689},[67,136145,135747],{"class":110},[67,136147,17369],{"class":73},[67,136149,136150,136152,136154,136156],{"class":69,"line":694},[67,136151,136028],{"class":77},[67,136153,53203],{"class":73},[67,136155,136033],{"class":114},[67,136157,3148],{"class":73},[67,136159,136160,136163,136165,136167],{"class":69,"line":700},[67,136161,136162],{"class":77},"  font-style",[67,136164,53203],{"class":73},[67,136166,65601],{"class":77},[67,136168,3148],{"class":73},[67,136170,136171],{"class":69,"line":706},[67,136172,3419],{"class":73},[19,136174,136175],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3317,136177],{"style":127846,"src":136178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[26,136180,136181],{"start":641},[29,136182,136183],{},"添加字体",[3317,136185],{"style":127846,"src":136186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136188,136189],{},"复制：",[3317,136191],{"style":127846,"src":136192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136194,136195],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[26,136197,136198],{"start":655},[29,136199,136200],{},"代码展示：",[58,136202,136203],{"className":127990,"code":136009,"language":127992,"meta":63,"style":63},[32,136204,136205,136209,136215,136225,136239,136261,136279,136297,136315,136319,136325,136335,136345],{"__ignoreMap":63},[67,136206,136207],{"class":69,"line":70},[67,136208,136016],{"class":2058},[67,136210,136211,136213],{"class":69,"line":191},[67,136212,136021],{"class":84},[67,136214,17369],{"class":73},[67,136216,136217,136219,136221,136223],{"class":69,"line":202},[67,136218,136028],{"class":77},[67,136220,53203],{"class":73},[67,136222,136033],{"class":114},[67,136224,3148],{"class":73},[67,136226,136227,136229,136231,136233,136235,136237],{"class":69,"line":641},[67,136228,136040],{"class":77},[67,136230,53203],{"class":73},[67,136232,63487],{"class":77},[67,136234,854],{"class":73},[67,136236,136049],{"class":114},[67,136238,4544],{"class":73},[67,136240,136241,136243,136245,136247,136249,136251,136253,136255,136257,136259],{"class":69,"line":655},[67,136242,136040],{"class":77},[67,136244,53203],{"class":73},[67,136246,63487],{"class":77},[67,136248,854],{"class":73},[67,136250,136064],{"class":114},[67,136252,15512],{"class":73},[67,136254,136069],{"class":77},[67,136256,854],{"class":73},[67,136258,136074],{"class":114},[67,136260,39815],{"class":73},[67,136262,136263,136265,136267,136269,136271,136273,136275,136277],{"class":69,"line":660},[67,136264,136081],{"class":77},[67,136266,854],{"class":73},[67,136268,136086],{"class":114},[67,136270,15512],{"class":73},[67,136272,136069],{"class":77},[67,136274,854],{"class":73},[67,136276,136095],{"class":114},[67,136278,39815],{"class":73},[67,136280,136281,136283,136285,136287,136289,136291,136293,136295],{"class":69,"line":665},[67,136282,136081],{"class":77},[67,136284,854],{"class":73},[67,136286,136106],{"class":114},[67,136288,15512],{"class":73},[67,136290,136069],{"class":77},[67,136292,854],{"class":73},[67,136294,136115],{"class":114},[67,136296,39815],{"class":73},[67,136298,136299,136301,136303,136305,136307,136309,136311,136313],{"class":69,"line":677},[67,136300,136081],{"class":77},[67,136302,854],{"class":73},[67,136304,136126],{"class":114},[67,136306,15512],{"class":73},[67,136308,136069],{"class":77},[67,136310,854],{"class":73},[67,136312,136135],{"class":114},[67,136314,4544],{"class":73},[67,136316,136317],{"class":69,"line":683},[67,136318,3419],{"class":73},[67,136320,136321,136323],{"class":69,"line":689},[67,136322,135747],{"class":110},[67,136324,17369],{"class":73},[67,136326,136327,136329,136331,136333],{"class":69,"line":694},[67,136328,136028],{"class":77},[67,136330,53203],{"class":73},[67,136332,136033],{"class":114},[67,136334,3148],{"class":73},[67,136336,136337,136339,136341,136343],{"class":69,"line":700},[67,136338,136162],{"class":77},[67,136340,53203],{"class":73},[67,136342,65601],{"class":77},[67,136344,3148],{"class":73},[67,136346,136347],{"class":69,"line":706},[67,136348,3419],{"class":73},[3317,136350],{"style":127846,"src":136351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136353,136354],{},"更加细节展示：",[26,136356,136357],{},[29,136358,136359],{},"html 标签内添加小图标",[3317,136361],{"style":127846,"src":136362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[26,136364,136365],{"start":191},[29,136366,136367],{},"给标签定义字体",[58,136369,136370],{"className":128737,"code":132094,"language":128739,"meta":63,"style":63},[32,136371,136372,136376,136390,136394],{"__ignoreMap":63},[67,136373,136374],{"class":69,"line":70},[67,136375,132101],{"class":2058},[67,136377,136378,136380,136382,136384,136386,136388],{"class":69,"line":191},[67,136379,259],{"class":73},[67,136381,53377],{"class":262},[67,136383,55248],{"class":110},[67,136385,85],{"class":73},[67,136387,132114],{"class":114},[67,136389,323],{"class":73},[67,136391,136392],{"class":69,"line":202},[67,136393,132121],{"class":73},[67,136395,136396,136398,136400],{"class":69,"line":641},[67,136397,376],{"class":73},[67,136399,53377],{"class":262},[67,136401,323],{"class":73},[19,136403,136404],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3317,136406],{"style":127846,"src":136407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[391,136409,136411],{"id":136410},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136413,136414],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136416,136417,136418,136421],{},"把压缩包里面的 ",[2144,136419,136420],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136423,136424],{},"打开网站，点下方：",[3317,136426],{"style":127846,"src":136427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3317,136429],{"style":127846,"src":136430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3317,136432],{"style":127846,"src":136433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136435,136436],{},"点yes重新加载",[19,136438,136439],{},"然后重复之前的操作就可以实现了",[19,136441,136442],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[391,136444,136446],{"id":136445},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3317,136448],{"style":127846,"src":136449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1903,136451,136452],{},"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":63,"searchDepth":191,"depth":191,"links":136454},[136455,136461,136466],{"id":135058,"depth":191,"text":135059,"children":136456},[136457,136458,136459,136460],{"id":135070,"depth":202,"text":135071},{"id":135099,"depth":202,"text":135100},{"id":135127,"depth":202,"text":135128},{"id":135185,"depth":202,"text":135186},{"id":135657,"depth":191,"text":135658,"children":136462},[136463,136464,136465],{"id":135661,"depth":202,"text":135662},{"id":135706,"depth":202,"text":135707},{"id":135722,"depth":202,"text":135723},{"id":135822,"depth":191,"text":135823,"children":136467},[136468,136469,136470,136471,136472,136473],{"id":135826,"depth":202,"text":135827},{"id":135860,"depth":202,"text":135861},{"id":135883,"depth":202,"text":135884},{"id":135930,"depth":202,"text":135931},{"id":136410,"depth":202,"text":136411},{"id":136445,"depth":202,"text":136446},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135050,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136480,"title":136481,"body":136482,"description":25173,"extension":1930,"meta":137709,"navigation":630,"path":137710,"seo":137711,"stem":137712,"__hash__":137713},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136483,"toc":137690},[136484,136487,136491,136494,136508,136576,136606,136609,136613,136617,136719,136766,136770,136773,136776,136810,136813,136816,136819,136822,136825,136828,136831,136833,136836,136839,136842,136845,136848,136851,136854,136882,136885,136889,136892,136899,136902,136905,136931,136934,136938,136941,136944,136951,136955,136958,136960,136992,136995,136998,137010,137016,137019,137022,137025,137027,137031,137034,137037,137040,137085,137089,137091,137094,137101,137143,137146,137150,137155,137169,137173,137176,137179,137182,137185,137188,137222,137225,137228,137282,137285,137288,137291,137294,137346,137349,137352,137401,137405,137407,137410,137413,137416,137419,137422,137480,137483,137489,137492,137495,137527,137530,137534,137538,137541,137573,137577,137580,137624,137628,137631,137634,137637,137640,137643,137646,137649,137651,137654,137656,137659,137662,137665,137668,137673,137676,137678,137681,137684,137687],[10,136485,136481],{"id":136486},"_13-界面样式与布局技巧",[14,136488,136490],{"id":136489},"_131-css三角","13.1 css三角",[19,136492,136493],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[2994,136495,136496,136499,136502,136505],{},[29,136497,136498],{},"用css 边框可以模拟三角效果",[29,136500,136501],{},"宽度高度为0",[29,136503,136504],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[29,136506,136507],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[58,136509,136511],{"className":127990,"code":136510,"language":127992,"meta":63,"style":63},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[32,136512,136513,136518,136525,136535,136545,136561,136572],{"__ignoreMap":63},[67,136514,136515],{"class":69,"line":70},[67,136516,136517],{"class":2058},"\u002F* CSS 实现三角形 *\u002F\n",[67,136519,136520,136523],{"class":69,"line":191},[67,136521,136522],{"class":110},".triangle",[67,136524,17369],{"class":73},[67,136526,136527,136529,136531,136533],{"class":69,"line":202},[67,136528,72328],{"class":77},[67,136530,53203],{"class":73},[67,136532,78],{"class":77},[67,136534,3148],{"class":73},[67,136536,136537,136539,136541,136543],{"class":69,"line":641},[67,136538,72548],{"class":77},[67,136540,53203],{"class":73},[67,136542,78],{"class":77},[67,136544,3148],{"class":73},[67,136546,136547,136549,136551,136553,136555,136557,136559],{"class":69,"line":655},[67,136548,72656],{"class":77},[67,136550,53203],{"class":73},[67,136552,2437],{"class":77},[67,136554,53258],{"class":84},[67,136556,53287],{"class":77},[67,136558,65751],{"class":77},[67,136560,3148],{"class":73},[67,136562,136563,136566,136568,136570],{"class":69,"line":660},[67,136564,136565],{"class":77},"  border-bottom-color",[67,136567,53203],{"class":73},[67,136569,64129],{"class":77},[67,136571,3148],{"class":73},[67,136573,136574],{"class":69,"line":665},[67,136575,3419],{"class":73},[58,136577,136578],{"className":127990,"code":132147,"language":127992,"meta":63,"style":63},[32,136579,136580,136586,136602],{"__ignoreMap":63},[67,136581,136582,136584],{"class":69,"line":70},[67,136583,53377],{"class":262},[67,136585,17369],{"class":73},[67,136587,136588,136590,136592,136594,136596,136598,136600],{"class":69,"line":191},[67,136589,72656],{"class":77},[67,136591,53203],{"class":73},[67,136593,2209],{"class":77},[67,136595,53258],{"class":84},[67,136597,53287],{"class":77},[67,136599,131382],{"class":77},[67,136601,3148],{"class":73},[67,136603,136604],{"class":69,"line":202},[67,136605,3419],{"class":73},[3317,136607],{"style":127846,"src":136608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136610,136612],{"id":136611},"_132-css用户界面样式","13.2 css用户界面样式",[391,136614,136616],{"id":136615},"_1321-鼠标样式","13.2.1 鼠标样式",[58,136618,136620],{"className":127990,"code":136619,"language":127992,"meta":63,"style":63},"\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",[32,136621,136622,136627,136646,136664,136683,136700],{"__ignoreMap":63},[67,136623,136624],{"class":69,"line":70},[67,136625,136626],{"class":2058},"\u002F* 鼠标样式 *\u002F\n",[67,136628,136629,136631,136633,136636,136638,136640,136643],{"class":69,"line":191},[67,136630,53377],{"class":262},[67,136632,81567],{"class":73},[67,136634,136635],{"class":77},"cursor",[67,136637,53203],{"class":73},[67,136639,63790],{"class":77},[67,136641,136642],{"class":73},"; }   ",[67,136644,136645],{"class":2058},"\u002F* 手型 *\u002F\n",[67,136647,136648,136650,136652,136654,136656,136659,136661],{"class":69,"line":202},[67,136649,53377],{"class":262},[67,136651,81567],{"class":73},[67,136653,136635],{"class":77},[67,136655,53203],{"class":73},[67,136657,136658],{"class":77},"default",[67,136660,136642],{"class":73},[67,136662,136663],{"class":2058},"\u002F* 默认 *\u002F\n",[67,136665,136666,136668,136670,136672,136674,136677,136680],{"class":69,"line":641},[67,136667,53377],{"class":262},[67,136669,81567],{"class":73},[67,136671,136635],{"class":77},[67,136673,53203],{"class":73},[67,136675,136676],{"class":77},"move",[67,136678,136679],{"class":73},"; }      ",[67,136681,136682],{"class":2058},"\u002F* 移动 *\u002F\n",[67,136684,136685,136687,136689,136691,136693,136695,136697],{"class":69,"line":655},[67,136686,53377],{"class":262},[67,136688,81567],{"class":73},[67,136690,136635],{"class":77},[67,136692,53203],{"class":73},[67,136694,603],{"class":77},[67,136696,136679],{"class":73},[67,136698,136699],{"class":2058},"\u002F* 文本 *\u002F\n",[67,136701,136702,136704,136706,136708,136710,136713,136716],{"class":69,"line":660},[67,136703,53377],{"class":262},[67,136705,81567],{"class":73},[67,136707,136635],{"class":77},[67,136709,53203],{"class":73},[67,136711,136712],{"class":77},"not-allowed",[67,136714,136715],{"class":73},"; } ",[67,136717,136718],{"class":2058},"\u002F* 禁止 *\u002F\n",[399,136720,136721,136729],{},[402,136722,136723],{},[405,136724,136725,136727],{},[408,136726,128454],{"align":410},[408,136728,29275],{"align":410},[419,136730,136731,136738,136745,136752,136759],{},[405,136732,136733,136735],{},[424,136734,136658],{"align":410},[424,136736,136737],{"align":410},"小白 默认",[405,136739,136740,136742],{},[424,136741,63790],{"align":410},[424,136743,136744],{"align":410},"小手",[405,136746,136747,136749],{},[424,136748,136676],{"align":410},[424,136750,136751],{"align":410},"移动",[405,136753,136754,136756],{},[424,136755,603],{"align":410},[424,136757,136758],{"align":410},"文本",[405,136760,136761,136763],{},[424,136762,136712],{"align":410},[424,136764,136765],{"align":410},"禁止",[391,136767,136769],{"id":136768},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136771,136772],{},"去除表单轮廓线",[19,136774,136775],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[58,136777,136778],{"className":127990,"code":131354,"language":127992,"meta":63,"style":63},[32,136779,136780,136784,136790,136806],{"__ignoreMap":63},[67,136781,136782],{"class":69,"line":70},[67,136783,131361],{"class":2058},[67,136785,136786,136788],{"class":69,"line":191},[67,136787,53377],{"class":262},[67,136789,17369],{"class":73},[67,136791,136792,136794,136796,136798,136800,136802,136804],{"class":69,"line":202},[67,136793,72656],{"class":77},[67,136795,53203],{"class":73},[67,136797,2209],{"class":77},[67,136799,53258],{"class":84},[67,136801,53287],{"class":77},[67,136803,131382],{"class":77},[67,136805,3148],{"class":73},[67,136807,136808],{"class":69,"line":641},[67,136809,3419],{"class":73},[19,136811,136812],{},"文本域：",[3317,136814],{"style":127846,"src":136815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136817,136818],{},"此时会有一个空白区域",[3317,136820],{"style":127846,"src":136821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136823,136824],{},"写在同一行就不会出现这个问题",[3317,136826],{"style":127846,"src":136827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136829,136830],{},"文本域是行内块元素，一定记住！！！",[19,136832,99990],{},[3317,136834],{"style":127846,"src":136835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136837,136838],{},"文本域尽量放在一行",[19,136840,136841],{},"知识回顾：cols是列，rols是行",[3317,136843],{"style":127846,"src":136844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136846,136847],{},"它可以进行拖动，显然这是我们不愿意看到的",[3317,136849],{"style":127846,"src":136850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136852,136853],{},"使用resize进行解决",[58,136855,136857],{"className":127990,"code":136856,"language":127992,"meta":63,"style":63},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[32,136858,136859,136865,136878],{"__ignoreMap":63},[67,136860,136861,136863],{"class":69,"line":70},[67,136862,55583],{"class":262},[67,136864,17369],{"class":73},[67,136866,136867,136869,136871,136873,136875],{"class":69,"line":191},[67,136868,72558],{"class":77},[67,136870,53203],{"class":73},[67,136872,56498],{"class":77},[67,136874,131853],{"class":73},[67,136876,136877],{"class":2058},"\u002F* 取消表单轮廓线 *\u002F\n",[67,136879,136880],{"class":69,"line":202},[67,136881,3419],{"class":73},[19,136883,136884],{},"此时就无法通过右下方实现拖动了",[391,136886,136888],{"id":136887},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136890,136891],{},"实现一个盒子中的文字和图片对齐",[19,136893,136894,136895,136898],{},"用于设置一个元素的 ",[2144,136896,136897],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136900,136901],{},"图片和文字默认是基线对齐",[3317,136903],{"style":127846,"src":136904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[58,136906,136907],{"className":127990,"code":136856,"language":127992,"meta":63,"style":63},[32,136908,136909,136915,136927],{"__ignoreMap":63},[67,136910,136911,136913],{"class":69,"line":70},[67,136912,55583],{"class":262},[67,136914,17369],{"class":73},[67,136916,136917,136919,136921,136923,136925],{"class":69,"line":191},[67,136918,72558],{"class":77},[67,136920,53203],{"class":73},[67,136922,56498],{"class":77},[67,136924,131853],{"class":73},[67,136926,136877],{"class":2058},[67,136928,136929],{"class":69,"line":202},[67,136930,3419],{"class":73},[3317,136932],{"style":127846,"src":136933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23794,136935,136937],{"id":136936},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136939,136940],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3317,136942],{"style":127846,"src":136943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136945,136946,136947,136950],{},"此时可以给图片、表单这些行内块元素的 ",[2144,136948,136949],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23794,136952,136954],{"id":136953},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136956,136957],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136959,16431],{},[58,136961,136963],{"className":127990,"code":136962,"language":127992,"meta":63,"style":63},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[32,136964,136965,136970,136976,136988],{"__ignoreMap":63},[67,136966,136967],{"class":69,"line":70},[67,136968,136969],{"class":2058},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[67,136971,136972,136974],{"class":69,"line":191},[67,136973,3317],{"class":262},[67,136975,17369],{"class":73},[67,136977,136978,136981,136983,136986],{"class":69,"line":202},[67,136979,136980],{"class":77},"  vertical-align",[67,136982,53203],{"class":73},[67,136984,136985],{"class":77},"middle",[67,136987,3148],{"class":73},[67,136989,136990],{"class":69,"line":641},[67,136991,3419],{"class":73},[3317,136993],{"style":127846,"src":136994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136996,136997],{},"主要解决方法有两种：",[26,136999,137000],{},[29,137001,137002,137005,137006,137009],{},[2144,137003,137004],{},"给图片"," 添加 ",[2144,137007,137008],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137011,137012,137013],{},"2.把图片转换为块级元素 ",[2144,137014,137015],{},"display: block",[19,137017,137018],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137020,137021],{},"img {",[19,137023,137024],{},"vertical-align:middle;",[19,137026,2934],{},[391,137028,137030],{"id":137029},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137032,137033],{},"效果：",[3317,137035],{"style":127846,"src":137036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137038,137039],{},"单行文本溢出显示省略号--必须满足三个条件：",[58,137041,137043],{"className":127990,"code":137042,"language":127992,"meta":63,"style":63},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[32,137044,137045,137050,137056,137066,137071,137081],{"__ignoreMap":63},[67,137046,137047],{"class":69,"line":70},[67,137048,137049],{"class":2058},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[67,137051,137052,137054],{"class":69,"line":191},[67,137053,3317],{"class":262},[67,137055,17369],{"class":73},[67,137057,137058,137060,137062,137064],{"class":69,"line":202},[67,137059,136980],{"class":77},[67,137061,53203],{"class":73},[67,137063,136985],{"class":77},[67,137065,3148],{"class":73},[67,137067,137068],{"class":69,"line":641},[67,137069,137070],{"class":2058},"  \u002F* 或 *\u002F\n",[67,137072,137073,137075,137077,137079],{"class":69,"line":655},[67,137074,129606],{"class":77},[67,137076,53203],{"class":73},[67,137078,62630],{"class":77},[67,137080,3148],{"class":73},[67,137082,137083],{"class":69,"line":660},[67,137084,3419],{"class":73},[391,137086,137088],{"id":137087},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137090,137033],{},[3317,137092],{"style":127846,"src":137093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137095,137096,137097,137100],{},"多行文本溢出显示省略号， ",[2144,137098,137099],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[58,137102,137103],{"className":127990,"code":137042,"language":127992,"meta":63,"style":63},[32,137104,137105,137109,137115,137125,137129,137139],{"__ignoreMap":63},[67,137106,137107],{"class":69,"line":70},[67,137108,137049],{"class":2058},[67,137110,137111,137113],{"class":69,"line":191},[67,137112,3317],{"class":262},[67,137114,17369],{"class":73},[67,137116,137117,137119,137121,137123],{"class":69,"line":202},[67,137118,136980],{"class":77},[67,137120,53203],{"class":73},[67,137122,136985],{"class":77},[67,137124,3148],{"class":73},[67,137126,137127],{"class":69,"line":641},[67,137128,137070],{"class":2058},[67,137130,137131,137133,137135,137137],{"class":69,"line":655},[67,137132,129606],{"class":77},[67,137134,53203],{"class":73},[67,137136,62630],{"class":77},[67,137138,3148],{"class":73},[67,137140,137141],{"class":69,"line":660},[67,137142,3419],{"class":73},[19,137144,137145],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137147,137149],{"id":137148},"_133-常见布局技巧","13.3 常见布局技巧",[19,137151,137152],{},[2144,137153,137154],{},"巧妙利用一个技术更快更好的布局：",[26,137156,137157,137160,137163,137166],{},[29,137158,137159],{},"margin负值的运用",[29,137161,137162],{},"文字围绕浮动元素",[29,137164,137165],{},"行内块的巧妙运用",[29,137167,137168],{},"CSS三角强化",[391,137170,137172],{"id":137171},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137174,137175],{},"应用场景：",[3317,137177],{"style":127846,"src":137178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3317,137180],{"style":127846,"src":137181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137183,137184],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137186,137187],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[58,137189,137190],{"className":127990,"code":131354,"language":127992,"meta":63,"style":63},[32,137191,137192,137196,137202,137218],{"__ignoreMap":63},[67,137193,137194],{"class":69,"line":70},[67,137195,131361],{"class":2058},[67,137197,137198,137200],{"class":69,"line":191},[67,137199,53377],{"class":262},[67,137201,17369],{"class":73},[67,137203,137204,137206,137208,137210,137212,137214,137216],{"class":69,"line":202},[67,137205,72656],{"class":77},[67,137207,53203],{"class":73},[67,137209,2209],{"class":77},[67,137211,53258],{"class":84},[67,137213,53287],{"class":77},[67,137215,131382],{"class":77},[67,137217,3148],{"class":73},[67,137219,137220],{"class":69,"line":641},[67,137221,3419],{"class":73},[3317,137223],{"style":127846,"src":137224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137226,137227],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[58,137229,137231],{"className":127990,"code":137230,"language":127992,"meta":63,"style":63},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[32,137232,137233,137238,137244,137254,137266,137278],{"__ignoreMap":63},[67,137234,137235],{"class":69,"line":70},[67,137236,137237],{"class":2058},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[67,137239,137240,137242],{"class":69,"line":191},[67,137241,131838],{"class":110},[67,137243,17369],{"class":73},[67,137245,137246,137248,137250,137252],{"class":69,"line":202},[67,137247,133796],{"class":77},[67,137249,53203],{"class":73},[67,137251,56525],{"class":77},[67,137253,3148],{"class":73},[67,137255,137256,137258,137260,137262,137264],{"class":69,"line":641},[67,137257,133810],{"class":77},[67,137259,53203],{"class":73},[67,137261,2437],{"class":77},[67,137263,53258],{"class":84},[67,137265,3148],{"class":73},[67,137267,137268,137270,137272,137274,137276],{"class":69,"line":655},[67,137269,133827],{"class":77},[67,137271,53203],{"class":73},[67,137273,2689],{"class":77},[67,137275,53258],{"class":84},[67,137277,3148],{"class":73},[67,137279,137280],{"class":69,"line":660},[67,137281,3419],{"class":73},[19,137283,137284],{},"加上上述代码会发现：",[3317,137286],{"style":127846,"src":137287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137289,137290],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137292,137293],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[58,137295,137296],{"className":127990,"code":137230,"language":127992,"meta":63,"style":63},[32,137297,137298,137302,137308,137318,137330,137342],{"__ignoreMap":63},[67,137299,137300],{"class":69,"line":70},[67,137301,137237],{"class":2058},[67,137303,137304,137306],{"class":69,"line":191},[67,137305,131838],{"class":110},[67,137307,17369],{"class":73},[67,137309,137310,137312,137314,137316],{"class":69,"line":202},[67,137311,133796],{"class":77},[67,137313,53203],{"class":73},[67,137315,56525],{"class":77},[67,137317,3148],{"class":73},[67,137319,137320,137322,137324,137326,137328],{"class":69,"line":641},[67,137321,133810],{"class":77},[67,137323,53203],{"class":73},[67,137325,2437],{"class":77},[67,137327,53258],{"class":84},[67,137329,3148],{"class":73},[67,137331,137332,137334,137336,137338,137340],{"class":69,"line":655},[67,137333,133827],{"class":77},[67,137335,53203],{"class":73},[67,137337,2689],{"class":77},[67,137339,53258],{"class":84},[67,137341,3148],{"class":73},[67,137343,137344],{"class":69,"line":660},[67,137345,3419],{"class":73},[19,137347,137348],{},"解决方式2：",[19,137350,137351],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[58,137353,137355],{"className":127990,"code":137354,"language":127992,"meta":63,"style":63},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[32,137356,137357,137363,137373,137385,137397],{"__ignoreMap":63},[67,137358,137359,137361],{"class":69,"line":70},[67,137360,53377],{"class":262},[67,137362,17369],{"class":73},[67,137364,137365,137367,137369,137371],{"class":69,"line":191},[67,137366,133796],{"class":77},[67,137368,53203],{"class":73},[67,137370,56525],{"class":77},[67,137372,3148],{"class":73},[67,137374,137375,137377,137379,137381,137383],{"class":69,"line":202},[67,137376,133810],{"class":77},[67,137378,53203],{"class":73},[67,137380,2437],{"class":77},[67,137382,53258],{"class":84},[67,137384,3148],{"class":73},[67,137386,137387,137389,137391,137393,137395],{"class":69,"line":641},[67,137388,133827],{"class":77},[67,137390,53203],{"class":73},[67,137392,2689],{"class":77},[67,137394,53258],{"class":84},[67,137396,3148],{"class":73},[67,137398,137399],{"class":69,"line":655},[67,137400,3419],{"class":73},[391,137402,137404],{"id":137403},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137406,137175],{},[3317,137408],{"style":127846,"src":137409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137411,137412],{},"实现结构图：",[3317,137414],{"style":127846,"src":137415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137417,137418],{},"巧妙运用浮动元素不会压住文字的特性",[19,137420,137421],{},"代码显示：",[58,137423,137425],{"className":127990,"code":137424,"language":127992,"meta":63,"style":63},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[32,137426,137427,137433,137443,137447,137452,137456,137462,137476],{"__ignoreMap":63},[67,137428,137429,137431],{"class":69,"line":70},[67,137430,131838],{"class":110},[67,137432,17369],{"class":73},[67,137434,137435,137437,137439,137441],{"class":69,"line":191},[67,137436,132470],{"class":77},[67,137438,53203],{"class":73},[67,137440,410],{"class":77},[67,137442,3148],{"class":73},[67,137444,137445],{"class":69,"line":202},[67,137446,3419],{"class":73},[67,137448,137449],{"class":69,"line":641},[67,137450,137451],{"class":73},"```Css\n",[67,137453,137454],{"class":69,"line":655},[67,137455,131833],{"class":2058},[67,137457,137458,137460],{"class":69,"line":660},[67,137459,131838],{"class":110},[67,137461,17369],{"class":73},[67,137463,137464,137466,137468,137470,137472,137474],{"class":69,"line":665},[67,137465,72230],{"class":77},[67,137467,53203],{"class":73},[67,137469,78],{"class":77},[67,137471,53322],{"class":77},[67,137473,131853],{"class":73},[67,137475,131856],{"class":2058},[67,137477,137478],{"class":69,"line":677},[67,137479,3419],{"class":73},[19,137481,137482],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[58,137484,137487],{"className":137485,"code":137486,"language":603},[601],"\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",[32,137488,137486],{"__ignoreMap":63},[3317,137490],{"style":127846,"src":137491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137493,137494],{},"最终展示结果：",[58,137496,137497],{"className":127990,"code":131826,"language":127992,"meta":63,"style":63},[32,137498,137499,137503,137509,137523],{"__ignoreMap":63},[67,137500,137501],{"class":69,"line":70},[67,137502,131833],{"class":2058},[67,137504,137505,137507],{"class":69,"line":191},[67,137506,131838],{"class":110},[67,137508,17369],{"class":73},[67,137510,137511,137513,137515,137517,137519,137521],{"class":69,"line":202},[67,137512,72230],{"class":77},[67,137514,53203],{"class":73},[67,137516,78],{"class":77},[67,137518,53322],{"class":77},[67,137520,131853],{"class":73},[67,137522,131856],{"class":2058},[67,137524,137525],{"class":69,"line":641},[67,137526,3419],{"class":73},[3317,137528],{"style":127846,"src":137529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137531,137533],{"id":137532},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[391,137535,137537],{"id":137536},"_1341-原理","13.4.1 原理",[3317,137539],{"style":127846,"src":137540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[58,137542,137543],{"className":127990,"code":131826,"language":127992,"meta":63,"style":63},[32,137544,137545,137549,137555,137569],{"__ignoreMap":63},[67,137546,137547],{"class":69,"line":70},[67,137548,131833],{"class":2058},[67,137550,137551,137553],{"class":69,"line":191},[67,137552,131838],{"class":110},[67,137554,17369],{"class":73},[67,137556,137557,137559,137561,137563,137565,137567],{"class":69,"line":202},[67,137558,72230],{"class":77},[67,137560,53203],{"class":73},[67,137562,78],{"class":77},[67,137564,53322],{"class":77},[67,137566,131853],{"class":73},[67,137568,131856],{"class":2058},[67,137570,137571],{"class":69,"line":641},[67,137572,3419],{"class":73},[391,137574,137576],{"id":137575},"_1342-实例","13.4.2 实例",[3317,137578],{"style":127846,"src":137579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[58,137581,137582],{"className":127990,"code":132456,"language":127992,"meta":63,"style":63},[32,137583,137584,137590,137600,137604,137610,137620],{"__ignoreMap":63},[67,137585,137586,137588],{"class":69,"line":70},[67,137587,132463],{"class":110},[67,137589,17369],{"class":73},[67,137591,137592,137594,137596,137598],{"class":69,"line":191},[67,137593,132470],{"class":77},[67,137595,53203],{"class":73},[67,137597,410],{"class":77},[67,137599,3148],{"class":73},[67,137601,137602],{"class":69,"line":202},[67,137603,3419],{"class":73},[67,137605,137606,137608],{"class":69,"line":641},[67,137607,132485],{"class":110},[67,137609,17369],{"class":73},[67,137611,137612,137614,137616,137618],{"class":69,"line":655},[67,137613,132470],{"class":77},[67,137615,53203],{"class":73},[67,137617,74282],{"class":77},[67,137619,3148],{"class":73},[67,137621,137622],{"class":69,"line":660},[67,137623,3419],{"class":73},[14,137625,137627],{"id":137626},"_135-css的初始化","13.5 css的初始化",[19,137629,137630],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137632,137633],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137635,137636],{},"每个网页都必须首先进行 CSS初始化。",[19,137638,137639],{},"这里我们以 京东CSS初始化代码为例。",[19,137641,137642],{},"在网页右键查看网页源代码",[19,137644,137645],{},"找到css的link引入语句",[19,137647,137648],{},"然后ctrl+f 输入body",[19,137650,78986],{},[3317,137652],{"style":127846,"src":137653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137655,79009],{},[3317,137657],{"style":127846,"src":137658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137660,137661],{},"③打开了网页上传压缩的代码",[3317,137663],{"style":127846,"src":137664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137666,137667],{},"④从body前可以查看这个网页的初始化代码",[19,137669,137670],{},[2144,137671,137672],{},"Unicode编码字体：",[19,137674,137675],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137677,84966],{},[19,137679,137680],{},"黑体 \\9ED1\\4F53",[19,137682,137683],{},"宋体 \\5B8B\\4F53",[19,137685,137686],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1903,137688,137689],{},"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":63,"searchDepth":191,"depth":191,"links":137691},[137692,137693,137700,137704,137708],{"id":136489,"depth":191,"text":136490},{"id":136611,"depth":191,"text":136612,"children":137694},[137695,137696,137697,137698,137699],{"id":136615,"depth":202,"text":136616},{"id":136768,"depth":202,"text":136769},{"id":136887,"depth":202,"text":136888},{"id":137029,"depth":202,"text":137030},{"id":137087,"depth":202,"text":137088},{"id":137148,"depth":191,"text":137149,"children":137701},[137702,137703],{"id":137171,"depth":202,"text":137172},{"id":137403,"depth":202,"text":137404},{"id":137532,"depth":191,"text":137533,"children":137705},[137706,137707],{"id":137536,"depth":202,"text":137537},{"id":137575,"depth":202,"text":137576},{"id":137626,"depth":191,"text":137627},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136481,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137715,"title":137716,"body":137717,"description":25173,"extension":1930,"meta":139403,"navigation":630,"path":139404,"seo":139405,"stem":139406,"__hash__":139407},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137718,"toc":139392},[137719,137722,137726,137730,137733,137740,137743,137746,137784,137787,137789,137803,137807,137816,137820,137825,137828,137831,137834,137869,137874,137877,137907,137910,137915,137918,137921,137951,137954,138008,138011,138015,138020,138032,138035,138039,138069,138072,138077,138080,138110,138113,138117,138134,138138,138142,138145,138178,138181,138185,138188,138191,138194,138197,138200,138311,138314,138317,138320,138422,138425,138429,138433,138437,138440,138480,138483,138485,138501,138505,138508,138513,138594,138597,138600,138726,138731,138734,138742,138745,138750,138835,138838,138842,138845,138848,138852,138872,138877,138961,138964,138969,138972,138975,139053,139056,139059,139062,139065,139068,139073,139076,139079,139151,139154,139159,139162,139259,139262,139268,139271,139274,139277,139280,139283,139286,139289,139292,139296,139301,139304,139337,139342,139345,139386,139389],[10,137720,137716],{"id":137721},"_14-html5与css3新特性",[14,137723,137725],{"id":137724},"_141-html5的新特性","14.1 HTML5的新特性",[391,137727,137729],{"id":137728},"_1411-基本标签","14.1.1 基本标签",[19,137731,137732],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137734,137735,137736,137739],{},"这些新特性都有兼容性问题，基本是 ",[2144,137737,137738],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137741,137742],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137744,137745],{},"现在使用的是新特性：",[2994,137747,137748,137754,137760,137766,137772,137778],{},[29,137749,137750,137753],{},[32,137751,137752],{},"\u003Cheader>"," 头部标签",[29,137755,137756,137759],{},[32,137757,137758],{},"\u003Cnav>"," 导航标签",[29,137761,137762,137765],{},[32,137763,137764],{},"\u003Carticle>"," 内容标签",[29,137767,137768,137771],{},[32,137769,137770],{},"\u003Csection>"," 定义文档某个区域",[29,137773,137774,137777],{},[32,137775,137776],{},"\u003Caside>"," 侧边栏标签",[29,137779,137780,137783],{},[32,137781,137782],{},"\u003Cfooter>"," 尾部标签",[3317,137785],{"style":127846,"src":137786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137788,2031],{},[2994,137790,137791,137794,137797,137800],{},[29,137792,137793],{},"这种语义化标准主要是针对搜索引擎的",[29,137795,137796],{},"这些标签页面中可以经常使用",[29,137798,137799],{},"在IE9中，需要把这些元素转换为块级元素",[29,137801,137802],{},"移动端更喜欢使用这些标签",[391,137804,137806],{"id":137805},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137808,137809,137810,137812,137813,137815],{},"音频 ",[2144,137811,29960],{}," 和视频 ",[2144,137814,29969],{}," 两个标签",[23794,137817,137819],{"id":137818},"_14121-视频标签-video","14.1.2.1 视频标签- video",[26,137821,137822],{},[29,137823,137824],{},"支持格式：",[3317,137826],{"style":127846,"src":137827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137829,137830],{},"尽量使用MP4，兼容性好",[19,137832,137833],{},"用MP4就可以",[58,137835,137837],{"className":128737,"code":137836,"language":128739,"meta":63,"style":63},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[32,137838,137839],{"__ignoreMap":63},[67,137840,137841,137843,137845,137847,137849,137852,137854,137857,137860,137863,137865,137867],{"class":69,"line":70},[67,137842,259],{"class":73},[67,137844,29969],{"class":262},[67,137846,57000],{"class":110},[67,137848,85],{"class":73},[67,137850,137851],{"class":114},"\"movie.mp4\"",[67,137853,94182],{"class":110},[67,137855,137856],{"class":110}," autoplay",[67,137858,137859],{"class":110}," muted",[67,137861,137862],{"class":110}," loop",[67,137864,57075],{"class":73},[67,137866,29969],{"class":262},[67,137868,323],{"class":73},[26,137870,137871],{"start":191},[29,137872,137873],{},"兼容写法",[19,137875,137876],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[58,137878,137879],{"className":128737,"code":137836,"language":128739,"meta":63,"style":63},[32,137880,137881],{"__ignoreMap":63},[67,137882,137883,137885,137887,137889,137891,137893,137895,137897,137899,137901,137903,137905],{"class":69,"line":70},[67,137884,259],{"class":73},[67,137886,29969],{"class":262},[67,137888,57000],{"class":110},[67,137890,85],{"class":73},[67,137892,137851],{"class":114},[67,137894,94182],{"class":110},[67,137896,137856],{"class":110},[67,137898,137859],{"class":110},[67,137900,137862],{"class":110},[67,137902,57075],{"class":73},[67,137904,29969],{"class":262},[67,137906,323],{"class":73},[19,137908,137909],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,137911,137912],{"start":202},[29,137913,137914],{},"video常用属性",[3317,137916],{"style":127846,"src":137917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137919,137920],{},"poster属性后面是跟的等待加载图片的地址",[58,137922,137923],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,137924,137925],{"__ignoreMap":63},[67,137926,137927,137929,137931,137933,137935,137937,137939,137941,137943,137945,137947,137949],{"class":69,"line":70},[67,137928,259],{"class":73},[67,137930,3317],{"class":262},[67,137932,57000],{"class":110},[67,137934,85],{"class":73},[67,137936,135507],{"class":114},[67,137938,57008],{"class":110},[67,137940,85],{"class":73},[67,137942,135514],{"class":114},[67,137944,135517],{"class":110},[67,137946,85],{"class":73},[67,137948,135522],{"class":114},[67,137950,323],{"class":73},[19,137952,137953],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[58,137955,137957],{"className":127990,"code":137956,"language":127992,"meta":63,"style":63},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[32,137958,137959,137964,137970,137994,137999,138004],{"__ignoreMap":63},[67,137960,137961],{"class":69,"line":70},[67,137962,137963],{"class":2058},"\u002F* 2D 位移 *\u002F\n",[67,137965,137966,137968],{"class":69,"line":191},[67,137967,53377],{"class":262},[67,137969,17369],{"class":73},[67,137971,137972,137975,137977,137980,137982,137984,137986,137988,137990,137992],{"class":69,"line":202},[67,137973,137974],{"class":77},"  transform",[67,137976,53203],{"class":73},[67,137978,137979],{"class":77},"translate",[67,137981,854],{"class":73},[67,137983,2302],{"class":77},[67,137985,53258],{"class":84},[67,137987,1868],{"class":73},[67,137989,2645],{"class":77},[67,137991,53258],{"class":84},[67,137993,4544],{"class":73},[67,137995,137996],{"class":69,"line":641},[67,137997,137998],{"class":2058},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[67,138000,138001],{"class":69,"line":655},[67,138002,138003],{"class":2058},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[67,138005,138006],{"class":69,"line":660},[67,138007,3419],{"class":73},[19,138009,138010],{},"muted:自动静音属性",[23794,138012,138014],{"id":138013},"_14122-音频标签audio","14.1.2.2 音频标签audio",[26,138016,138017],{},[29,138018,138019],{},"基本使用",[19,138021,138022,138023,138028,138029],{},"当前 ",[2144,138024,138025],{},[32,138026,138027],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2144,138030,138031],{},"mp3格式",[3317,138033],{"style":127846,"src":138034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[26,138036,138037],{"start":191},[29,138038,137873],{},[58,138040,138041],{"className":128737,"code":137836,"language":128739,"meta":63,"style":63},[32,138042,138043],{"__ignoreMap":63},[67,138044,138045,138047,138049,138051,138053,138055,138057,138059,138061,138063,138065,138067],{"class":69,"line":70},[67,138046,259],{"class":73},[67,138048,29969],{"class":262},[67,138050,57000],{"class":110},[67,138052,85],{"class":73},[67,138054,137851],{"class":114},[67,138056,94182],{"class":110},[67,138058,137856],{"class":110},[67,138060,137859],{"class":110},[67,138062,137862],{"class":110},[67,138064,57075],{"class":73},[67,138066,29969],{"class":262},[67,138068,323],{"class":73},[19,138070,138071],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,138073,138074],{"start":202},[29,138075,138076],{},"常用属性",[3317,138078],{"style":127846,"src":138079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[58,138081,138082],{"className":128737,"code":137836,"language":128739,"meta":63,"style":63},[32,138083,138084],{"__ignoreMap":63},[67,138085,138086,138088,138090,138092,138094,138096,138098,138100,138102,138104,138106,138108],{"class":69,"line":70},[67,138087,259],{"class":73},[67,138089,29969],{"class":262},[67,138091,57000],{"class":110},[67,138093,85],{"class":73},[67,138095,137851],{"class":114},[67,138097,94182],{"class":110},[67,138099,137856],{"class":110},[67,138101,137859],{"class":110},[67,138103,137862],{"class":110},[67,138105,57075],{"class":73},[67,138107,29969],{"class":262},[67,138109,323],{"class":73},[19,138111,138112],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23794,138114,138116],{"id":138115},"_14123-总结","14.1.2.3 总结",[2994,138118,138119,138122,138125,138128,138131],{},[29,138120,138121],{},"音频标签和视频标签使用方式基本一致",[29,138123,138124],{},"浏览器支持情况不同",[29,138126,138127],{},"谷歌浏览器把音频和视频自动播放禁止了",[29,138129,138130],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[29,138132,138133],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[391,138135,138137],{"id":138136},"_1413-表单元素","14.1.3 表单元素",[23794,138139,138141],{"id":138140},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3317,138143],{"style":127846,"src":138144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[58,138146,138148],{"className":128737,"code":138147,"language":128739,"meta":63,"style":63},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[32,138149,138150],{"__ignoreMap":63},[67,138151,138152,138154,138156,138158,138160,138162,138164,138166,138169,138171,138173,138176],{"class":69,"line":70},[67,138153,259],{"class":73},[67,138155,55583],{"class":262},[67,138157,274],{"class":110},[67,138159,85],{"class":73},[67,138161,64459],{"class":114},[67,138163,266],{"class":110},[67,138165,85],{"class":73},[67,138167,138168],{"class":114},"\"username\"",[67,138170,62781],{"class":110},[67,138172,85],{"class":73},[67,138174,138175],{"class":114},"\"请输入用户名\"",[67,138177,323],{"class":73},[3317,138179],{"style":127846,"src":138180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23794,138182,138184],{"id":138183},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3317,138186],{"style":127846,"src":138187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138189,138190],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138192,138193],{},"快捷操作：",[3317,138195],{"style":127846,"src":138196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138198,138199],{},"例子1：",[58,138201,138203],{"className":128737,"code":138202,"language":128739,"meta":63,"style":63},"\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",[32,138204,138205,138228,138255,138284,138303],{"__ignoreMap":63},[67,138206,138207,138209,138211,138213,138215,138218,138221,138223,138226],{"class":69,"line":70},[67,138208,259],{"class":73},[67,138210,68385],{"class":262},[67,138212,68388],{"class":110},[67,138214,85],{"class":73},[67,138216,138217],{"class":114},"\"\u002Fsubmit\"",[67,138219,138220],{"class":110}," method",[67,138222,85],{"class":73},[67,138224,138225],{"class":114},"\"post\"",[67,138227,323],{"class":73},[67,138229,138230,138232,138234,138236,138238,138240,138242,138244,138246,138248,138250,138253],{"class":69,"line":191},[67,138231,328],{"class":73},[67,138233,55583],{"class":262},[67,138235,274],{"class":110},[67,138237,85],{"class":73},[67,138239,64459],{"class":114},[67,138241,266],{"class":110},[67,138243,85],{"class":73},[67,138245,138168],{"class":114},[67,138247,62781],{"class":110},[67,138249,85],{"class":73},[67,138251,138252],{"class":114},"\"用户名\"",[67,138254,323],{"class":73},[67,138256,138257,138259,138261,138263,138265,138268,138270,138272,138275,138277,138279,138282],{"class":69,"line":202},[67,138258,328],{"class":73},[67,138260,55583],{"class":262},[67,138262,274],{"class":110},[67,138264,85],{"class":73},[67,138266,138267],{"class":114},"\"password\"",[67,138269,266],{"class":110},[67,138271,85],{"class":73},[67,138273,138274],{"class":114},"\"pwd\"",[67,138276,62781],{"class":110},[67,138278,85],{"class":73},[67,138280,138281],{"class":114},"\"密码\"",[67,138283,323],{"class":73},[67,138285,138286,138288,138290,138292,138294,138296,138299,138301],{"class":69,"line":641},[67,138287,328],{"class":73},[67,138289,55648],{"class":262},[67,138291,274],{"class":110},[67,138293,85],{"class":73},[67,138295,68408],{"class":114},[67,138297,138298],{"class":73},">提交\u003C\u002F",[67,138300,55648],{"class":262},[67,138302,323],{"class":73},[67,138304,138305,138307,138309],{"class":69,"line":655},[67,138306,376],{"class":73},[67,138308,68385],{"class":262},[67,138310,323],{"class":73},[3317,138312],{"style":127846,"src":138313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138315,138316],{},"value是表单域的内容",[19,138318,138319],{},"例子2：",[58,138321,138322],{"className":128737,"code":138202,"language":128739,"meta":63,"style":63},[32,138323,138324,138344,138370,138396,138414],{"__ignoreMap":63},[67,138325,138326,138328,138330,138332,138334,138336,138338,138340,138342],{"class":69,"line":70},[67,138327,259],{"class":73},[67,138329,68385],{"class":262},[67,138331,68388],{"class":110},[67,138333,85],{"class":73},[67,138335,138217],{"class":114},[67,138337,138220],{"class":110},[67,138339,85],{"class":73},[67,138341,138225],{"class":114},[67,138343,323],{"class":73},[67,138345,138346,138348,138350,138352,138354,138356,138358,138360,138362,138364,138366,138368],{"class":69,"line":191},[67,138347,328],{"class":73},[67,138349,55583],{"class":262},[67,138351,274],{"class":110},[67,138353,85],{"class":73},[67,138355,64459],{"class":114},[67,138357,266],{"class":110},[67,138359,85],{"class":73},[67,138361,138168],{"class":114},[67,138363,62781],{"class":110},[67,138365,85],{"class":73},[67,138367,138252],{"class":114},[67,138369,323],{"class":73},[67,138371,138372,138374,138376,138378,138380,138382,138384,138386,138388,138390,138392,138394],{"class":69,"line":202},[67,138373,328],{"class":73},[67,138375,55583],{"class":262},[67,138377,274],{"class":110},[67,138379,85],{"class":73},[67,138381,138267],{"class":114},[67,138383,266],{"class":110},[67,138385,85],{"class":73},[67,138387,138274],{"class":114},[67,138389,62781],{"class":110},[67,138391,85],{"class":73},[67,138393,138281],{"class":114},[67,138395,323],{"class":73},[67,138397,138398,138400,138402,138404,138406,138408,138410,138412],{"class":69,"line":641},[67,138399,328],{"class":73},[67,138401,55648],{"class":262},[67,138403,274],{"class":110},[67,138405,85],{"class":73},[67,138407,68408],{"class":114},[67,138409,138298],{"class":73},[67,138411,55648],{"class":262},[67,138413,323],{"class":73},[67,138415,138416,138418,138420],{"class":69,"line":655},[67,138417,376],{"class":73},[67,138419,68385],{"class":262},[67,138421,323],{"class":73},[3317,138423],{"style":127846,"src":138424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138426,138428],{"id":138427},"_142-css新特性","14.2 CSS新特性",[391,138430,138432],{"id":138431},"_1421-新增选择器","14.2.1 新增选择器",[23794,138434,138436],{"id":138435},"_14211-属性选择器","14.2.1.1 属性选择器",[3317,138438],{"style":127846,"src":138439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[58,138441,138443],{"className":127990,"code":138442,"language":127992,"meta":63,"style":63},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[32,138444,138445,138460,138476],{"__ignoreMap":63},[67,138446,138447,138449,138451,138453,138455,138457],{"class":69,"line":70},[67,138448,55583],{"class":262},[67,138450,2879],{"class":73},[67,138452,104791],{"class":110},[67,138454,85],{"class":84},[67,138456,64459],{"class":114},[67,138458,138459],{"class":73},"] {\n",[67,138461,138462,138464,138466,138468,138470,138472,138474],{"class":69,"line":191},[67,138463,72656],{"class":77},[67,138465,53203],{"class":73},[67,138467,2209],{"class":77},[67,138469,53258],{"class":84},[67,138471,53287],{"class":77},[67,138473,131570],{"class":77},[67,138475,3148],{"class":73},[67,138477,138478],{"class":69,"line":202},[67,138479,3419],{"class":73},[3317,138481],{"style":127846,"src":138482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138484,2031],{},[2994,138486,138487,138490,138493,138496],{},[29,138488,138489],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[29,138491,138492],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[29,138494,138495],{},"属性选择器也可以选择出来自定义的属性",[29,138497,138498,138500],{},[2144,138499,10831],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23794,138502,138504],{"id":138503},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3317,138506],{"style":127846,"src":138507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[26,138509,138510],{},[29,138511,138512],{},"fist-child",[58,138514,138516],{"className":127990,"code":138515,"language":127992,"meta":63,"style":63},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[32,138517,138518,138523,138538,138558,138576],{"__ignoreMap":63},[67,138519,138520],{"class":69,"line":70},[67,138521,138522],{"class":2058},"\u002F* 属性选择器 *\u002F\n",[67,138524,138525,138527,138529,138531,138533,138535],{"class":69,"line":191},[67,138526,55583],{"class":262},[67,138528,2879],{"class":73},[67,138530,104791],{"class":110},[67,138532,85],{"class":84},[67,138534,64459],{"class":114},[67,138536,138537],{"class":73},"] { }\n",[67,138539,138540,138542,138544,138546,138549,138552,138555],{"class":69,"line":202},[67,138541,55583],{"class":262},[67,138543,2879],{"class":73},[67,138545,16492],{"class":110},[67,138547,138548],{"class":84},"^=",[67,138550,138551],{"class":114},"\"icon\"",[67,138553,138554],{"class":73},"] { }  ",[67,138556,138557],{"class":2058},"\u002F* 以 icon 开头 *\u002F\n",[67,138559,138560,138562,138564,138566,138569,138571,138573],{"class":69,"line":641},[67,138561,55583],{"class":262},[67,138563,2879],{"class":73},[67,138565,16492],{"class":110},[67,138567,138568],{"class":84},"$=",[67,138570,138551],{"class":114},[67,138572,138554],{"class":73},[67,138574,138575],{"class":2058},"\u002F* 以 icon 结尾 *\u002F\n",[67,138577,138578,138580,138582,138584,138587,138589,138591],{"class":69,"line":655},[67,138579,55583],{"class":262},[67,138581,2879],{"class":73},[67,138583,16492],{"class":110},[67,138585,138586],{"class":84},"*=",[67,138588,138551],{"class":114},[67,138590,138554],{"class":73},[67,138592,138593],{"class":2058},"\u002F* 包含 icon *\u002F\n",[19,138595,138596],{},"ul的第一个儿子文本为红色",[19,138598,138599],{},"一定要在冒号前加空格，不然就是选中所有的了",[58,138601,138603],{"className":127990,"code":138602,"language":127992,"meta":63,"style":63},".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",[32,138604,138605,138611,138621,138625,138629,138634,138647,138660,138676,138693,138710],{"__ignoreMap":63},[67,138606,138607,138609],{"class":69,"line":70},[67,138608,128281],{"class":110},[67,138610,17369],{"class":73},[67,138612,138613,138615,138617,138619],{"class":69,"line":191},[67,138614,72665],{"class":77},[67,138616,53203],{"class":73},[67,138618,59182],{"class":77},[67,138620,3148],{"class":73},[67,138622,138623],{"class":69,"line":202},[67,138624,3419],{"class":73},[67,138626,138627],{"class":69,"line":641},[67,138628,137451],{"class":73},[67,138630,138631],{"class":69,"line":655},[67,138632,138633],{"class":2058},"\u002F* 结构伪类选择器 *\u002F\n",[67,138635,138636,138638,138641,138644],{"class":69,"line":660},[67,138637,29],{"class":262},[67,138639,138640],{"class":110},":first-child",[67,138642,138643],{"class":73}," { }           ",[67,138645,138646],{"class":2058},"\u002F* 第一个 *\u002F\n",[67,138648,138649,138651,138654,138657],{"class":69,"line":665},[67,138650,29],{"class":262},[67,138652,138653],{"class":110},":last-child",[67,138655,138656],{"class":73}," { }            ",[67,138658,138659],{"class":2058},"\u002F* 最后一个 *\u002F\n",[67,138661,138662,138664,138666,138668,138670,138673],{"class":69,"line":677},[67,138663,29],{"class":262},[67,138665,130904],{"class":110},[67,138667,854],{"class":73},[67,138669,2077],{"class":77},[67,138671,138672],{"class":73},") { }          ",[67,138674,138675],{"class":2058},"\u002F* 第2个 *\u002F\n",[67,138677,138678,138680,138682,138684,138687,138690],{"class":69,"line":683},[67,138679,29],{"class":262},[67,138681,130904],{"class":110},[67,138683,854],{"class":73},[67,138685,138686],{"class":77},"2n",[67,138688,138689],{"class":73},") { }         ",[67,138691,138692],{"class":2058},"\u002F* 偶数 *\u002F\n",[67,138694,138695,138697,138699,138701,138704,138707],{"class":69,"line":689},[67,138696,29],{"class":262},[67,138698,130904],{"class":110},[67,138700,854],{"class":73},[67,138702,138703],{"class":77},"2n+1",[67,138705,138706],{"class":73},") { }       ",[67,138708,138709],{"class":2058},"\u002F* 奇数 *\u002F\n",[67,138711,138712,138714,138716,138718,138721,138723],{"class":69,"line":694},[67,138713,29],{"class":262},[67,138715,130904],{"class":110},[67,138717,854],{"class":73},[67,138719,138720],{"class":77},"-n+3",[67,138722,138706],{"class":73},[67,138724,138725],{"class":2058},"\u002F* 前3个 *\u002F\n",[53377,138727,138730],{"className":138728},[138729],"example","\n  示例内容\n",[19,138732,138733],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[2994,138735,138736],{},[29,138737,138738,138741],{},[32,138739,138740],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138743,138744],{},"也就是说它选择的是熊大",[26,138746,138747],{"start":660},[29,138748,138749],{},"权重",[58,138751,138753],{"className":127990,"code":138752,"language":127992,"meta":63,"style":63},"\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",[32,138754,138755,138759,138769,138779,138793,138807,138821],{"__ignoreMap":63},[67,138756,138757],{"class":69,"line":70},[67,138758,138633],{"class":2058},[67,138760,138761,138763,138765,138767],{"class":69,"line":191},[67,138762,29],{"class":262},[67,138764,138640],{"class":110},[67,138766,138643],{"class":73},[67,138768,138646],{"class":2058},[67,138770,138771,138773,138775,138777],{"class":69,"line":202},[67,138772,29],{"class":262},[67,138774,138653],{"class":110},[67,138776,138656],{"class":73},[67,138778,138659],{"class":2058},[67,138780,138781,138783,138785,138787,138789,138791],{"class":69,"line":641},[67,138782,29],{"class":262},[67,138784,130904],{"class":110},[67,138786,854],{"class":73},[67,138788,2077],{"class":77},[67,138790,138672],{"class":73},[67,138792,138675],{"class":2058},[67,138794,138795,138797,138799,138801,138803,138805],{"class":69,"line":655},[67,138796,29],{"class":262},[67,138798,130904],{"class":110},[67,138800,854],{"class":73},[67,138802,138686],{"class":77},[67,138804,138689],{"class":73},[67,138806,138692],{"class":2058},[67,138808,138809,138811,138813,138815,138817,138819],{"class":69,"line":660},[67,138810,29],{"class":262},[67,138812,130904],{"class":110},[67,138814,854],{"class":73},[67,138816,138703],{"class":77},[67,138818,138706],{"class":73},[67,138820,138709],{"class":2058},[67,138822,138823,138825,138827,138829,138831,138833],{"class":69,"line":665},[67,138824,29],{"class":262},[67,138826,130904],{"class":110},[67,138828,854],{"class":73},[67,138830,138720],{"class":77},[67,138832,138706],{"class":73},[67,138834,138725],{"class":2058},[19,138836,138837],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23794,138839,138841],{"id":138840},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138843,138844],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3317,138846],{"style":127846,"src":138847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[26,138849,138850],{},[29,138851,2031],{},[2994,138853,138854,138857,138860,138863,138866,138869],{},[29,138855,138856],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[29,138858,138859],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[29,138861,138862],{},"语法： element::before {}",[29,138864,138865],{},"before 和 after 必须有 content 属性",[29,138867,138868],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[29,138870,138871],{},"伪元素选择器和标签选择器一样，权重为 1",[26,138873,138874],{"start":191},[29,138875,138876],{},"实例",[58,138878,138879],{"className":127990,"code":138752,"language":127992,"meta":63,"style":63},[32,138880,138881,138885,138895,138905,138919,138933,138947],{"__ignoreMap":63},[67,138882,138883],{"class":69,"line":70},[67,138884,138633],{"class":2058},[67,138886,138887,138889,138891,138893],{"class":69,"line":191},[67,138888,29],{"class":262},[67,138890,138640],{"class":110},[67,138892,138643],{"class":73},[67,138894,138646],{"class":2058},[67,138896,138897,138899,138901,138903],{"class":69,"line":202},[67,138898,29],{"class":262},[67,138900,138653],{"class":110},[67,138902,138656],{"class":73},[67,138904,138659],{"class":2058},[67,138906,138907,138909,138911,138913,138915,138917],{"class":69,"line":641},[67,138908,29],{"class":262},[67,138910,130904],{"class":110},[67,138912,854],{"class":73},[67,138914,2077],{"class":77},[67,138916,138672],{"class":73},[67,138918,138675],{"class":2058},[67,138920,138921,138923,138925,138927,138929,138931],{"class":69,"line":655},[67,138922,29],{"class":262},[67,138924,130904],{"class":110},[67,138926,854],{"class":73},[67,138928,138686],{"class":77},[67,138930,138689],{"class":73},[67,138932,138692],{"class":2058},[67,138934,138935,138937,138939,138941,138943,138945],{"class":69,"line":660},[67,138936,29],{"class":262},[67,138938,130904],{"class":110},[67,138940,854],{"class":73},[67,138942,138703],{"class":77},[67,138944,138706],{"class":73},[67,138946,138709],{"class":2058},[67,138948,138949,138951,138953,138955,138957,138959],{"class":69,"line":665},[67,138950,29],{"class":262},[67,138952,130904],{"class":110},[67,138954,854],{"class":73},[67,138956,138720],{"class":77},[67,138958,138706],{"class":73},[67,138960,138725],{"class":2058},[3317,138962],{"style":127846,"src":138963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[26,138965,138966],{"start":202},[29,138967,138968],{},"使用场景1",[3317,138970],{"style":127846,"src":138971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138973,138974],{},"不需要再加盒子来整红色那部分了",[58,138976,138978],{"className":127990,"code":138977,"language":127992,"meta":63,"style":63},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[32,138979,138980,138985,138994,139005,139015,139019,139028,139039,139049],{"__ignoreMap":63},[67,138981,138982],{"class":69,"line":70},[67,138983,138984],{"class":2058},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[67,138986,138987,138989,138992],{"class":69,"line":191},[67,138988,53377],{"class":262},[67,138990,138991],{"class":110},"::before",[67,138993,17369],{"class":73},[67,138995,138996,138999,139001,139003],{"class":69,"line":202},[67,138997,138998],{"class":77},"  content",[67,139000,53203],{"class":73},[67,139002,9468],{"class":114},[67,139004,3148],{"class":73},[67,139006,139007,139009,139011,139013],{"class":69,"line":641},[67,139008,129606],{"class":77},[67,139010,53203],{"class":73},[67,139012,62630],{"class":77},[67,139014,3148],{"class":73},[67,139016,139017],{"class":69,"line":655},[67,139018,3419],{"class":73},[67,139020,139021,139023,139026],{"class":69,"line":660},[67,139022,53377],{"class":262},[67,139024,139025],{"class":110},"::after",[67,139027,17369],{"class":73},[67,139029,139030,139032,139034,139037],{"class":69,"line":665},[67,139031,138998],{"class":77},[67,139033,53203],{"class":73},[67,139035,139036],{"class":114},"\"→\"",[67,139038,3148],{"class":73},[67,139040,139041,139043,139045,139047],{"class":69,"line":677},[67,139042,72665],{"class":77},[67,139044,53203],{"class":73},[67,139046,63830],{"class":77},[67,139048,3148],{"class":73},[67,139050,139051],{"class":69,"line":683},[67,139052,3419],{"class":73},[3317,139054],{"style":127846,"src":139055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139057,139058],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3317,139060],{"style":127846,"src":139061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139063,139064],{},"但是在引用时需要先转义一下",[19,139066,139067],{},"content='\\e930'",[26,139069,139070],{"start":641},[29,139071,139072],{},"使用场景2",[19,139074,139075],{},"仿土豆效果",[19,139077,139078],{},"通过使用伪元素选择器可以减少body中盒子的数量",[58,139080,139081],{"className":127990,"code":138977,"language":127992,"meta":63,"style":63},[32,139082,139083,139087,139095,139105,139115,139119,139127,139137,139147],{"__ignoreMap":63},[67,139084,139085],{"class":69,"line":70},[67,139086,138984],{"class":2058},[67,139088,139089,139091,139093],{"class":69,"line":191},[67,139090,53377],{"class":262},[67,139092,138991],{"class":110},[67,139094,17369],{"class":73},[67,139096,139097,139099,139101,139103],{"class":69,"line":202},[67,139098,138998],{"class":77},[67,139100,53203],{"class":73},[67,139102,9468],{"class":114},[67,139104,3148],{"class":73},[67,139106,139107,139109,139111,139113],{"class":69,"line":641},[67,139108,129606],{"class":77},[67,139110,53203],{"class":73},[67,139112,62630],{"class":77},[67,139114,3148],{"class":73},[67,139116,139117],{"class":69,"line":655},[67,139118,3419],{"class":73},[67,139120,139121,139123,139125],{"class":69,"line":660},[67,139122,53377],{"class":262},[67,139124,139025],{"class":110},[67,139126,17369],{"class":73},[67,139128,139129,139131,139133,139135],{"class":69,"line":665},[67,139130,138998],{"class":77},[67,139132,53203],{"class":73},[67,139134,139036],{"class":114},[67,139136,3148],{"class":73},[67,139138,139139,139141,139143,139145],{"class":69,"line":677},[67,139140,72665],{"class":77},[67,139142,53203],{"class":73},[67,139144,63830],{"class":77},[67,139146,3148],{"class":73},[67,139148,139149],{"class":69,"line":683},[67,139150,3419],{"class":73},[3317,139152],{"style":127846,"src":139153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[26,139155,139156],{"start":655},[29,139157,139158],{},"使用场景3",[19,139160,139161],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[58,139163,139165],{"className":127990,"code":139164,"language":127992,"meta":63,"style":63},".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",[32,139166,139167,139173,139183,139187,139191,139195,139203,139213,139223,139227,139235,139245,139255],{"__ignoreMap":63},[67,139168,139169,139171],{"class":69,"line":70},[67,139170,131838],{"class":110},[67,139172,17369],{"class":73},[67,139174,139175,139177,139179,139181],{"class":69,"line":191},[67,139176,132470],{"class":77},[67,139178,53203],{"class":73},[67,139180,410],{"class":77},[67,139182,3148],{"class":73},[67,139184,139185],{"class":69,"line":202},[67,139186,3419],{"class":73},[67,139188,139189],{"class":69,"line":641},[67,139190,137451],{"class":73},[67,139192,139193],{"class":69,"line":655},[67,139194,138984],{"class":2058},[67,139196,139197,139199,139201],{"class":69,"line":660},[67,139198,53377],{"class":262},[67,139200,138991],{"class":110},[67,139202,17369],{"class":73},[67,139204,139205,139207,139209,139211],{"class":69,"line":665},[67,139206,138998],{"class":77},[67,139208,53203],{"class":73},[67,139210,9468],{"class":114},[67,139212,3148],{"class":73},[67,139214,139215,139217,139219,139221],{"class":69,"line":677},[67,139216,129606],{"class":77},[67,139218,53203],{"class":73},[67,139220,62630],{"class":77},[67,139222,3148],{"class":73},[67,139224,139225],{"class":69,"line":683},[67,139226,3419],{"class":73},[67,139228,139229,139231,139233],{"class":69,"line":689},[67,139230,53377],{"class":262},[67,139232,139025],{"class":110},[67,139234,17369],{"class":73},[67,139236,139237,139239,139241,139243],{"class":69,"line":694},[67,139238,138998],{"class":77},[67,139240,53203],{"class":73},[67,139242,139036],{"class":114},[67,139244,3148],{"class":73},[67,139246,139247,139249,139251,139253],{"class":69,"line":700},[67,139248,72665],{"class":77},[67,139250,53203],{"class":73},[67,139252,63830],{"class":77},[67,139254,3148],{"class":73},[67,139256,139257],{"class":69,"line":706},[67,139258,3419],{"class":73},[19,139260,139261],{},"div {\nmargin: 0 auto;\n}",[58,139263,139266],{"className":139264,"code":139265,"language":603},[601],"\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",[32,139267,139265],{"__ignoreMap":63},[19,139269,139270],{},"如果想让多个元素都发生变化",[19,139272,139273],{},"不能如下操作：",[19,139275,139276],{},"transition: width 2s ease 0.5s;",[19,139278,139279],{},"transition: height 2s ease 0.5s;不对！！！",[19,139281,139282],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139284,139285],{},"使用如下：加逗号隔开",[19,139287,139288],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139290,139291],{},"transition all 2s ease;",[391,139293,139295],{"id":139294},"_1426-过渡练习","14.2.6 过渡练习",[26,139297,139298],{},[29,139299,139300],{},"进度条",[3317,139302],{"style":127846,"src":139303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[58,139305,139307],{"className":127990,"code":139306,"language":127992,"meta":63,"style":63},"div {\n  transition: all 0.3s ease;\n}\n",[32,139308,139309,139315,139333],{"__ignoreMap":63},[67,139310,139311,139313],{"class":69,"line":70},[67,139312,53377],{"class":262},[67,139314,17369],{"class":73},[67,139316,139317,139320,139322,139324,139327,139329,139331],{"class":69,"line":191},[67,139318,139319],{"class":77},"  transition",[67,139321,53203],{"class":73},[67,139323,29907],{"class":77},[67,139325,139326],{"class":77}," 0.3",[67,139328,2684],{"class":84},[67,139330,80440],{"class":77},[67,139332,3148],{"class":73},[67,139334,139335],{"class":69,"line":202},[67,139336,3419],{"class":73},[26,139338,139339],{"start":191},[29,139340,139341],{},"小米logo",[19,139343,139344],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[58,139346,139348],{"className":127990,"code":139347,"language":127992,"meta":63,"style":63},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[32,139349,139350,139355,139361,139377,139382],{"__ignoreMap":63},[67,139351,139352],{"class":69,"line":70},[67,139353,139354],{"class":2058},"\u002F* CSS3 过渡 *\u002F\n",[67,139356,139357,139359],{"class":69,"line":191},[67,139358,53377],{"class":262},[67,139360,17369],{"class":73},[67,139362,139363,139365,139367,139369,139371,139373,139375],{"class":69,"line":202},[67,139364,139319],{"class":77},[67,139366,53203],{"class":73},[67,139368,29907],{"class":77},[67,139370,139326],{"class":77},[67,139372,2684],{"class":84},[67,139374,80440],{"class":77},[67,139376,3148],{"class":73},[67,139378,139379],{"class":69,"line":641},[67,139380,139381],{"class":2058},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[67,139383,139384],{"class":69,"line":655},[67,139385,3419],{"class":73},[19,139387,139388],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1903,139390,139391],{},"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":63,"searchDepth":191,"depth":191,"links":139393},[139394,139399],{"id":137724,"depth":191,"text":137725,"children":139395},[139396,139397,139398],{"id":137728,"depth":202,"text":137729},{"id":137805,"depth":202,"text":137806},{"id":138136,"depth":202,"text":138137},{"id":138427,"depth":191,"text":138428,"children":139400},[139401,139402],{"id":138431,"depth":202,"text":138432},{"id":139294,"depth":202,"text":139295},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137716,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139409,"title":139410,"body":139411,"description":25173,"extension":1930,"meta":141155,"navigation":630,"path":141156,"seo":141157,"stem":141158,"__hash__":141159},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139412,"toc":141136},[139413,139416,139420,139423,139429,139435,139439,139441,139444,139447,139450,139453,139456,139459,139462,139466,139470,139473,139476,139479,139483,139486,139489,139494,139497,139500,139503,139507,139510,139519,139522,139525,139529,139532,139535,139540,139547,139561,139569,139576,139581,139584,139587,139590,139597,139601,139607,139613,139616,139619,139624,139630,139632,139640,139645,139648,139654,139656,139661,139666,139669,139671,139676,139679,139684,139689,139723,139727,139731,139734,139738,139741,139827,139830,139867,139870,139906,139910,139915,139928,139982,139984,140012,140014,140042,140048,140062,140064,140108,140110,140154,140157,140164,140175,140177,140204,140206,140232,140239,140255,140257,140351,140353,140447,140454,140457,140462,140468,140542,140545,140547,140583,140585,140621,140624,140631,140650,140653,140656,140658,140683,140685,140709,140712,140715,140745,140749,140752,140815,140817,140883,140885,140949,140952,140984,140986,141012,141014,141040,141043,141074,141076,141102,141104,141130,141133],[10,139414,139410],{"id":139415},"_15-品优购项目上篇-搭建与公共模块",[14,139417,139419],{"id":139418},"_151-项目规划","15.1 项目规划",[3317,139421],{"style":127846,"src":139422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139424,139425,139428],{},[2144,139426,139427],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139430,139431,139434],{},[2144,139432,139433],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139436,139438],{"id":139437},"_152-项目介绍","15.2 项目介绍",[19,139440,139427],{},[3317,139442],{"style":127846,"src":139443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139445,139446],{},"主页：",[3317,139448],{"style":127846,"src":139449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139451,139452],{},"列表页：",[3317,139454],{"style":127846,"src":139455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139457,139458],{},"注册页：",[3317,139460],{"style":127846,"src":139461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139463,139465],{"id":139464},"_153-项目搭建工作","15.3 项目搭建工作",[391,139467,139469],{"id":139468},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3317,139471],{"style":127846,"src":139472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139474,139475],{},"经常更换的图片要放到upload文件夹中",[19,139477,139478],{},"不经常换的放到images文件夹中",[391,139480,139482],{"id":139481},"_1532-创建文件如下","15.3.2 创建文件如下",[3317,139484],{"style":127846,"src":139485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3317,139487],{"style":127846,"src":139488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139490,139491],{},[2144,139492,139493],{},"初始化样式：",[19,139495,139496],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139498,139499],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139501,139502],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[391,139504,139506],{"id":139505},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139508,139509],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139511,139512,139513,139518],{},"这里最典型的应用就是 ",[2144,139514,139515],{},[32,139516,139517],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3317,139520],{"style":127846,"src":139521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139523,139524],{},"通过link方法来引入",[391,139526,139528],{"id":139527},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3317,139530],{"style":127846,"src":139531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139533,139534],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[26,139536,139537],{},[29,139538,139539],{},"制作favicon图标",[19,139541,139542,139543,139546],{},"①把品优购图标切成 ",[32,139544,139545],{},"png"," 图片",[19,139548,139549,139550,139552,139553,139556,139557],{},"②把 ",[32,139551,139545],{}," 图片转换为 ",[32,139554,139555],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2230,139558,139559],{"href":139559,"rel":139560},"http:\u002F\u002Fwww.bitbug.net\u002F",[25657],[26,139562,139563,139566],{"start":191},[29,139564,139565],{},"favicon图标放到网站根目录下",[29,139567,139568],{},"HTML页面引入favicon",[19,139570,139571,139572,139575],{},"在html 页面里面的 ",[32,139573,139574],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139577,139578],{},[32,139579,139580],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139582,139583],{},"复制这行代码或者在生成这个的网站进行复制",[3317,139585],{"style":127846,"src":139586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139588,139589],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139591,139592,139593],{},"例如:",[2230,139594,139595],{"href":139595,"rel":139596},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25657],[391,139598,139600],{"id":139599},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139602,139603,139606],{},[2144,139604,139605],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139608,139609,139612],{},[2144,139610,139611],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139614,139615],{},"页面必须有三个标签用来符合 SEO 优化",[3317,139617],{"style":127846,"src":139618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[26,139620,139621],{},[29,139622,139623],{},"title网站标题",[19,139625,139626,139629],{},[2144,139627,139628],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139631,70550],{},[2994,139633,139634,139637],{},[29,139635,139636],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[29,139638,139639],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[26,139641,139642],{"start":191},[29,139643,139644],{},"description网站描述",[19,139646,139647],{},"简要说明我们网站主要是做什么的",[19,139649,139650,139653],{},[2144,139651,139652],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139655,70550],{},[19,139657,139658],{},[32,139659,139660],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[26,139662,139663],{"start":202},[29,139664,139665],{},"keywords关键词",[19,139667,139668],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139670,70550],{},[19,139672,139673],{},[32,139674,139675],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139677,139678],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139680,139681],{},[2144,139682,139683],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[26,139685,139686],{"start":641},[29,139687,139688],{},"代码总结",[58,139690,139691],{"className":128737,"code":132094,"language":128739,"meta":63,"style":63},[32,139692,139693,139697,139711,139715],{"__ignoreMap":63},[67,139694,139695],{"class":69,"line":70},[67,139696,132101],{"class":2058},[67,139698,139699,139701,139703,139705,139707,139709],{"class":69,"line":191},[67,139700,259],{"class":73},[67,139702,53377],{"class":262},[67,139704,55248],{"class":110},[67,139706,85],{"class":73},[67,139708,132114],{"class":114},[67,139710,323],{"class":73},[67,139712,139713],{"class":69,"line":202},[67,139714,132121],{"class":73},[67,139716,139717,139719,139721],{"class":69,"line":641},[67,139718,376],{"class":73},[67,139720,53377],{"class":262},[67,139722,323],{"class":73},[14,139724,139726],{"id":139725},"_154-项目公共部分制作","15.4 项目公共部分制作",[391,139728,139730],{"id":139729},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3317,139732],{"style":127846,"src":139733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[391,139735,139737],{"id":139736},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139739,139740],{},"布局思路：",[2994,139742,139743,139746,139749,139771,139804],{},[29,139744,139745],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[29,139747,139748],{},"里面包含版心的盒子",[29,139750,139751,139752],{},"版心盒子里面包含 1 号左侧盒子左浮动",[2994,139753,139754,139762,139768],{},[29,139755,139756,139757,23296,139759,139761],{},"1 号盒子 里面包含一个",[32,139758,2994],{},[32,139760,2994],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[29,139763,139764,139765,139767],{},"里面的内容是水平排列，所以需要给",[32,139766,29],{},"设置浮动",[29,139769,139770],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[29,139772,139773,139774],{},"版心盒子里面包含 2 号右侧盒子右浮动",[2994,139775,139776,139790,139795],{},[29,139777,139778,139779,23296,139781,139783,139784,139786,139787,139789],{},"2 号盒子 里面包含一个",[32,139780,2994],{},[32,139782,2994],{},"包裹",[32,139785,29],{},"，中间的",[32,139788,2909],{},"可以用样式去设置，也可以用字符 |",[29,139791,139792,139793,139767],{},"里面内容水平排列，给",[32,139794,29],{},[29,139796,139797,139798,139800,139801,139803],{},"找到里面所有偶数的 ",[32,139799,29],{}," 设置样式（偶数的 ",[32,139802,29],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[29,139805,139806,139807],{},"需要用到字体图标",[2994,139808,139809,139815,139818,139821,139824],{},[29,139810,139811,139812],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[32,139813,139814],{},"arrow-icon",[29,139816,139817],{},"先要引入字体图片的资源",[29,139819,139820],{},"在样式里面利用 font-face 来进行声明",[29,139822,139823],{},"在伪元素的 content属性设置 图标的编码",[29,139825,139826],{},"给伪元素设置font-family属性",[19,139828,139829],{},"结构实例代码：",[58,139831,139833],{"className":127990,"code":139832,"language":127992,"meta":63,"style":63},"div::before {\n  content: \"\";\n  display: block;\n}\n",[32,139834,139835,139843,139853,139863],{"__ignoreMap":63},[67,139836,139837,139839,139841],{"class":69,"line":70},[67,139838,53377],{"class":262},[67,139840,138991],{"class":110},[67,139842,17369],{"class":73},[67,139844,139845,139847,139849,139851],{"class":69,"line":191},[67,139846,138998],{"class":77},[67,139848,53203],{"class":73},[67,139850,9468],{"class":114},[67,139852,3148],{"class":73},[67,139854,139855,139857,139859,139861],{"class":69,"line":202},[67,139856,129606],{"class":77},[67,139858,53203],{"class":73},[67,139860,62630],{"class":77},[67,139862,3148],{"class":73},[67,139864,139865],{"class":69,"line":641},[67,139866,3419],{"class":73},[19,139868,139869],{},"样式实例代码：",[58,139871,139872],{"className":127990,"code":139832,"language":127992,"meta":63,"style":63},[32,139873,139874,139882,139892,139902],{"__ignoreMap":63},[67,139875,139876,139878,139880],{"class":69,"line":70},[67,139877,53377],{"class":262},[67,139879,138991],{"class":110},[67,139881,17369],{"class":73},[67,139883,139884,139886,139888,139890],{"class":69,"line":191},[67,139885,138998],{"class":77},[67,139887,53203],{"class":73},[67,139889,9468],{"class":114},[67,139891,3148],{"class":73},[67,139893,139894,139896,139898,139900],{"class":69,"line":202},[67,139895,129606],{"class":77},[67,139897,53203],{"class":73},[67,139899,62630],{"class":77},[67,139901,3148],{"class":73},[67,139903,139904],{"class":69,"line":641},[67,139905,3419],{"class":73},[391,139907,139909],{"id":139908},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[2994,139911,139912],{},[29,139913,139914],{},"header 盒子必须要有高度",[19,139916,139917,139918,139920,139921],{},"1 号盒子是 ",[32,139919,133002],{}," 标志定位，在正常开发过程中， ",[2144,139922,139923,139924,139927],{},"logo的布局其实是有讲究的，需要进行 ",[32,139925,139926],{},"logoSEO","的优化 （★★★）",[2994,139929,139930,139938,139946,139973],{},[29,139931,139932,139934,139935,139937],{},[32,139933,133002],{}," 里面首先放一个 ",[32,139936,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[29,139939,139940,139942,139943,139945],{},[32,139941,10],{}," 里面再放一个链接，可以返回首页的，把 ",[32,139944,133002],{}," 的背景图片给链接即可",[29,139947,139948,139949],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[2994,139950,139951,139966],{},[29,139952,139953,139954,139957,139958,139961,139962,139965],{},"方法1：",[32,139955,139956],{},"text-indent"," 移到盒子外面（",[32,139959,139960],{},"text-indent: -9999px",") ，然后 ",[32,139963,139964],{},"overflow:hidden"," ，淘宝的做法",[29,139967,139968,139969,139972],{},"方法2：直接给 ",[32,139970,139971],{},"font-size: 0;"," 就看不到文字了，京东的做法",[29,139974,139975,139976,139978,139979,139981],{},"最后给链接一个 ",[32,139977,53173],{}," 属性，这样鼠标放到 ",[32,139980,133002],{}," 上就可以看到提示文字了",[19,139983,139829],{},[58,139985,139986],{"className":128737,"code":133223,"language":128739,"meta":63,"style":63},[32,139987,139988],{"__ignoreMap":63},[67,139989,139990,139992,139994,139996,139998,140000,140002,140004,140006,140008,140010],{"class":69,"line":70},[67,139991,259],{"class":73},[67,139993,2230],{"class":262},[67,139995,62818],{"class":110},[67,139997,85],{"class":73},[67,139999,133238],{"class":114},[67,140001,133241],{"class":110},[67,140003,85],{"class":73},[67,140005,133246],{"class":114},[67,140007,133249],{"class":73},[67,140009,2230],{"class":262},[67,140011,323],{"class":73},[19,140013,139869],{},[58,140015,140016],{"className":128737,"code":133223,"language":128739,"meta":63,"style":63},[32,140017,140018],{"__ignoreMap":63},[67,140019,140020,140022,140024,140026,140028,140030,140032,140034,140036,140038,140040],{"class":69,"line":70},[67,140021,259],{"class":73},[67,140023,2230],{"class":262},[67,140025,62818],{"class":110},[67,140027,85],{"class":73},[67,140029,133238],{"class":114},[67,140031,133241],{"class":110},[67,140033,85],{"class":73},[67,140035,133246],{"class":114},[67,140037,133249],{"class":73},[67,140039,2230],{"class":262},[67,140041,323],{"class":73},[19,140043,140044,140045,140047],{},"2 号盒子是 ",[32,140046,133015],{}," 搜索模块定位",[2994,140049,140050,140053,140056,140059],{},[29,140051,140052],{},"search盒子利用定位的方式放在对应的位置",[29,140054,140055],{},"search盒子设置绝对定位，header盒子设置相对定位",[29,140057,140058],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[29,140060,140061],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140063,139829],{},[58,140065,140066],{"className":127990,"code":133310,"language":127992,"meta":63,"style":63},[32,140067,140068,140090,140094,140104],{"__ignoreMap":63},[67,140069,140070,140072,140074,140076,140078,140080,140082,140084,140086,140088],{"class":69,"line":70},[67,140071,53377],{"class":262},[67,140073,1868],{"class":73},[67,140075,19],{"class":262},[67,140077,1868],{"class":73},[67,140079,10],{"class":262},[67,140081,1868],{"class":73},[67,140083,2994],{"class":262},[67,140085,1868],{"class":73},[67,140087,29],{"class":262},[67,140089,17369],{"class":73},[67,140091,140092],{"class":69,"line":191},[67,140093,133339],{"class":2058},[67,140095,140096,140098,140100,140102],{"class":69,"line":202},[67,140097,129606],{"class":77},[67,140099,53203],{"class":73},[67,140101,62630],{"class":77},[67,140103,3148],{"class":73},[67,140105,140106],{"class":69,"line":641},[67,140107,3419],{"class":73},[19,140109,139869],{},[58,140111,140112],{"className":127990,"code":133310,"language":127992,"meta":63,"style":63},[32,140113,140114,140136,140140,140150],{"__ignoreMap":63},[67,140115,140116,140118,140120,140122,140124,140126,140128,140130,140132,140134],{"class":69,"line":70},[67,140117,53377],{"class":262},[67,140119,1868],{"class":73},[67,140121,19],{"class":262},[67,140123,1868],{"class":73},[67,140125,10],{"class":262},[67,140127,1868],{"class":73},[67,140129,2994],{"class":262},[67,140131,1868],{"class":73},[67,140133,29],{"class":262},[67,140135,17369],{"class":73},[67,140137,140138],{"class":69,"line":191},[67,140139,133339],{"class":2058},[67,140141,140142,140144,140146,140148],{"class":69,"line":202},[67,140143,129606],{"class":77},[67,140145,53203],{"class":73},[67,140147,62630],{"class":77},[67,140149,3148],{"class":73},[67,140151,140152],{"class":69,"line":641},[67,140153,3419],{"class":73},[19,140155,140156],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140158,140159,140160,140163],{},"3 号盒子是 ",[32,140161,140162],{},"hotwords"," 热词模块定位",[2994,140165,140166,140169,140172],{},[29,140167,140168],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[29,140170,140171],{},"给里面所有的a标签设置 左右10px的外边距",[29,140173,140174],{},"给第一个a标签设置文字变红色（#c81623）",[19,140176,139829],{},[58,140178,140180],{"className":127990,"code":140179,"language":127992,"meta":63,"style":63},"div {\n  margin: 0 auto;\n}\n",[32,140181,140182,140188,140200],{"__ignoreMap":63},[67,140183,140184,140186],{"class":69,"line":70},[67,140185,53377],{"class":262},[67,140187,17369],{"class":73},[67,140189,140190,140192,140194,140196,140198],{"class":69,"line":191},[67,140191,72230],{"class":77},[67,140193,53203],{"class":73},[67,140195,78],{"class":77},[67,140197,53322],{"class":77},[67,140199,3148],{"class":73},[67,140201,140202],{"class":69,"line":202},[67,140203,3419],{"class":73},[19,140205,139869],{},[58,140207,140208],{"className":127990,"code":140179,"language":127992,"meta":63,"style":63},[32,140209,140210,140216,140228],{"__ignoreMap":63},[67,140211,140212,140214],{"class":69,"line":70},[67,140213,53377],{"class":262},[67,140215,17369],{"class":73},[67,140217,140218,140220,140222,140224,140226],{"class":69,"line":191},[67,140219,72230],{"class":77},[67,140221,53203],{"class":73},[67,140223,78],{"class":77},[67,140225,53322],{"class":77},[67,140227,3148],{"class":73},[67,140229,140230],{"class":69,"line":202},[67,140231,3419],{"class":73},[19,140233,140234,140235,140238],{},"4 号盒子是 ",[32,140236,140237],{},"shopcar"," 购物车模块",[2994,140240,140241,140246,140249,140252],{},[29,140242,124773,140243,140245],{},[32,140244,140237],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[29,140247,140248],{},"count 统计部分用绝对定位做",[29,140250,140251],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[29,140253,140254],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140256,139829],{},[58,140258,140259],{"className":127990,"code":133422,"language":127992,"meta":63,"style":63},[32,140260,140261,140265,140279,140283,140297,140301,140315,140319,140333,140337],{"__ignoreMap":63},[67,140262,140263],{"class":69,"line":70},[67,140264,133429],{"class":2058},[67,140266,140267,140269,140271,140273,140275,140277],{"class":69,"line":191},[67,140268,133434],{"class":110},[67,140270,81567],{"class":73},[67,140272,130350],{"class":77},[67,140274,53203],{"class":73},[67,140276,133443],{"class":77},[67,140278,130920],{"class":73},[67,140280,140281],{"class":69,"line":202},[67,140282,133450],{"class":2058},[67,140284,140285,140287,140289,140291,140293,140295],{"class":69,"line":641},[67,140286,133455],{"class":110},[67,140288,81567],{"class":73},[67,140290,130350],{"class":77},[67,140292,53203],{"class":73},[67,140294,56525],{"class":77},[67,140296,130920],{"class":73},[67,140298,140299],{"class":69,"line":655},[67,140300,133470],{"class":2058},[67,140302,140303,140305,140307,140309,140311,140313],{"class":69,"line":660},[67,140304,133475],{"class":110},[67,140306,81567],{"class":73},[67,140308,130350],{"class":77},[67,140310,53203],{"class":73},[67,140312,56592],{"class":77},[67,140314,130920],{"class":73},[67,140316,140317],{"class":69,"line":665},[67,140318,133490],{"class":2058},[67,140320,140321,140323,140325,140327,140329,140331],{"class":69,"line":677},[67,140322,133495],{"class":110},[67,140324,81567],{"class":73},[67,140326,130350],{"class":77},[67,140328,53203],{"class":73},[67,140330,87992],{"class":77},[67,140332,130920],{"class":73},[67,140334,140335],{"class":69,"line":683},[67,140336,133510],{"class":2058},[67,140338,140339,140341,140343,140345,140347,140349],{"class":69,"line":689},[67,140340,133515],{"class":110},[67,140342,81567],{"class":73},[67,140344,130350],{"class":77},[67,140346,53203],{"class":73},[67,140348,133524],{"class":77},[67,140350,130920],{"class":73},[19,140352,139869],{},[58,140354,140355],{"className":127990,"code":133422,"language":127992,"meta":63,"style":63},[32,140356,140357,140361,140375,140379,140393,140397,140411,140415,140429,140433],{"__ignoreMap":63},[67,140358,140359],{"class":69,"line":70},[67,140360,133429],{"class":2058},[67,140362,140363,140365,140367,140369,140371,140373],{"class":69,"line":191},[67,140364,133434],{"class":110},[67,140366,81567],{"class":73},[67,140368,130350],{"class":77},[67,140370,53203],{"class":73},[67,140372,133443],{"class":77},[67,140374,130920],{"class":73},[67,140376,140377],{"class":69,"line":202},[67,140378,133450],{"class":2058},[67,140380,140381,140383,140385,140387,140389,140391],{"class":69,"line":641},[67,140382,133455],{"class":110},[67,140384,81567],{"class":73},[67,140386,130350],{"class":77},[67,140388,53203],{"class":73},[67,140390,56525],{"class":77},[67,140392,130920],{"class":73},[67,140394,140395],{"class":69,"line":655},[67,140396,133470],{"class":2058},[67,140398,140399,140401,140403,140405,140407,140409],{"class":69,"line":660},[67,140400,133475],{"class":110},[67,140402,81567],{"class":73},[67,140404,130350],{"class":77},[67,140406,53203],{"class":73},[67,140408,56592],{"class":77},[67,140410,130920],{"class":73},[67,140412,140413],{"class":69,"line":665},[67,140414,133490],{"class":2058},[67,140416,140417,140419,140421,140423,140425,140427],{"class":69,"line":677},[67,140418,133495],{"class":110},[67,140420,81567],{"class":73},[67,140422,130350],{"class":77},[67,140424,53203],{"class":73},[67,140426,87992],{"class":77},[67,140428,130920],{"class":73},[67,140430,140431],{"class":69,"line":683},[67,140432,133510],{"class":2058},[67,140434,140435,140437,140439,140441,140443,140445],{"class":69,"line":689},[67,140436,133515],{"class":110},[67,140438,81567],{"class":73},[67,140440,130350],{"class":77},[67,140442,53203],{"class":73},[67,140444,133524],{"class":77},[67,140446,130920],{"class":73},[391,140448,140450,140451,140453],{"id":140449},"_1544-nav导航模块制作","15.4.4 ",[32,140452,55475],{},"导航模块制作",[3317,140455],{"style":127846,"src":140456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140458,140459,140461],{},[32,140460,55475],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140463,140464,140465],{},"1 号盒子左侧浮动，",[32,140466,140467],{},"dropdown",[2994,140469,140470,140480,140488,140494,140502,140512,140520,140531],{},[29,140471,140472,140473,1264,140476,140479],{},"1号盒子有讲究，根据相关性 里面包含 ",[32,140474,140475],{},".dt",[32,140477,140478],{},".dd"," 两个盒子",[29,140481,140482,140484,140485,140487],{},[32,140483,140475],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[32,140486,140478],{}," 挤到下面去了",[29,140489,140490,140491,140493],{},"给 ",[32,140492,140478],{}," 盒子设置宽度 和 高度，以及背景颜色",[29,140495,140490,140496,140498,140499,121675],{},[32,140497,140478],{}," 盒子里面定义 无序列表 （",[32,140500,140501],{},"ul > li > a",[29,140503,140504,140505,140507,140508,140511],{},"每个 ",[32,140506,29],{}," 都有一个高度（",[32,140509,140510],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[29,140513,140490,140514,140516,140517,121675],{},[32,140515,29],{}," 里面的a设置文字大小（",[32,140518,140519],{},"14px",[29,140521,140490,140522,140524,140525,140527,140528,140530],{},[32,140523,29],{}," 设置 ",[32,140526,129151],{},"，当鼠标移入的时候，让",[32,140529,29],{},"的背景变成白色，让里面的文字变成红色",[29,140532,140533,140535,140536,140538,140539,140541],{},[32,140534,29],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[32,140537,29],{},"的右侧，那么给",[32,140540,29],{},"设置相对定位",[19,140543,140544],{},"一定要注意相关性",[19,140546,139829],{},[58,140548,140549],{"className":127990,"code":139832,"language":127992,"meta":63,"style":63},[32,140550,140551,140559,140569,140579],{"__ignoreMap":63},[67,140552,140553,140555,140557],{"class":69,"line":70},[67,140554,53377],{"class":262},[67,140556,138991],{"class":110},[67,140558,17369],{"class":73},[67,140560,140561,140563,140565,140567],{"class":69,"line":191},[67,140562,138998],{"class":77},[67,140564,53203],{"class":73},[67,140566,9468],{"class":114},[67,140568,3148],{"class":73},[67,140570,140571,140573,140575,140577],{"class":69,"line":202},[67,140572,129606],{"class":77},[67,140574,53203],{"class":73},[67,140576,62630],{"class":77},[67,140578,3148],{"class":73},[67,140580,140581],{"class":69,"line":641},[67,140582,3419],{"class":73},[19,140584,139869],{},[58,140586,140587],{"className":127990,"code":139832,"language":127992,"meta":63,"style":63},[32,140588,140589,140597,140607,140617],{"__ignoreMap":63},[67,140590,140591,140593,140595],{"class":69,"line":70},[67,140592,53377],{"class":262},[67,140594,138991],{"class":110},[67,140596,17369],{"class":73},[67,140598,140599,140601,140603,140605],{"class":69,"line":191},[67,140600,138998],{"class":77},[67,140602,53203],{"class":73},[67,140604,9468],{"class":114},[67,140606,3148],{"class":73},[67,140608,140609,140611,140613,140615],{"class":69,"line":202},[67,140610,129606],{"class":77},[67,140612,53203],{"class":73},[67,140614,62630],{"class":77},[67,140616,3148],{"class":73},[67,140618,140619],{"class":69,"line":641},[67,140620,3419],{"class":73},[19,140622,140623],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140625,140626,140627,140630],{},"2 号盒子左侧浮动，",[32,140628,140629],{},"navitems"," 导航栏组",[2994,140632,140633,140638,140647],{},[29,140634,140635,140636],{},"里面结构是 ",[32,140637,140501],{},[29,140639,140640,140641,140643,140644,140646],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[32,140642,2230],{},"左右的",[32,140645,32660],{},"把两侧撑开",[29,140648,140649],{},"让文字垂直居中（行高等于高度）",[3317,140651],{"style":127846,"src":140652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140654,140655],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140657,139829],{},[58,140659,140661],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},".box {\n  float: left;\n}\n",[32,140662,140663,140669,140679],{"__ignoreMap":63},[67,140664,140665,140667],{"class":69,"line":70},[67,140666,131838],{"class":110},[67,140668,17369],{"class":73},[67,140670,140671,140673,140675,140677],{"class":69,"line":191},[67,140672,132470],{"class":77},[67,140674,53203],{"class":73},[67,140676,410],{"class":77},[67,140678,3148],{"class":73},[67,140680,140681],{"class":69,"line":202},[67,140682,3419],{"class":73},[19,140684,139869],{},[58,140686,140687],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,140688,140689,140695,140705],{"__ignoreMap":63},[67,140690,140691,140693],{"class":69,"line":70},[67,140692,131838],{"class":110},[67,140694,17369],{"class":73},[67,140696,140697,140699,140701,140703],{"class":69,"line":191},[67,140698,132470],{"class":77},[67,140700,53203],{"class":73},[67,140702,410],{"class":77},[67,140704,3148],{"class":73},[67,140706,140707],{"class":69,"line":202},[67,140708,3419],{"class":73},[19,140710,140711],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3317,140713],{"style":127846,"src":140714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[58,140716,140717],{"className":127990,"code":132147,"language":127992,"meta":63,"style":63},[32,140718,140719,140725,140741],{"__ignoreMap":63},[67,140720,140721,140723],{"class":69,"line":70},[67,140722,53377],{"class":262},[67,140724,17369],{"class":73},[67,140726,140727,140729,140731,140733,140735,140737,140739],{"class":69,"line":191},[67,140728,72656],{"class":77},[67,140730,53203],{"class":73},[67,140732,2209],{"class":77},[67,140734,53258],{"class":84},[67,140736,53287],{"class":77},[67,140738,131382],{"class":77},[67,140740,3148],{"class":73},[67,140742,140743],{"class":69,"line":202},[67,140744,3419],{"class":73},[391,140746,140748],{"id":140747},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3317,140750],{"style":127846,"src":140751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[2994,140753,140754,140759,140764],{},[29,140755,140756,140758],{},[32,140757,133193],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[29,140760,140761,140763],{},[32,140762,133193],{}," 里面有一个大的版心",[29,140765,140766,140767,140770,140771],{},"版心里面包含 1 号盒子，",[32,140768,140769],{},"mod_service"," 是服务模块，mod 是模块的意思",[2994,140772,140773,140778,140791,140807,140812],{},[29,140774,140490,140775,140777],{},[32,140776,140769],{}," 设置高度（80px）和下边框",[29,140779,140780,140781,140784,140785,140787,140788,140790],{},"在里面定义 ",[32,140782,140783],{},"ul > li"," ,每个",[32,140786,29],{}," 宽度是300px 高度是 50px，给每个",[32,140789,29],{},"设置35px的左内边距",[29,140792,140793,140794,140796,140797,140799,140800,140802,140803,20207,140805,121675],{},"在每个",[32,140795,29],{},"里面，放一个 ",[32,140798,24706],{},"（里面放图标），一个",[32,140801,53377],{},"（里面放",[32,140804,53377],{},[32,140806,19],{},[29,140808,140490,140809,140811],{},[32,140810,24706],{},"设置浮动，让h5与这个div左右排列",[29,140813,140814],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140816,139829],{},[58,140818,140820],{"className":127990,"code":140819,"language":127992,"meta":63,"style":63},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[32,140821,140822,140828,140840,140852,140879],{"__ignoreMap":63},[67,140823,140824,140826],{"class":69,"line":70},[67,140825,135747],{"class":110},[67,140827,17369],{"class":73},[67,140829,140830,140832,140834,140836,140838],{"class":69,"line":191},[67,140831,72328],{"class":77},[67,140833,53203],{"class":73},[67,140835,2689],{"class":77},[67,140837,53258],{"class":84},[67,140839,3148],{"class":73},[67,140841,140842,140844,140846,140848,140850],{"class":69,"line":202},[67,140843,72548],{"class":77},[67,140845,53203],{"class":73},[67,140847,2689],{"class":77},[67,140849,53258],{"class":84},[67,140851,3148],{"class":73},[67,140853,140854,140856,140858,140860,140862,140864,140866,140868,140871,140873,140875,140877],{"class":69,"line":641},[67,140855,72371],{"class":77},[67,140857,53203],{"class":73},[67,140859,63487],{"class":77},[67,140861,854],{"class":73},[67,140863,135786],{"class":7033},[67,140865,15512],{"class":73},[67,140867,63497],{"class":77},[67,140869,140870],{"class":77}," -10",[67,140872,53258],{"class":84},[67,140874,135805],{"class":77},[67,140876,53258],{"class":84},[67,140878,3148],{"class":73},[67,140880,140881],{"class":69,"line":655},[67,140882,3419],{"class":73},[19,140884,139869],{},[58,140886,140887],{"className":127990,"code":140819,"language":127992,"meta":63,"style":63},[32,140888,140889,140895,140907,140919,140945],{"__ignoreMap":63},[67,140890,140891,140893],{"class":69,"line":70},[67,140892,135747],{"class":110},[67,140894,17369],{"class":73},[67,140896,140897,140899,140901,140903,140905],{"class":69,"line":191},[67,140898,72328],{"class":77},[67,140900,53203],{"class":73},[67,140902,2689],{"class":77},[67,140904,53258],{"class":84},[67,140906,3148],{"class":73},[67,140908,140909,140911,140913,140915,140917],{"class":69,"line":202},[67,140910,72548],{"class":77},[67,140912,53203],{"class":73},[67,140914,2689],{"class":77},[67,140916,53258],{"class":84},[67,140918,3148],{"class":73},[67,140920,140921,140923,140925,140927,140929,140931,140933,140935,140937,140939,140941,140943],{"class":69,"line":641},[67,140922,72371],{"class":77},[67,140924,53203],{"class":73},[67,140926,63487],{"class":77},[67,140928,854],{"class":73},[67,140930,135786],{"class":7033},[67,140932,15512],{"class":73},[67,140934,63497],{"class":77},[67,140936,140870],{"class":77},[67,140938,53258],{"class":84},[67,140940,135805],{"class":77},[67,140942,53258],{"class":84},[67,140944,3148],{"class":73},[67,140946,140947],{"class":69,"line":655},[67,140948,3419],{"class":73},[19,140950,140951],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[2994,140953,140954,140957,140963,140969,140981],{},[29,140955,140956],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[29,140958,140959,140960,121675],{},"里面的布局利用 自定义列表来实现（",[32,140961,140962],{},"dl > dt + dd",[29,140964,140490,140965,140968],{},[32,140966,140967],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[29,140970,140490,140971,140974,140975,20207,140977,140980],{},[32,140972,140973],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[32,140976,140973],{},[32,140978,140979],{},"dd","之间有些距离",[29,140982,140983],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140985,139829],{},[58,140987,140988],{"className":127990,"code":140179,"language":127992,"meta":63,"style":63},[32,140989,140990,140996,141008],{"__ignoreMap":63},[67,140991,140992,140994],{"class":69,"line":70},[67,140993,53377],{"class":262},[67,140995,17369],{"class":73},[67,140997,140998,141000,141002,141004,141006],{"class":69,"line":191},[67,140999,72230],{"class":77},[67,141001,53203],{"class":73},[67,141003,78],{"class":77},[67,141005,53322],{"class":77},[67,141007,3148],{"class":73},[67,141009,141010],{"class":69,"line":202},[67,141011,3419],{"class":73},[19,141013,139869],{},[58,141015,141016],{"className":127990,"code":140179,"language":127992,"meta":63,"style":63},[32,141017,141018,141024,141036],{"__ignoreMap":63},[67,141019,141020,141022],{"class":69,"line":70},[67,141021,53377],{"class":262},[67,141023,17369],{"class":73},[67,141025,141026,141028,141030,141032,141034],{"class":69,"line":191},[67,141027,72230],{"class":77},[67,141029,53203],{"class":73},[67,141031,78],{"class":77},[67,141033,53322],{"class":77},[67,141035,3148],{"class":73},[67,141037,141038],{"class":69,"line":202},[67,141039,3419],{"class":73},[19,141041,141042],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[2994,141044,141045,141054,141057,141068],{},[29,141046,141047,141048,141050,141051,141053],{},"分为上下两块，上面是 ",[32,141049,133210],{}," 友情链接，下面是 ",[32,141052,133203],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[29,141055,141056],{},"把内容分别复制到相应模块中",[29,141058,140490,141059,141061,141062,141064,141065,141067],{},[32,141060,133210],{}," 设置 15px 的下外边距，给",[32,141063,133210],{}," 里面 的 ",[32,141066,2230],{}," 标签设置 左右 3px 的外边距",[29,141069,141070,141071,141073],{},"给",[32,141072,133203],{}," 设置 20px 的行高",[19,141075,139829],{},[58,141077,141078],{"className":127990,"code":140179,"language":127992,"meta":63,"style":63},[32,141079,141080,141086,141098],{"__ignoreMap":63},[67,141081,141082,141084],{"class":69,"line":70},[67,141083,53377],{"class":262},[67,141085,17369],{"class":73},[67,141087,141088,141090,141092,141094,141096],{"class":69,"line":191},[67,141089,72230],{"class":77},[67,141091,53203],{"class":73},[67,141093,78],{"class":77},[67,141095,53322],{"class":77},[67,141097,3148],{"class":73},[67,141099,141100],{"class":69,"line":202},[67,141101,3419],{"class":73},[19,141103,139869],{},[58,141105,141106],{"className":127990,"code":140179,"language":127992,"meta":63,"style":63},[32,141107,141108,141114,141126],{"__ignoreMap":63},[67,141109,141110,141112],{"class":69,"line":70},[67,141111,53377],{"class":262},[67,141113,17369],{"class":73},[67,141115,141116,141118,141120,141122,141124],{"class":69,"line":191},[67,141117,72230],{"class":77},[67,141119,53203],{"class":73},[67,141121,78],{"class":77},[67,141123,53322],{"class":77},[67,141125,3148],{"class":73},[67,141127,141128],{"class":69,"line":202},[67,141129,3419],{"class":73},[19,141131,141132],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1903,141134,141135],{},"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":63,"searchDepth":191,"depth":191,"links":141137},[141138,141139,141140,141147],{"id":139418,"depth":191,"text":139419},{"id":139437,"depth":191,"text":139438},{"id":139464,"depth":191,"text":139465,"children":141141},[141142,141143,141144,141145,141146],{"id":139468,"depth":202,"text":139469},{"id":139481,"depth":202,"text":139482},{"id":139505,"depth":202,"text":139506},{"id":139527,"depth":202,"text":139528},{"id":139599,"depth":202,"text":139600},{"id":139725,"depth":191,"text":139726,"children":141148},[141149,141150,141151,141152,141154],{"id":139729,"depth":202,"text":139730},{"id":139736,"depth":202,"text":139737},{"id":139908,"depth":202,"text":139909},{"id":140449,"depth":202,"text":141153},"15.4.4 nav导航模块制作",{"id":140747,"depth":202,"text":140748},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139410,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141161,"title":141162,"body":141163,"description":25173,"extension":1930,"meta":143565,"navigation":630,"path":143566,"seo":143567,"stem":143568,"__hash__":143569},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141164,"toc":143542},[141165,141168,141172,141176,141188,141191,141194,141197,141208,141210,141234,141236,141260,141265,141268,141270,141306,141308,141344,141347,141352,141355,141358,141361,141391,141398,141401,141411,141413,141447,141450,141484,141490,141507,141509,141545,141547,141583,141588,141613,141615,141641,141643,141667,141674,141677,141741,141743,141785,141787,141827,141834,141839,141841,141871,141873,141903,141907,141910,141917,141929,141931,141957,141959,141983,141986,141988,142012,142018,142028,142030,142060,142062,142092,142099,142140,142142,142178,142180,142216,142220,142223,142226,142229,142235,142240,142243,142266,142269,142293,142296,142320,142325,142328,142331,142334,142337,142340,142414,142416,142446,142448,142478,142481,142484,142516,142520,142524,142538,142547,142550,142555,142557,142651,142653,142747,142770,142772,142796,142798,142822,142829,142832,142842,142844,142868,142873,142881,142883,142913,142918,142958,142960,142986,142988,143014,143018,143021,143026,143029,143033,143041,143048,143056,143058,143088,143090,143120,143128,143131,143134,143136,143166,143168,143198,143201,143206,143208,143232,143234,143258,143261,143346,143348,143372,143374,143398,143402,143404,143428,143430,143464,143468,143482,143485,143490,143493,143498,143501,143531,143539],[10,141166,141162],{"id":141167},"_16-品优购项目下篇-主体与页面开发",[14,141169,141171],{"id":141170},"_161-项目主体模块制作","16.1 项目主体模块制作",[391,141173,141175],{"id":141174},"_1611-首页制作","16.1.1 首页制作",[19,141177,141178,141180,141181,141183,141184,141187],{},[2144,141179,103761],{}," 主体模块是 ",[2144,141182,75818],{}," 里面专有的，注意需要新的样式文件 ",[2144,141185,141186],{},"index.css，"," 就不要写在common.css中了",[3317,141189],{"style":127846,"src":141190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3317,141192],{"style":127846,"src":141193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141195,141196],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[2994,141198,141199,141202,141205],{},[29,141200,141201],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[29,141203,141204],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[29,141206,141207],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141209,139829],{},[58,141211,141212],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,141213,141214,141220,141230],{"__ignoreMap":63},[67,141215,141216,141218],{"class":69,"line":70},[67,141217,131838],{"class":110},[67,141219,17369],{"class":73},[67,141221,141222,141224,141226,141228],{"class":69,"line":191},[67,141223,132470],{"class":77},[67,141225,53203],{"class":73},[67,141227,410],{"class":77},[67,141229,3148],{"class":73},[67,141231,141232],{"class":69,"line":202},[67,141233,3419],{"class":73},[19,141235,139869],{},[58,141237,141238],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,141239,141240,141246,141256],{"__ignoreMap":63},[67,141241,141242,141244],{"class":69,"line":70},[67,141243,131838],{"class":110},[67,141245,17369],{"class":73},[67,141247,141248,141250,141252,141254],{"class":69,"line":191},[67,141249,132470],{"class":77},[67,141251,53203],{"class":73},[67,141253,410],{"class":77},[67,141255,3148],{"class":73},[67,141257,141258],{"class":69,"line":202},[67,141259,3419],{"class":73},[26,141261,141262],{},[29,141263,141264],{},"左侧focus模块制作",[3317,141266],{"style":127846,"src":141267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141269,139829],{},[58,141271,141272],{"className":127990,"code":129313,"language":127992,"meta":63,"style":63},[32,141273,141274,141282,141292,141302],{"__ignoreMap":63},[67,141275,141276,141278,141280],{"class":69,"line":70},[67,141277,55583],{"class":262},[67,141279,63660],{"class":110},[67,141281,17369],{"class":73},[67,141283,141284,141286,141288,141290],{"class":69,"line":191},[67,141285,129328],{"class":77},[67,141287,53203],{"class":73},[67,141289,56650],{"class":77},[67,141291,3148],{"class":73},[67,141293,141294,141296,141298,141300],{"class":69,"line":202},[67,141295,72558],{"class":77},[67,141297,53203],{"class":73},[67,141299,56498],{"class":77},[67,141301,3148],{"class":73},[67,141303,141304],{"class":69,"line":641},[67,141305,3419],{"class":73},[19,141307,139869],{},[58,141309,141310],{"className":127990,"code":129313,"language":127992,"meta":63,"style":63},[32,141311,141312,141320,141330,141340],{"__ignoreMap":63},[67,141313,141314,141316,141318],{"class":69,"line":70},[67,141315,55583],{"class":262},[67,141317,63660],{"class":110},[67,141319,17369],{"class":73},[67,141321,141322,141324,141326,141328],{"class":69,"line":191},[67,141323,129328],{"class":77},[67,141325,53203],{"class":73},[67,141327,56650],{"class":77},[67,141329,3148],{"class":73},[67,141331,141332,141334,141336,141338],{"class":69,"line":202},[67,141333,72558],{"class":77},[67,141335,53203],{"class":73},[67,141337,56498],{"class":77},[67,141339,3148],{"class":73},[67,141341,141342],{"class":69,"line":641},[67,141343,3419],{"class":73},[19,141345,141346],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[26,141348,141349],{"start":191},[29,141350,141351],{},"右侧newsflash模块制作",[3317,141353],{"style":127846,"src":141354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141356,141357],{},"右侧的模块 分为上中下三个盒子",[19,141359,141360],{},"结构代码：",[58,141362,141363],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,141364,141365],{"__ignoreMap":63},[67,141366,141367,141369,141371,141373,141375,141377,141379,141381,141383,141385,141387,141389],{"class":69,"line":70},[67,141368,259],{"class":73},[67,141370,3317],{"class":262},[67,141372,57000],{"class":110},[67,141374,85],{"class":73},[67,141376,135507],{"class":114},[67,141378,57008],{"class":110},[67,141380,85],{"class":73},[67,141382,135514],{"class":114},[67,141384,135517],{"class":110},[67,141386,85],{"class":73},[67,141388,135522],{"class":114},[67,141390,323],{"class":73},[19,141392,141393,141394,141397],{},"1 号盒子为 ",[32,141395,141396],{},"news"," 新闻模块 高度为 165px",[3317,141399],{"style":127846,"src":141400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141402,141403,141404,141407,141408],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[32,141405,141406],{},"news-hd","，下面是 ",[32,141409,141410],{},"news-bd",[19,141412,141360],{},[58,141414,141415],{"className":128737,"code":132094,"language":128739,"meta":63,"style":63},[32,141416,141417,141421,141435,141439],{"__ignoreMap":63},[67,141418,141419],{"class":69,"line":70},[67,141420,132101],{"class":2058},[67,141422,141423,141425,141427,141429,141431,141433],{"class":69,"line":191},[67,141424,259],{"class":73},[67,141426,53377],{"class":262},[67,141428,55248],{"class":110},[67,141430,85],{"class":73},[67,141432,132114],{"class":114},[67,141434,323],{"class":73},[67,141436,141437],{"class":69,"line":202},[67,141438,132121],{"class":73},[67,141440,141441,141443,141445],{"class":69,"line":641},[67,141442,376],{"class":73},[67,141444,53377],{"class":262},[67,141446,323],{"class":73},[19,141448,141449],{},"样式代码：",[58,141451,141452],{"className":128737,"code":132094,"language":128739,"meta":63,"style":63},[32,141453,141454,141458,141472,141476],{"__ignoreMap":63},[67,141455,141456],{"class":69,"line":70},[67,141457,132101],{"class":2058},[67,141459,141460,141462,141464,141466,141468,141470],{"class":69,"line":191},[67,141461,259],{"class":73},[67,141463,53377],{"class":262},[67,141465,55248],{"class":110},[67,141467,85],{"class":73},[67,141469,132114],{"class":114},[67,141471,323],{"class":73},[67,141473,141474],{"class":69,"line":202},[67,141475,132121],{"class":73},[67,141477,141478,141480,141482],{"class":69,"line":641},[67,141479,376],{"class":73},[67,141481,53377],{"class":262},[67,141483,323],{"class":73},[19,141485,141486,141487,141489],{},"上面是",[32,141488,141406],{},"，设置高度是 33px，设置下边框",[2994,141491,141492,141498],{},[29,141493,141494,141495,141497],{},"里面放一个",[32,141496,24706],{}," 标题",[29,141499,141500,141501,141503,141504,141506],{},"放一个a",[32,141502,104382],{},"，内容是 更多，然后让 ",[32,141505,2230],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141508,141360],{},[58,141510,141511],{"className":127990,"code":139832,"language":127992,"meta":63,"style":63},[32,141512,141513,141521,141531,141541],{"__ignoreMap":63},[67,141514,141515,141517,141519],{"class":69,"line":70},[67,141516,53377],{"class":262},[67,141518,138991],{"class":110},[67,141520,17369],{"class":73},[67,141522,141523,141525,141527,141529],{"class":69,"line":191},[67,141524,138998],{"class":77},[67,141526,53203],{"class":73},[67,141528,9468],{"class":114},[67,141530,3148],{"class":73},[67,141532,141533,141535,141537,141539],{"class":69,"line":202},[67,141534,129606],{"class":77},[67,141536,53203],{"class":73},[67,141538,62630],{"class":77},[67,141540,3148],{"class":73},[67,141542,141543],{"class":69,"line":641},[67,141544,3419],{"class":73},[19,141546,141449],{},[58,141548,141549],{"className":127990,"code":139832,"language":127992,"meta":63,"style":63},[32,141550,141551,141559,141569,141579],{"__ignoreMap":63},[67,141552,141553,141555,141557],{"class":69,"line":70},[67,141554,53377],{"class":262},[67,141556,138991],{"class":110},[67,141558,17369],{"class":73},[67,141560,141561,141563,141565,141567],{"class":69,"line":191},[67,141562,138998],{"class":77},[67,141564,53203],{"class":73},[67,141566,9468],{"class":114},[67,141568,3148],{"class":73},[67,141570,141571,141573,141575,141577],{"class":69,"line":202},[67,141572,129606],{"class":77},[67,141574,53203],{"class":73},[67,141576,62630],{"class":77},[67,141578,3148],{"class":73},[67,141580,141581],{"class":69,"line":641},[67,141582,3419],{"class":73},[19,141584,141585,141586],{},"下面是",[32,141587,141410],{},[2994,141589,141590,141598],{},[29,141591,141592,141593,1264,141595,141597],{},"里面包含 ",[32,141594,2994],{},[32,141596,29],{}," 还有链接",[29,141599,141070,141600,141602,141603,141605,141606,141609,141610],{},[32,141601,29],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[32,141604,132656],{}," 2.设置 ",[32,141607,141608],{},"white-space: nowrap;"," 3. 设置 ",[32,141611,141612],{},"text-overflow: ellipsis;",[19,141614,141360],{},[58,141616,141618],{"className":127990,"code":141617,"language":127992,"meta":63,"style":63},"div {\n  overflow: hidden;\n}\n",[32,141619,141620,141626,141637],{"__ignoreMap":63},[67,141621,141622,141624],{"class":69,"line":70},[67,141623,53377],{"class":262},[67,141625,17369],{"class":73},[67,141627,141628,141631,141633,141635],{"class":69,"line":191},[67,141629,141630],{"class":77},"  overflow",[67,141632,53203],{"class":73},[67,141634,63475],{"class":77},[67,141636,3148],{"class":73},[67,141638,141639],{"class":69,"line":202},[67,141640,3419],{"class":73},[19,141642,141449],{},[58,141644,141645],{"className":127990,"code":141617,"language":127992,"meta":63,"style":63},[32,141646,141647,141653,141663],{"__ignoreMap":63},[67,141648,141649,141651],{"class":69,"line":70},[67,141650,53377],{"class":262},[67,141652,17369],{"class":73},[67,141654,141655,141657,141659,141661],{"class":69,"line":191},[67,141656,141630],{"class":77},[67,141658,53203],{"class":73},[67,141660,63475],{"class":77},[67,141662,3148],{"class":73},[67,141664,141665],{"class":69,"line":202},[67,141666,3419],{"class":73},[19,141668,141669,141670,141673],{},"2 号盒子为 ",[32,141671,141672],{},"lifeservice"," 生活服务模块 高度为 209px",[3317,141675],{"style":127846,"src":141676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[2994,141678,141679,141682,141692,141716,141727],{},[29,141680,141681],{},"设置边框（左右下边框）",[29,141683,141684,141685,141688,141689,141691],{},"里面的内容 是 ",[32,141686,141687],{},"ul > 12*li","，给",[32,141690,29],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[29,141693,141694,141695],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[2994,141696,141697,141702,141711],{},[29,141698,141699,141701],{},[32,141700,141672],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[29,141703,141704,141705,141707,141708,141710],{},"可以让 ",[32,141706,141672],{}," 里面的 ",[32,141709,2994],{}," 宽度为 252，就可以装的下 4 个 小 li",[29,141712,141713,141715],{},[32,141714,141672],{}," 盒子 overflow 隐藏多余的部分就可以了",[29,141717,117905,141718,141720,141721,141723,141724,141726],{},[32,141719,29],{}," 里面放一个 ",[32,141722,2432],{},"（里面放图标），下面的文本用 ",[32,141725,19],{}," 标签包裹",[29,141728,140490,141729,141731,141732,141734,141735,140524,141737,141740],{},[32,141730,2432],{}," 设置 24px宽和28px的高（注意 ",[32,141733,2432],{}," 是行内元素， 转成行内块），给 ",[32,141736,29],{},[32,141738,141739],{},"text-align:center"," 让里面内容居中显示",[19,141742,141360],{},[58,141744,141746],{"className":127990,"code":141745,"language":127992,"meta":63,"style":63},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[32,141747,141748,141766,141771,141781],{"__ignoreMap":63},[67,141749,141750,141752,141754,141756,141758,141760,141762,141764],{"class":69,"line":70},[67,141751,67],{"class":262},[67,141753,1868],{"class":73},[67,141755,2230],{"class":262},[67,141757,1868],{"class":73},[67,141759,25350],{"class":262},[67,141761,1868],{"class":73},[67,141763,2144],{"class":262},[67,141765,17369],{"class":73},[67,141767,141768],{"class":69,"line":191},[67,141769,141770],{"class":2058},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[67,141772,141773,141775,141777,141779],{"class":69,"line":202},[67,141774,129606],{"class":77},[67,141776,53203],{"class":73},[67,141778,129668],{"class":77},[67,141780,3148],{"class":73},[67,141782,141783],{"class":69,"line":641},[67,141784,3419],{"class":73},[19,141786,141449],{},[58,141788,141789],{"className":127990,"code":141745,"language":127992,"meta":63,"style":63},[32,141790,141791,141809,141813,141823],{"__ignoreMap":63},[67,141792,141793,141795,141797,141799,141801,141803,141805,141807],{"class":69,"line":70},[67,141794,67],{"class":262},[67,141796,1868],{"class":73},[67,141798,2230],{"class":262},[67,141800,1868],{"class":73},[67,141802,25350],{"class":262},[67,141804,1868],{"class":73},[67,141806,2144],{"class":262},[67,141808,17369],{"class":73},[67,141810,141811],{"class":69,"line":191},[67,141812,141770],{"class":2058},[67,141814,141815,141817,141819,141821],{"class":69,"line":202},[67,141816,129606],{"class":77},[67,141818,53203],{"class":73},[67,141820,129668],{"class":77},[67,141822,3148],{"class":73},[67,141824,141825],{"class":69,"line":641},[67,141826,3419],{"class":73},[19,141828,141829,141830,141833],{},"3 号盒子为 ",[32,141831,141832],{},"bargain"," 特价商品",[2994,141835,141836],{},[29,141837,141838],{},"这个比较简单，直接插入一张图片即可",[19,141840,141360],{},[58,141842,141843],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,141844,141845],{"__ignoreMap":63},[67,141846,141847,141849,141851,141853,141855,141857,141859,141861,141863,141865,141867,141869],{"class":69,"line":70},[67,141848,259],{"class":73},[67,141850,3317],{"class":262},[67,141852,57000],{"class":110},[67,141854,85],{"class":73},[67,141856,135507],{"class":114},[67,141858,57008],{"class":110},[67,141860,85],{"class":73},[67,141862,135514],{"class":114},[67,141864,135517],{"class":110},[67,141866,85],{"class":73},[67,141868,135522],{"class":114},[67,141870,323],{"class":73},[19,141872,141449],{},[58,141874,141875],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,141876,141877],{"__ignoreMap":63},[67,141878,141879,141881,141883,141885,141887,141889,141891,141893,141895,141897,141899,141901],{"class":69,"line":70},[67,141880,259],{"class":73},[67,141882,3317],{"class":262},[67,141884,57000],{"class":110},[67,141886,85],{"class":73},[67,141888,135507],{"class":114},[67,141890,57008],{"class":110},[67,141892,85],{"class":73},[67,141894,135514],{"class":114},[67,141896,135517],{"class":110},[67,141898,85],{"class":73},[67,141900,135522],{"class":114},[67,141902,323],{"class":73},[391,141904,141906],{"id":141905},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3317,141908],{"style":127846,"src":141909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141911,141912,141913,141916],{},"大盒子 ",[32,141914,141915],{},"recom"," 推荐模块 recommend",[2994,141918,141919],{},[29,141920,141921,141922,141924,141925,141928],{},"给这个 ",[32,141923,141915],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[32,141926,141927],{},"#ebebeb","），设置距离上边 12px",[19,141930,141360],{},[58,141932,141934],{"className":127990,"code":141933,"language":127992,"meta":63,"style":63},"div {\n  background-color: #f0f0f0;\n}\n",[32,141935,141936,141942,141953],{"__ignoreMap":63},[67,141937,141938,141940],{"class":69,"line":70},[67,141939,53377],{"class":262},[67,141941,17369],{"class":73},[67,141943,141944,141946,141948,141951],{"class":69,"line":191},[67,141945,72638],{"class":77},[67,141947,53203],{"class":73},[67,141949,141950],{"class":77},"#f0f0f0",[67,141952,3148],{"class":73},[67,141954,141955],{"class":69,"line":202},[67,141956,3419],{"class":73},[19,141958,141449],{},[58,141960,141961],{"className":127990,"code":141933,"language":127992,"meta":63,"style":63},[32,141962,141963,141969,141979],{"__ignoreMap":63},[67,141964,141965,141967],{"class":69,"line":70},[67,141966,53377],{"class":262},[67,141968,17369],{"class":73},[67,141970,141971,141973,141975,141977],{"class":69,"line":191},[67,141972,72638],{"class":77},[67,141974,53203],{"class":73},[67,141976,141950],{"class":77},[67,141978,3148],{"class":73},[67,141980,141981],{"class":69,"line":202},[67,141982,3419],{"class":73},[19,141984,141985],{},"里面包含 2 个盒子， 浮动即可",[19,141987,141360],{},[58,141989,141990],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,141991,141992,141998,142008],{"__ignoreMap":63},[67,141993,141994,141996],{"class":69,"line":70},[67,141995,131838],{"class":110},[67,141997,17369],{"class":73},[67,141999,142000,142002,142004,142006],{"class":69,"line":191},[67,142001,132470],{"class":77},[67,142003,53203],{"class":73},[67,142005,410],{"class":77},[67,142007,3148],{"class":73},[67,142009,142010],{"class":69,"line":202},[67,142011,3419],{"class":73},[19,142013,142014,142015],{},"1 号盒子 ",[32,142016,142017],{},"recom_hd",[2994,142019,142020,142023],{},[29,142021,142022],{},"设置宽度205px，高度163px",[29,142024,141494,142025,142027],{},[32,142026,3317],{},"标签，插入图片即可",[19,142029,141360],{},[58,142031,142032],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,142033,142034],{"__ignoreMap":63},[67,142035,142036,142038,142040,142042,142044,142046,142048,142050,142052,142054,142056,142058],{"class":69,"line":70},[67,142037,259],{"class":73},[67,142039,3317],{"class":262},[67,142041,57000],{"class":110},[67,142043,85],{"class":73},[67,142045,135507],{"class":114},[67,142047,57008],{"class":110},[67,142049,85],{"class":73},[67,142051,135514],{"class":114},[67,142053,135517],{"class":110},[67,142055,85],{"class":73},[67,142057,135522],{"class":114},[67,142059,323],{"class":73},[19,142061,141449],{},[58,142063,142064],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,142065,142066],{"__ignoreMap":63},[67,142067,142068,142070,142072,142074,142076,142078,142080,142082,142084,142086,142088,142090],{"class":69,"line":70},[67,142069,259],{"class":73},[67,142071,3317],{"class":262},[67,142073,57000],{"class":110},[67,142075,85],{"class":73},[67,142077,135507],{"class":114},[67,142079,57008],{"class":110},[67,142081,85],{"class":73},[67,142083,135514],{"class":114},[67,142085,135517],{"class":110},[67,142087,85],{"class":73},[67,142089,135522],{"class":114},[67,142091,323],{"class":73},[19,142093,142094,142095,142098],{},"2 号盒子 ",[32,142096,142097],{},"recom_bd"," ，注意里面的小竖线",[2994,142100,142101,142112,142115,142120,142125],{},[29,142102,142103,142104,142106,142107,142109,142110],{},"右侧结构里面放 ",[32,142105,2994],{}," 包含 4个 ",[32,142108,29],{},"，每个li里面包含一个",[32,142111,3317],{},[29,142113,142114],{},"直接利用切片工具把里面的内容当成一张图片",[29,142116,140490,142117,142119],{},[32,142118,29],{}," 设置浮动",[29,142121,140490,142122,142124],{},[32,142123,3317],{}," 设置宽高，宽度 248px，高度 163px",[29,142126,142127,142128,141688,142131,142133,142134,142136,142137],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[32,142129,142130],{},"top 10px",[32,142132,29],{},"设置相对定位（注意，最后一个",[32,142135,29],{},"不用设置伪元素），可以利用 ",[32,142138,142139],{},"nth-child(-n+3){...}",[19,142141,141360],{},[58,142143,142144],{"className":127990,"code":139832,"language":127992,"meta":63,"style":63},[32,142145,142146,142154,142164,142174],{"__ignoreMap":63},[67,142147,142148,142150,142152],{"class":69,"line":70},[67,142149,53377],{"class":262},[67,142151,138991],{"class":110},[67,142153,17369],{"class":73},[67,142155,142156,142158,142160,142162],{"class":69,"line":191},[67,142157,138998],{"class":77},[67,142159,53203],{"class":73},[67,142161,9468],{"class":114},[67,142163,3148],{"class":73},[67,142165,142166,142168,142170,142172],{"class":69,"line":202},[67,142167,129606],{"class":77},[67,142169,53203],{"class":73},[67,142171,62630],{"class":77},[67,142173,3148],{"class":73},[67,142175,142176],{"class":69,"line":641},[67,142177,3419],{"class":73},[19,142179,141449],{},[58,142181,142182],{"className":127990,"code":139832,"language":127992,"meta":63,"style":63},[32,142183,142184,142192,142202,142212],{"__ignoreMap":63},[67,142185,142186,142188,142190],{"class":69,"line":70},[67,142187,53377],{"class":262},[67,142189,138991],{"class":110},[67,142191,17369],{"class":73},[67,142193,142194,142196,142198,142200],{"class":69,"line":191},[67,142195,138998],{"class":77},[67,142197,53203],{"class":73},[67,142199,9468],{"class":114},[67,142201,3148],{"class":73},[67,142203,142204,142206,142208,142210],{"class":69,"line":202},[67,142205,129606],{"class":77},[67,142207,53203],{"class":73},[67,142209,62630],{"class":77},[67,142211,3148],{"class":73},[67,142213,142214],{"class":69,"line":641},[67,142215,3419],{"class":73},[391,142217,142219],{"id":142218},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3317,142221],{"style":127846,"src":142222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142224,142225],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142227,142228],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142230,142231,142234],{},[32,142232,142233],{},"box_hd"," 制作",[19,142236,142014,142237,142239],{},[32,142238,142233],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3317,142241],{"style":127846,"src":142242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[2994,142244,142245,142250,142255,142258],{},[29,142246,142247,142249],{},[32,142248,142233],{}," 给 30px 的高度，2个像素的下边框",[29,142251,142252,142253],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[32,142254,140501],{},[29,142256,142257],{},"左侧盒左浮动，右侧盒子右浮动",[29,142259,142260,142262,142263,142265],{},[32,142261,2230],{},"标签之间的距离用左右的",[32,142264,32660],{},"撑开即可",[19,142267,142268],{},"结构代码",[58,142270,142271],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,142272,142273,142279,142289],{"__ignoreMap":63},[67,142274,142275,142277],{"class":69,"line":70},[67,142276,131838],{"class":110},[67,142278,17369],{"class":73},[67,142280,142281,142283,142285,142287],{"class":69,"line":191},[67,142282,132470],{"class":77},[67,142284,53203],{"class":73},[67,142286,410],{"class":77},[67,142288,3148],{"class":73},[67,142290,142291],{"class":69,"line":202},[67,142292,3419],{"class":73},[19,142294,142295],{},"样式代码",[58,142297,142298],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,142299,142300,142306,142316],{"__ignoreMap":63},[67,142301,142302,142304],{"class":69,"line":70},[67,142303,131838],{"class":110},[67,142305,17369],{"class":73},[67,142307,142308,142310,142312,142314],{"class":69,"line":191},[67,142309,132470],{"class":77},[67,142311,53203],{"class":73},[67,142313,410],{"class":77},[67,142315,3148],{"class":73},[67,142317,142318],{"class":69,"line":202},[67,142319,3419],{"class":73},[19,142321,142322,142234],{},[32,142323,142324],{},"box_bd",[19,142326,142327],{},"2 号盒子 box_bd，不要给高度",[3317,142329],{"style":127846,"src":142330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142332,142333],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142335,142336],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142338,142339],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[2994,142341,142342,142354,142370],{},[29,142343,142344,142346,142347,142350,142351,142353],{},[32,142345,142324],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[32,142348,142349],{},"tab_content","，在",[32,142352,142349],{}," 里面包裹tab选项卡对应的内容",[29,142355,142356,142357,142360,142361,142363,142364,142366,142367,142369],{},"内容被一个大盒子包裹（",[32,142358,142359],{},"tab_list_item","），里面是 ",[32,142362,2994],{}," 包裹 5个 ",[32,142365,29],{},"，每个",[32,142368,29],{},"设置对应的宽度，然后设置浮动",[29,142371,142372,142373,142375,142376,142378,142379],{},"而这5个",[32,142374,29],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[32,142377,29],{},"设置",[2994,142380,142381,142399,142402],{},[29,142382,142383,142384,142386,142387,142389,142390,142392,142393,142395,142396,142398],{},"第一个小 ",[32,142385,29],{}," 分为上下结构，上面是 ",[32,142388,2994],{}," 包裹 ",[32,142391,29],{}," ，",[32,142394,29],{},"里面包裹 ",[32,142397,2230],{},"，下面插入一张图片",[29,142400,142401],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[29,142403,142404,142405,142407,142408,142410,142411,142413],{},"后面的小 ",[32,142406,29],{}," 里面先放一个",[32,142409,2230],{},"标签，然后在",[32,142412,2230],{},"标签里面插入图片即可",[19,142415,142268],{},[58,142417,142418],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,142419,142420],{"__ignoreMap":63},[67,142421,142422,142424,142426,142428,142430,142432,142434,142436,142438,142440,142442,142444],{"class":69,"line":70},[67,142423,259],{"class":73},[67,142425,3317],{"class":262},[67,142427,57000],{"class":110},[67,142429,85],{"class":73},[67,142431,135507],{"class":114},[67,142433,57008],{"class":110},[67,142435,85],{"class":73},[67,142437,135514],{"class":114},[67,142439,135517],{"class":110},[67,142441,85],{"class":73},[67,142443,135522],{"class":114},[67,142445,323],{"class":73},[19,142447,142295],{},[58,142449,142450],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,142451,142452],{"__ignoreMap":63},[67,142453,142454,142456,142458,142460,142462,142464,142466,142468,142470,142472,142474,142476],{"class":69,"line":70},[67,142455,259],{"class":73},[67,142457,3317],{"class":262},[67,142459,57000],{"class":110},[67,142461,85],{"class":73},[67,142463,135507],{"class":114},[67,142465,57008],{"class":110},[67,142467,85],{"class":73},[67,142469,135514],{"class":114},[67,142471,135517],{"class":110},[67,142473,85],{"class":73},[67,142475,135522],{"class":114},[67,142477,323],{"class":73},[19,142479,142480],{},"tab栏切换需求！！！！！！介绍：",[3317,142482],{"style":127846,"src":142483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[2994,142485,142486,142494,142500,142503],{},[29,142487,142488,142491,142492],{},[32,142489,142490],{},"tab","栏的布局是 ",[32,142493,140501],{},[29,142495,142496,142497,142499],{},"有多少个",[32,142498,142490],{},"选项卡，那么对应就有多少个内容",[29,142501,142502],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[29,142504,142505,142506,142509,142510,142512,142513,142515],{},"等后面我们学习了",[32,142507,142508],{},"js","之后，我们就会配合",[32,142511,142508],{},"来实现，",[32,142514,142490],{},"栏的切换",[14,142517,142519],{"id":142518},"_162-列表制作","16.2 列表制作",[391,142521,142523],{"id":142522},"_1621-准备工作","16.2.1 准备工作",[2994,142525,142526,142529,142532,142535],{},[29,142527,142528],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[29,142530,142531],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[29,142533,142534],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[29,142536,142537],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[391,142539,142541,142542,1264,142544,142546],{"id":142540},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[32,142543,132995],{},[32,142545,55475],{}," 修改",[3317,142548],{"style":127846,"src":142549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[2994,142551,142552],{},[29,142553,142554],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142556,141360],{},[58,142558,142559],{"className":127990,"code":133422,"language":127992,"meta":63,"style":63},[32,142560,142561,142565,142579,142583,142597,142601,142615,142619,142633,142637],{"__ignoreMap":63},[67,142562,142563],{"class":69,"line":70},[67,142564,133429],{"class":2058},[67,142566,142567,142569,142571,142573,142575,142577],{"class":69,"line":191},[67,142568,133434],{"class":110},[67,142570,81567],{"class":73},[67,142572,130350],{"class":77},[67,142574,53203],{"class":73},[67,142576,133443],{"class":77},[67,142578,130920],{"class":73},[67,142580,142581],{"class":69,"line":202},[67,142582,133450],{"class":2058},[67,142584,142585,142587,142589,142591,142593,142595],{"class":69,"line":641},[67,142586,133455],{"class":110},[67,142588,81567],{"class":73},[67,142590,130350],{"class":77},[67,142592,53203],{"class":73},[67,142594,56525],{"class":77},[67,142596,130920],{"class":73},[67,142598,142599],{"class":69,"line":655},[67,142600,133470],{"class":2058},[67,142602,142603,142605,142607,142609,142611,142613],{"class":69,"line":660},[67,142604,133475],{"class":110},[67,142606,81567],{"class":73},[67,142608,130350],{"class":77},[67,142610,53203],{"class":73},[67,142612,56592],{"class":77},[67,142614,130920],{"class":73},[67,142616,142617],{"class":69,"line":665},[67,142618,133490],{"class":2058},[67,142620,142621,142623,142625,142627,142629,142631],{"class":69,"line":677},[67,142622,133495],{"class":110},[67,142624,81567],{"class":73},[67,142626,130350],{"class":77},[67,142628,53203],{"class":73},[67,142630,87992],{"class":77},[67,142632,130920],{"class":73},[67,142634,142635],{"class":69,"line":683},[67,142636,133510],{"class":2058},[67,142638,142639,142641,142643,142645,142647,142649],{"class":69,"line":689},[67,142640,133515],{"class":110},[67,142642,81567],{"class":73},[67,142644,130350],{"class":77},[67,142646,53203],{"class":73},[67,142648,133524],{"class":77},[67,142650,130920],{"class":73},[19,142652,141449],{},[58,142654,142655],{"className":127990,"code":133422,"language":127992,"meta":63,"style":63},[32,142656,142657,142661,142675,142679,142693,142697,142711,142715,142729,142733],{"__ignoreMap":63},[67,142658,142659],{"class":69,"line":70},[67,142660,133429],{"class":2058},[67,142662,142663,142665,142667,142669,142671,142673],{"class":69,"line":191},[67,142664,133434],{"class":110},[67,142666,81567],{"class":73},[67,142668,130350],{"class":77},[67,142670,53203],{"class":73},[67,142672,133443],{"class":77},[67,142674,130920],{"class":73},[67,142676,142677],{"class":69,"line":202},[67,142678,133450],{"class":2058},[67,142680,142681,142683,142685,142687,142689,142691],{"class":69,"line":641},[67,142682,133455],{"class":110},[67,142684,81567],{"class":73},[67,142686,130350],{"class":77},[67,142688,53203],{"class":73},[67,142690,56525],{"class":77},[67,142692,130920],{"class":73},[67,142694,142695],{"class":69,"line":655},[67,142696,133470],{"class":2058},[67,142698,142699,142701,142703,142705,142707,142709],{"class":69,"line":660},[67,142700,133475],{"class":110},[67,142702,81567],{"class":73},[67,142704,130350],{"class":77},[67,142706,53203],{"class":73},[67,142708,56592],{"class":77},[67,142710,130920],{"class":73},[67,142712,142713],{"class":69,"line":665},[67,142714,133490],{"class":2058},[67,142716,142717,142719,142721,142723,142725,142727],{"class":69,"line":677},[67,142718,133495],{"class":110},[67,142720,81567],{"class":73},[67,142722,130350],{"class":77},[67,142724,53203],{"class":73},[67,142726,87992],{"class":77},[67,142728,130920],{"class":73},[67,142730,142731],{"class":69,"line":683},[67,142732,133510],{"class":2058},[67,142734,142735,142737,142739,142741,142743,142745],{"class":69,"line":689},[67,142736,133515],{"class":110},[67,142738,81567],{"class":73},[67,142740,130350],{"class":77},[67,142742,53203],{"class":73},[67,142744,133524],{"class":77},[67,142746,130920],{"class":73},[2994,142748,142749,142760],{},[29,142750,142751,142752,142755,142756,1264,142758],{},"1 号盒子左侧浮动 ",[32,142753,142754],{},"sk_list"," 里面包含 ",[32,142757,2994],{},[32,142759,29],{},[29,142761,142762,142763,142755,142766,1264,142768],{},"2 号盒子左侧浮动 ",[32,142764,142765],{},"sk_con",[32,142767,2994],{},[32,142769,29],{},[19,142771,141360],{},[58,142773,142774],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,142775,142776,142782,142792],{"__ignoreMap":63},[67,142777,142778,142780],{"class":69,"line":70},[67,142779,131838],{"class":110},[67,142781,17369],{"class":73},[67,142783,142784,142786,142788,142790],{"class":69,"line":191},[67,142785,132470],{"class":77},[67,142787,53203],{"class":73},[67,142789,410],{"class":77},[67,142791,3148],{"class":73},[67,142793,142794],{"class":69,"line":202},[67,142795,3419],{"class":73},[19,142797,141449],{},[58,142799,142800],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,142801,142802,142808,142818],{"__ignoreMap":63},[67,142803,142804,142806],{"class":69,"line":70},[67,142805,131838],{"class":110},[67,142807,17369],{"class":73},[67,142809,142810,142812,142814,142816],{"class":69,"line":191},[67,142811,132470],{"class":77},[67,142813,53203],{"class":73},[67,142815,410],{"class":77},[67,142817,3148],{"class":73},[67,142819,142820],{"class":69,"line":202},[67,142821,3419],{"class":73},[391,142823,142825,142826],{"id":142824},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[32,142827,142828],{},"sk_container",[3317,142830],{"style":127846,"src":142831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[2994,142833,142834,142839],{},[29,142835,142014,142836,142838],{},[32,142837,142828],{}," 给宽度 1200，不要给高度",[29,142840,142841],{},"一定不要忘记清除浮动",[19,142843,141360],{},[58,142845,142846],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,142847,142848,142854,142864],{"__ignoreMap":63},[67,142849,142850,142852],{"class":69,"line":70},[67,142851,131838],{"class":110},[67,142853,17369],{"class":73},[67,142855,142856,142858,142860,142862],{"class":69,"line":191},[67,142857,132470],{"class":77},[67,142859,53203],{"class":73},[67,142861,410],{"class":77},[67,142863,3148],{"class":73},[67,142865,142866],{"class":69,"line":202},[67,142867,3419],{"class":73},[26,142869,142870],{},[29,142871,142872],{},"sk_hd制作",[2994,142874,142875],{},[29,142876,142094,142877,142880],{},[32,142878,142879],{},"sk_hd"," ，插入图片即可",[19,142882,141360],{},[58,142884,142885],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,142886,142887],{"__ignoreMap":63},[67,142888,142889,142891,142893,142895,142897,142899,142901,142903,142905,142907,142909,142911],{"class":69,"line":70},[67,142890,259],{"class":73},[67,142892,3317],{"class":262},[67,142894,57000],{"class":110},[67,142896,85],{"class":73},[67,142898,135507],{"class":114},[67,142900,57008],{"class":110},[67,142902,85],{"class":73},[67,142904,135514],{"class":114},[67,142906,135517],{"class":110},[67,142908,85],{"class":73},[67,142910,135522],{"class":114},[67,142912,323],{"class":73},[26,142914,142915],{"start":191},[29,142916,142917],{},"sk_bd制作",[2994,142919,142920],{},[29,142921,142922,142923,142926,142927,1264,142929,142931],{},"3 号盒子 ",[32,142924,142925],{},"sk_bd"," ，里面包含很多的 ",[32,142928,2994],{},[32,142930,29],{},[2994,142932,142933,142942],{},[29,142934,142935,142936,142938,142939,142941],{},"当鼠标移入到 ",[32,142937,29],{}," 上面的时候显示红色的边框，在这里先给 ",[32,142940,29],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[29,142943,142944,142945,142947,142948,142950,142951,142954,142955,142957],{},"由于给每个 ",[32,142946,29],{}," 都设置了外边距，导致一行的最后一个 ",[32,142949,29],{}," 掉了下来，在这里我们利用 ",[32,142952,142953],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[32,142956,29],{},"，去掉外边距就好了",[19,142959,141360],{},[58,142961,142962],{"className":127990,"code":140179,"language":127992,"meta":63,"style":63},[32,142963,142964,142970,142982],{"__ignoreMap":63},[67,142965,142966,142968],{"class":69,"line":70},[67,142967,53377],{"class":262},[67,142969,17369],{"class":73},[67,142971,142972,142974,142976,142978,142980],{"class":69,"line":191},[67,142973,72230],{"class":77},[67,142975,53203],{"class":73},[67,142977,78],{"class":77},[67,142979,53322],{"class":77},[67,142981,3148],{"class":73},[67,142983,142984],{"class":69,"line":202},[67,142985,3419],{"class":73},[19,142987,141449],{},[58,142989,142990],{"className":127990,"code":140179,"language":127992,"meta":63,"style":63},[32,142991,142992,142998,143010],{"__ignoreMap":63},[67,142993,142994,142996],{"class":69,"line":70},[67,142995,53377],{"class":262},[67,142997,17369],{"class":73},[67,142999,143000,143002,143004,143006,143008],{"class":69,"line":191},[67,143001,72230],{"class":77},[67,143003,53203],{"class":73},[67,143005,78],{"class":77},[67,143007,53322],{"class":77},[67,143009,3148],{"class":73},[67,143011,143012],{"class":69,"line":202},[67,143013,3419],{"class":73},[14,143015,143017],{"id":143016},"_163-注册页面制作","16.3 注册页面制作",[3317,143019],{"style":127846,"src":143020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143022,143023,143025],{},[2144,143024,10831],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3317,143027],{"style":127846,"src":143028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[391,143030,143032],{"id":143031},"_1631-准备工作","16.3.1 准备工作",[2994,143034,143035,143038],{},[29,143036,143037],{},"创建register.html，引入 base.css，引入favicon图标",[29,143039,143040],{},"创建register.css ，在html页面进行引入",[391,143042,143044,143045,143047],{"id":143043},"_1632-header-头部实现","16.3.2 ",[32,143046,132995],{}," 头部实现",[2994,143049,143050,143053],{},[29,143051,143052],{},"整个内容用 版心 进行包裹",[29,143054,143055],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143057,141360],{},[58,143059,143060],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,143061,143062],{"__ignoreMap":63},[67,143063,143064,143066,143068,143070,143072,143074,143076,143078,143080,143082,143084,143086],{"class":69,"line":70},[67,143065,259],{"class":73},[67,143067,3317],{"class":262},[67,143069,57000],{"class":110},[67,143071,85],{"class":73},[67,143073,135507],{"class":114},[67,143075,57008],{"class":110},[67,143077,85],{"class":73},[67,143079,135514],{"class":114},[67,143081,135517],{"class":110},[67,143083,85],{"class":73},[67,143085,135522],{"class":114},[67,143087,323],{"class":73},[19,143089,141449],{},[58,143091,143092],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,143093,143094],{"__ignoreMap":63},[67,143095,143096,143098,143100,143102,143104,143106,143108,143110,143112,143114,143116,143118],{"class":69,"line":70},[67,143097,259],{"class":73},[67,143099,3317],{"class":262},[67,143101,57000],{"class":110},[67,143103,85],{"class":73},[67,143105,135507],{"class":114},[67,143107,57008],{"class":110},[67,143109,85],{"class":73},[67,143111,135514],{"class":114},[67,143113,135517],{"class":110},[67,143115,85],{"class":73},[67,143117,135522],{"class":114},[67,143119,323],{"class":73},[391,143121,143123,143124,143127],{"id":143122},"_1633-registerarea-主体模块实现","16.3.3 ",[32,143125,143126],{},"registerarea"," 主体模块实现",[3317,143129],{"style":127846,"src":143130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143132,143133],{},"整个大盒子 高度为 522px，设置4个边框",[19,143135,141360],{},[58,143137,143138],{"className":127990,"code":132147,"language":127992,"meta":63,"style":63},[32,143139,143140,143146,143162],{"__ignoreMap":63},[67,143141,143142,143144],{"class":69,"line":70},[67,143143,53377],{"class":262},[67,143145,17369],{"class":73},[67,143147,143148,143150,143152,143154,143156,143158,143160],{"class":69,"line":191},[67,143149,72656],{"class":77},[67,143151,53203],{"class":73},[67,143153,2209],{"class":77},[67,143155,53258],{"class":84},[67,143157,53287],{"class":77},[67,143159,131382],{"class":77},[67,143161,3148],{"class":73},[67,143163,143164],{"class":69,"line":202},[67,143165,3419],{"class":73},[19,143167,141449],{},[58,143169,143170],{"className":127990,"code":132147,"language":127992,"meta":63,"style":63},[32,143171,143172,143178,143194],{"__ignoreMap":63},[67,143173,143174,143176],{"class":69,"line":70},[67,143175,53377],{"class":262},[67,143177,17369],{"class":73},[67,143179,143180,143182,143184,143186,143188,143190,143192],{"class":69,"line":191},[67,143181,72656],{"class":77},[67,143183,53203],{"class":73},[67,143185,2209],{"class":77},[67,143187,53258],{"class":84},[67,143189,53287],{"class":77},[67,143191,131382],{"class":77},[67,143193,3148],{"class":73},[67,143195,143196],{"class":69,"line":202},[67,143197,3419],{"class":73},[19,143199,143200],{},"1号盒子 是一个 h3 标签，放标题",[2994,143202,143203],{},[29,143204,143205],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143207,141360],{},[58,143209,143210],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,143211,143212,143218,143228],{"__ignoreMap":63},[67,143213,143214,143216],{"class":69,"line":70},[67,143215,131838],{"class":110},[67,143217,17369],{"class":73},[67,143219,143220,143222,143224,143226],{"class":69,"line":191},[67,143221,132470],{"class":77},[67,143223,53203],{"class":73},[67,143225,410],{"class":77},[67,143227,3148],{"class":73},[67,143229,143230],{"class":69,"line":202},[67,143231,3419],{"class":73},[19,143233,141449],{},[58,143235,143236],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,143237,143238,143244,143254],{"__ignoreMap":63},[67,143239,143240,143242],{"class":69,"line":70},[67,143241,131838],{"class":110},[67,143243,17369],{"class":73},[67,143245,143246,143248,143250,143252],{"class":69,"line":191},[67,143247,132470],{"class":77},[67,143249,53203],{"class":73},[67,143251,410],{"class":77},[67,143253,3148],{"class":73},[67,143255,143256],{"class":69,"line":202},[67,143257,3419],{"class":73},[19,143259,143260],{},"2号盒子 里面放注册的内容",[2994,143262,143263,143266,143275,143289,143302,143305,143308,143326,143340],{},[29,143264,143265],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[29,143267,143268,143269,143271,143272,143274],{},"里面的内容利用 ",[32,143270,2994],{}," 包含 ",[32,143273,29],{}," 来实现的（不需要用表格）",[29,143276,140504,143277,143279,143280,143282,143283,143285,143286,143288],{},[32,143278,29],{}," 里面，左侧放 ",[32,143281,35377],{}," 标签， 中间放",[32,143284,55583],{}," 标签， 右侧放 ",[32,143287,67],{}," 提示信息",[29,143290,143291,143292,143294,143295,143297,143298,143301],{},"左侧 ",[32,143293,35377],{},"里面的文字都是右对齐，我们可以给",[32,143296,35377],{},"设置一个宽度（88px），然后利用",[32,143299,143300],{},"text-align"," 来设置右对齐",[29,143303,143304],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[29,143306,143307],{},"右侧 span修饰一下文字颜色",[29,143309,143310,143311],{},"提示信息的样式优化",[2994,143312,143313,143316,143319],{},[29,143314,143315],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[29,143317,143318],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[29,143320,143321,143322,143325],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[32,143323,143324],{},"vertical-algin"," 来设置 图片与文字对齐方式",[29,143327,143328,143329],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[2994,143330,143331,143337],{},[29,143332,143333,143334,143336],{},"设置 ",[32,143335,25350],{}," 的 左右 12px 的内边距，设置一下文字颜色",[29,143338,143339],{},"分别设置 背景颜色",[29,143341,143342,143343,143345],{},"同意协议 和 完成注册 都是用 ",[32,143344,29],{}," 进行包裹",[19,143347,141360],{},[58,143349,143350],{"className":127990,"code":141933,"language":127992,"meta":63,"style":63},[32,143351,143352,143358,143368],{"__ignoreMap":63},[67,143353,143354,143356],{"class":69,"line":70},[67,143355,53377],{"class":262},[67,143357,17369],{"class":73},[67,143359,143360,143362,143364,143366],{"class":69,"line":191},[67,143361,72638],{"class":77},[67,143363,53203],{"class":73},[67,143365,141950],{"class":77},[67,143367,3148],{"class":73},[67,143369,143370],{"class":69,"line":202},[67,143371,3419],{"class":73},[19,143373,141449],{},[58,143375,143376],{"className":127990,"code":141933,"language":127992,"meta":63,"style":63},[32,143377,143378,143384,143394],{"__ignoreMap":63},[67,143379,143380,143382],{"class":69,"line":70},[67,143381,53377],{"class":262},[67,143383,17369],{"class":73},[67,143385,143386,143388,143390,143392],{"class":69,"line":191},[67,143387,72638],{"class":77},[67,143389,53203],{"class":73},[67,143391,141950],{"class":77},[67,143393,3148],{"class":73},[67,143395,143396],{"class":69,"line":202},[67,143397,3419],{"class":73},[391,143399,143401],{"id":143400},"_1634-底部实现","16.3.4 底部实现",[19,143403,141360],{},[58,143405,143406],{"className":127990,"code":141933,"language":127992,"meta":63,"style":63},[32,143407,143408,143414,143424],{"__ignoreMap":63},[67,143409,143410,143412],{"class":69,"line":70},[67,143411,53377],{"class":262},[67,143413,17369],{"class":73},[67,143415,143416,143418,143420,143422],{"class":69,"line":191},[67,143417,72638],{"class":77},[67,143419,53203],{"class":73},[67,143421,141950],{"class":77},[67,143423,3148],{"class":73},[67,143425,143426],{"class":69,"line":202},[67,143427,3419],{"class":73},[19,143429,141449],{},[58,143431,143432],{"className":128737,"code":132094,"language":128739,"meta":63,"style":63},[32,143433,143434,143438,143452,143456],{"__ignoreMap":63},[67,143435,143436],{"class":69,"line":70},[67,143437,132101],{"class":2058},[67,143439,143440,143442,143444,143446,143448,143450],{"class":69,"line":191},[67,143441,259],{"class":73},[67,143443,53377],{"class":262},[67,143445,55248],{"class":110},[67,143447,85],{"class":73},[67,143449,132114],{"class":114},[67,143451,323],{"class":73},[67,143453,143454],{"class":69,"line":202},[67,143455,132121],{"class":73},[67,143457,143458,143460,143462],{"class":69,"line":641},[67,143459,376],{"class":73},[67,143461,53377],{"class":262},[67,143463,323],{"class":73},[14,143465,143467],{"id":143466},"_164-项目总结","16.4 项目总结",[26,143469,143470,143473,143476,143479],{},[29,143471,143472],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[29,143474,143475],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[29,143477,143478],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[29,143480,143481],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3317,143483],{"style":127846,"src":143484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[26,143486,143487],{"start":655},[29,143488,143489],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3317,143491],{"style":127846,"src":143492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[26,143494,143495],{"start":660},[29,143496,143497],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3317,143499],{"style":127846,"src":143500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[58,143502,143503],{"className":128737,"code":138147,"language":128739,"meta":63,"style":63},[32,143504,143505],{"__ignoreMap":63},[67,143506,143507,143509,143511,143513,143515,143517,143519,143521,143523,143525,143527,143529],{"class":69,"line":70},[67,143508,259],{"class":73},[67,143510,55583],{"class":262},[67,143512,274],{"class":110},[67,143514,85],{"class":73},[67,143516,64459],{"class":114},[67,143518,266],{"class":110},[67,143520,85],{"class":73},[67,143522,138168],{"class":114},[67,143524,62781],{"class":110},[67,143526,85],{"class":73},[67,143528,138175],{"class":114},[67,143530,323],{"class":73},[26,143532,143533,143536],{"start":665},[29,143534,143535],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[29,143537,143538],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1903,143540,143541],{},"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":63,"searchDepth":191,"depth":191,"links":143543},[143544,143549,143556,143564],{"id":141170,"depth":191,"text":141171,"children":143545},[143546,143547,143548],{"id":141174,"depth":202,"text":141175},{"id":141905,"depth":202,"text":141906},{"id":142218,"depth":202,"text":142219},{"id":142518,"depth":191,"text":142519,"children":143550},[143551,143552,143554],{"id":142522,"depth":202,"text":142523},{"id":142540,"depth":202,"text":143553},"16.2.2 列表页 header 和 nav 修改",{"id":142824,"depth":202,"text":143555},"16.2.3 列表页主体 sk_container",{"id":143016,"depth":191,"text":143017,"children":143557},[143558,143559,143561,143563],{"id":143031,"depth":202,"text":143032},{"id":143043,"depth":202,"text":143560},"16.3.2 header 头部实现",{"id":143122,"depth":202,"text":143562},"16.3.3 registerarea 主体模块实现",{"id":143400,"depth":202,"text":143401},{"id":143466,"depth":191,"text":143467},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141162,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143571,"title":143572,"body":143573,"description":25173,"extension":1930,"meta":143681,"navigation":630,"path":143682,"seo":143683,"stem":143684,"__hash__":143685},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143574,"toc":143676},[143575,143578,143582,143585,143588,143597,143606,143610,143615,143622,143640,143643,143646,143649,143652,143655,143658,143661,143664,143667,143670,143673],[10,143576,143572],{"id":143577},"_17-web服务器与网站发布",[14,143579,143581],{"id":143580},"_171-web服务器","17.1 Web服务器",[19,143583,143584],{},"把自己网站上传到服务器上，可以让其他人访问",[3317,143586],{"style":127846,"src":143587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143589,143590,143593,143594],{},[2144,143591,143592],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2144,143595,143596],{},"Web 服务器等",[19,143598,143599,143600,1264,143603,27530],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2144,143601,143602],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2144,143604,143605],{},"远程服务器",[391,143607,143609],{"id":143608},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143611,143612],{},[2144,143613,143614],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143616,143617,143618],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2230,143619,143620],{"href":143620,"rel":143621},"http:\u002F\u002Ffree.3v.do\u002F",[25657],[2994,143623,143624,143627,143630,143637],{},[29,143625,143626],{},"去免费空间网站注册账号。",[29,143628,143629],{},"记录下主机名、用户名、密码、域名。",[29,143631,143632,143633,143636],{},"利用 ",[32,143634,143635],{},"utftp"," 软件 上传网站到远程服务器",[29,143638,143639],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143641,143642],{},"使用软件上传，对上传软件文件进行解压",[3317,143644],{"style":127846,"src":143645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3317,143647],{"style":127846,"src":143648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143650,143651],{},"输入刚刚申请的服务器账号信息：",[3317,143653],{"style":127846,"src":143654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3317,143656],{"style":127846,"src":143657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3317,143659],{"style":127846,"src":143660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3317,143662],{"style":127846,"src":143663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143665,143666],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3317,143668],{"style":127846,"src":143669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143671,143672],{},"浏览器输入域名即可访问",[19,143674,143675],{},"首页一定必须是index",{"title":63,"searchDepth":191,"depth":191,"links":143677},[143678],{"id":143580,"depth":191,"text":143581,"children":143679},[143680],{"id":143608,"depth":202,"text":143609},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143572,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143687,"title":143688,"body":143689,"description":25173,"extension":1930,"meta":144616,"navigation":630,"path":144617,"seo":144618,"stem":144619,"__hash__":144620},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143690,"toc":144599},[143691,143694,143698,143701,143704,143715,143718,143722,143726,143731,143734,143737,143740,143743,143747,143773,143777,143781,143784,143787,143791,143824,143828,143831,143834,143898,143902,143906,143909,143912,143915,143919,143964,143968,143971,144001,144005,144009,144012,144015,144019,144022,144091,144094,144202,144204,144210,144214,144217,144220,144316,144319,144323,144347,144351,144354,144358,144361,144365,144368,144371,144374,144377,144381,144384,144387,144391,144395,144398,144401,144404,144407,144411,144414,144418,144421,144424,144469,144473,144477,144480,144483,144486,144518,144522,144525,144559,144563,144566,144596],[10,143692,143688],{"id":143693},"_18-2d动画与3d转换",[14,143695,143697],{"id":143696},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143699,143700],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143702,143703],{},"转换（transform）你可以简单理解为变形",[2994,143705,143706,143709,143712],{},[29,143707,143708],{},"移动：translate",[29,143710,143711],{},"旋转：rotate",[29,143713,143714],{},"缩放：scale",[3317,143716],{"style":127846,"src":143717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[391,143719,143721],{"id":143720},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23794,143723,143725],{"id":143724},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143727,143728,143729],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2144,143730,134649],{},[3317,143732],{"style":127846,"src":143733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143735,143736],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143738,143739],{},"对于行内元素无效",[19,143741,143742],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23794,143744,143746],{"id":143745},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[58,143748,143749],{"className":127990,"code":140179,"language":127992,"meta":63,"style":63},[32,143750,143751,143757,143769],{"__ignoreMap":63},[67,143752,143753,143755],{"class":69,"line":70},[67,143754,53377],{"class":262},[67,143756,17369],{"class":73},[67,143758,143759,143761,143763,143765,143767],{"class":69,"line":191},[67,143760,72230],{"class":77},[67,143762,53203],{"class":73},[67,143764,78],{"class":77},[67,143766,53322],{"class":77},[67,143768,3148],{"class":73},[67,143770,143771],{"class":69,"line":202},[67,143772,3419],{"class":73},[391,143774,143776],{"id":143775},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23794,143778,143780],{"id":143779},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143782,143783],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3317,143785],{"style":127846,"src":143786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23794,143788,143790],{"id":143789},"_18122-旋转效果","18.1.2.2 旋转效果",[58,143792,143794],{"className":127990,"code":143793,"language":127992,"meta":63,"style":63},"div {\n  transform: rotate(45deg);\n}\n",[32,143795,143796,143802,143820],{"__ignoreMap":63},[67,143797,143798,143800],{"class":69,"line":70},[67,143799,53377],{"class":262},[67,143801,17369],{"class":73},[67,143803,143804,143806,143808,143811,143813,143815,143818],{"class":69,"line":191},[67,143805,137974],{"class":77},[67,143807,53203],{"class":73},[67,143809,143810],{"class":77},"rotate",[67,143812,854],{"class":73},[67,143814,2519],{"class":77},[67,143816,143817],{"class":84},"deg",[67,143819,4544],{"class":73},[67,143821,143822],{"class":69,"line":202},[67,143823,3419],{"class":73},[23794,143825,143827],{"id":143826},"_18123-三角做法","18.1.2.3 三角做法",[19,143829,143830],{},"该下标当经过最外层大盒子时会实现向上反转",[3317,143832],{"style":127846,"src":143833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[58,143835,143836],{"className":127990,"code":136510,"language":127992,"meta":63,"style":63},[32,143837,143838,143842,143848,143858,143868,143884,143894],{"__ignoreMap":63},[67,143839,143840],{"class":69,"line":70},[67,143841,136517],{"class":2058},[67,143843,143844,143846],{"class":69,"line":191},[67,143845,136522],{"class":110},[67,143847,17369],{"class":73},[67,143849,143850,143852,143854,143856],{"class":69,"line":202},[67,143851,72328],{"class":77},[67,143853,53203],{"class":73},[67,143855,78],{"class":77},[67,143857,3148],{"class":73},[67,143859,143860,143862,143864,143866],{"class":69,"line":641},[67,143861,72548],{"class":77},[67,143863,53203],{"class":73},[67,143865,78],{"class":77},[67,143867,3148],{"class":73},[67,143869,143870,143872,143874,143876,143878,143880,143882],{"class":69,"line":655},[67,143871,72656],{"class":77},[67,143873,53203],{"class":73},[67,143875,2437],{"class":77},[67,143877,53258],{"class":84},[67,143879,53287],{"class":77},[67,143881,65751],{"class":77},[67,143883,3148],{"class":73},[67,143885,143886,143888,143890,143892],{"class":69,"line":660},[67,143887,136565],{"class":77},[67,143889,53203],{"class":73},[67,143891,64129],{"class":77},[67,143893,3148],{"class":73},[67,143895,143896],{"class":69,"line":665},[67,143897,3419],{"class":73},[391,143899,143901],{"id":143900},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23794,143903,143905],{"id":143904},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143907,143908],{},"设置中心点",[3317,143910],{"style":127846,"src":143911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143913,143914],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23794,143916,143918],{"id":143917},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[58,143920,143922],{"className":127990,"code":143921,"language":127992,"meta":63,"style":63},"\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",[32,143923,143924,143929,143935,143950,143955,143960],{"__ignoreMap":63},[67,143925,143926],{"class":69,"line":70},[67,143927,143928],{"class":2058},"\u002F* 转换中心点 *\u002F\n",[67,143930,143931,143933],{"class":69,"line":191},[67,143932,53377],{"class":262},[67,143934,17369],{"class":73},[67,143936,143937,143940,143942,143944,143946,143948],{"class":69,"line":202},[67,143938,143939],{"class":77},"  transform-origin",[67,143941,53203],{"class":73},[67,143943,53358],{"class":77},[67,143945,18941],{"class":77},[67,143947,131853],{"class":73},[67,143949,136663],{"class":2058},[67,143951,143952],{"class":69,"line":641},[67,143953,143954],{"class":2058},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[67,143956,143957],{"class":69,"line":655},[67,143958,143959],{"class":2058},"  \u002F* transform-origin: left top; *\u002F\n",[67,143961,143962],{"class":69,"line":660},[67,143963,3419],{"class":73},[23794,143965,143967],{"id":143966},"_18133-旋转案例","18.1.3.3 旋转案例",[3317,143969],{"style":127846,"src":143970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[58,143972,143973],{"className":127990,"code":143793,"language":127992,"meta":63,"style":63},[32,143974,143975,143981,143997],{"__ignoreMap":63},[67,143976,143977,143979],{"class":69,"line":70},[67,143978,53377],{"class":262},[67,143980,17369],{"class":73},[67,143982,143983,143985,143987,143989,143991,143993,143995],{"class":69,"line":191},[67,143984,137974],{"class":77},[67,143986,53203],{"class":73},[67,143988,143810],{"class":77},[67,143990,854],{"class":73},[67,143992,2519],{"class":77},[67,143994,143817],{"class":84},[67,143996,4544],{"class":73},[67,143998,143999],{"class":69,"line":202},[67,144000,3419],{"class":73},[391,144002,144004],{"id":144003},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23794,144006,144008],{"id":144007},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144010,144011],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3317,144013],{"style":127846,"src":144014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23794,144016,144018],{"id":144017},"_18142-分页按钮","18.1.4.2 分页按钮",[3317,144020],{"style":127846,"src":144021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[58,144023,144025],{"className":127990,"code":144024,"language":127992,"meta":63,"style":63},"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",[32,144026,144027,144033,144049,144053,144057,144062,144068,144082,144087],{"__ignoreMap":63},[67,144028,144029,144031],{"class":69,"line":70},[67,144030,53377],{"class":262},[67,144032,17369],{"class":73},[67,144034,144035,144037,144039,144042,144044,144047],{"class":69,"line":191},[67,144036,137974],{"class":77},[67,144038,53203],{"class":73},[67,144040,144041],{"class":77},"scale",[67,144043,854],{"class":73},[67,144045,144046],{"class":77},"1.2",[67,144048,4544],{"class":73},[67,144050,144051],{"class":69,"line":202},[67,144052,3419],{"class":73},[67,144054,144055],{"class":69,"line":641},[67,144056,137451],{"class":73},[67,144058,144059],{"class":69,"line":655},[67,144060,144061],{"class":2058},"\u002F* 2D 缩放 *\u002F\n",[67,144063,144064,144066],{"class":69,"line":660},[67,144065,53377],{"class":262},[67,144067,17369],{"class":73},[67,144069,144070,144072,144074,144076,144078,144080],{"class":69,"line":665},[67,144071,137974],{"class":77},[67,144073,53203],{"class":73},[67,144075,144041],{"class":77},[67,144077,854],{"class":73},[67,144079,144046],{"class":77},[67,144081,4544],{"class":73},[67,144083,144084],{"class":69,"line":677},[67,144085,144086],{"class":2058},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[67,144088,144089],{"class":69,"line":683},[67,144090,3419],{"class":73},[19,144092,144093],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[58,144095,144097],{"className":127990,"code":144096,"language":127992,"meta":63,"style":63},"\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",[32,144098,144099,144104,144114,144135,144156,144160,144165,144171,144198],{"__ignoreMap":63},[67,144100,144101],{"class":69,"line":70},[67,144102,144103],{"class":2058},"\u002F* 定义动画 *\u002F\n",[67,144105,144106,144109,144112],{"class":69,"line":191},[67,144107,144108],{"class":84},"@keyframes",[67,144110,144111],{"class":7033}," move",[67,144113,17369],{"class":73},[67,144115,144116,144119,144121,144123,144125,144128,144130,144132],{"class":69,"line":202},[67,144117,144118],{"class":110},"  0%",[67,144120,81567],{"class":73},[67,144122,49902],{"class":77},[67,144124,53203],{"class":73},[67,144126,144127],{"class":77},"translateX",[67,144129,854],{"class":73},[67,144131,78],{"class":77},[67,144133,144134],{"class":73},"); }\n",[67,144136,144137,144140,144142,144144,144146,144148,144150,144152,144154],{"class":69,"line":641},[67,144138,144139],{"class":110},"  100%",[67,144141,81567],{"class":73},[67,144143,49902],{"class":77},[67,144145,53203],{"class":73},[67,144147,144127],{"class":77},[67,144149,854],{"class":73},[67,144151,2302],{"class":77},[67,144153,53258],{"class":84},[67,144155,144134],{"class":73},[67,144157,144158],{"class":69,"line":655},[67,144159,3419],{"class":73},[67,144161,144162],{"class":69,"line":660},[67,144163,144164],{"class":2058},"\u002F* 调用动画 *\u002F\n",[67,144166,144167,144169],{"class":69,"line":665},[67,144168,53377],{"class":262},[67,144170,17369],{"class":73},[67,144172,144173,144176,144178,144180,144182,144184,144186,144188,144190,144193,144196],{"class":69,"line":677},[67,144174,144175],{"class":77},"  animation",[67,144177,53203],{"class":73},[67,144179,136676],{"class":77},[67,144181,906],{"class":77},[67,144183,2684],{"class":84},[67,144185,80440],{"class":77},[67,144187,5913],{"class":77},[67,144189,2684],{"class":84},[67,144191,144192],{"class":77}," infinite",[67,144194,144195],{"class":77}," alternate",[67,144197,3148],{"class":73},[67,144199,144200],{"class":69,"line":683},[67,144201,3419],{"class":73},[19,144203,144093],{},[58,144205,144208],{"className":144206,"code":144207,"language":603},[601],"\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",[32,144209,144207],{"__ignoreMap":63},[23794,144211,144213],{"id":144212},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144215,144216],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3317,144218],{"style":127846,"src":144219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[58,144221,144222],{"className":127990,"code":144096,"language":127992,"meta":63,"style":63},[32,144223,144224,144228,144236,144254,144274,144278,144282,144288,144312],{"__ignoreMap":63},[67,144225,144226],{"class":69,"line":70},[67,144227,144103],{"class":2058},[67,144229,144230,144232,144234],{"class":69,"line":191},[67,144231,144108],{"class":84},[67,144233,144111],{"class":7033},[67,144235,17369],{"class":73},[67,144237,144238,144240,144242,144244,144246,144248,144250,144252],{"class":69,"line":202},[67,144239,144118],{"class":110},[67,144241,81567],{"class":73},[67,144243,49902],{"class":77},[67,144245,53203],{"class":73},[67,144247,144127],{"class":77},[67,144249,854],{"class":73},[67,144251,78],{"class":77},[67,144253,144134],{"class":73},[67,144255,144256,144258,144260,144262,144264,144266,144268,144270,144272],{"class":69,"line":641},[67,144257,144139],{"class":110},[67,144259,81567],{"class":73},[67,144261,49902],{"class":77},[67,144263,53203],{"class":73},[67,144265,144127],{"class":77},[67,144267,854],{"class":73},[67,144269,2302],{"class":77},[67,144271,53258],{"class":84},[67,144273,144134],{"class":73},[67,144275,144276],{"class":69,"line":655},[67,144277,3419],{"class":73},[67,144279,144280],{"class":69,"line":660},[67,144281,144164],{"class":2058},[67,144283,144284,144286],{"class":69,"line":665},[67,144285,53377],{"class":262},[67,144287,17369],{"class":73},[67,144289,144290,144292,144294,144296,144298,144300,144302,144304,144306,144308,144310],{"class":69,"line":677},[67,144291,144175],{"class":77},[67,144293,53203],{"class":73},[67,144295,136676],{"class":77},[67,144297,906],{"class":77},[67,144299,2684],{"class":84},[67,144301,80440],{"class":77},[67,144303,5913],{"class":77},[67,144305,2684],{"class":84},[67,144307,144192],{"class":77},[67,144309,144195],{"class":77},[67,144311,3148],{"class":73},[67,144313,144314],{"class":69,"line":683},[67,144315,3419],{"class":73},[19,144317,144318],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[391,144320,144322],{"id":144321},"_1823-知识点回顾","18.2.3 知识点回顾",[58,144324,144325],{"className":127990,"code":130159,"language":127992,"meta":63,"style":63},[32,144326,144327,144333,144343],{"__ignoreMap":63},[67,144328,144329,144331],{"class":69,"line":70},[67,144330,53377],{"class":262},[67,144332,17369],{"class":73},[67,144334,144335,144337,144339,144341],{"class":69,"line":191},[67,144336,130172],{"class":77},[67,144338,53203],{"class":73},[67,144340,63497],{"class":77},[67,144342,3148],{"class":73},[67,144344,144345],{"class":69,"line":202},[67,144346,3419],{"class":73},[14,144348,144350],{"id":144349},"_183-3d-转换","18.3 3D 转换",[19,144352,144353],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[391,144355,144357],{"id":144356},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3317,144359],{"style":127846,"src":144360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[391,144362,144364],{"id":144363},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3317,144366],{"style":127846,"src":144367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144369,144370],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144372,144373],{},"translate3d的效果需要搭配透视perspective来使用",[3317,144375],{"style":127846,"src":144376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[391,144378,144380],{"id":144379},"_1833-透视-perspective","18.3.3 透视 perspective",[3317,144382],{"style":127846,"src":144383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144385,144386],{},"透视写在父盒子上，单位为像素",[391,144388,144390],{"id":144389},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23794,144392,144394],{"id":144393},"_18341-分开解释","18.3.4.1 分开解释",[3317,144396],{"style":127846,"src":144397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3317,144399],{"style":127846,"src":144400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3317,144402],{"style":127846,"src":144403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144405,144406],{},"总结来说就是左手原则",[23794,144408,144410],{"id":144409},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3317,144412],{"style":127846,"src":144413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[391,144415,144417],{"id":144416},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3317,144419],{"style":127846,"src":144420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3317,144422],{"style":127846,"src":144423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[58,144425,144427],{"className":127990,"code":144426,"language":127992,"meta":63,"style":63},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[32,144428,144429,144435,144448,144465],{"__ignoreMap":63},[67,144430,144431,144433],{"class":69,"line":70},[67,144432,53377],{"class":262},[67,144434,17369],{"class":73},[67,144436,144437,144440,144442,144444,144446],{"class":69,"line":191},[67,144438,144439],{"class":77},"  perspective",[67,144441,53203],{"class":73},[67,144443,66834],{"class":77},[67,144445,53258],{"class":84},[67,144447,3148],{"class":73},[67,144449,144450,144452,144454,144457,144459,144461,144463],{"class":69,"line":202},[67,144451,137974],{"class":77},[67,144453,53203],{"class":73},[67,144455,144456],{"class":77},"rotateX",[67,144458,854],{"class":73},[67,144460,2519],{"class":77},[67,144462,143817],{"class":84},[67,144464,4544],{"class":73},[67,144466,144467],{"class":69,"line":641},[67,144468,3419],{"class":73},[391,144470,144472],{"id":144471},"_1836-案例","18.3.6 案例",[23794,144474,144476],{"id":144475},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3317,144478],{"style":127846,"src":144479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3317,144481],{"style":127846,"src":144482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3317,144484],{"style":127846,"src":144485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[58,144487,144489],{"className":127990,"code":144488,"language":127992,"meta":63,"style":63},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[32,144490,144491,144496,144502,144514],{"__ignoreMap":63},[67,144492,144493],{"class":69,"line":70},[67,144494,144495],{"class":2058},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[67,144497,144498,144500],{"class":69,"line":191},[67,144499,134987],{"class":110},[67,144501,17369],{"class":73},[67,144503,144504,144506,144508,144510,144512],{"class":69,"line":202},[67,144505,144439],{"class":77},[67,144507,53203],{"class":73},[67,144509,66834],{"class":77},[67,144511,53258],{"class":84},[67,144513,3148],{"class":73},[67,144515,144516],{"class":69,"line":641},[67,144517,3419],{"class":73},[23794,144519,144521],{"id":144520},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3317,144523],{"style":127846,"src":144524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[58,144526,144527],{"className":128737,"code":132094,"language":128739,"meta":63,"style":63},[32,144528,144529,144533,144547,144551],{"__ignoreMap":63},[67,144530,144531],{"class":69,"line":70},[67,144532,132101],{"class":2058},[67,144534,144535,144537,144539,144541,144543,144545],{"class":69,"line":191},[67,144536,259],{"class":73},[67,144538,53377],{"class":262},[67,144540,55248],{"class":110},[67,144542,85],{"class":73},[67,144544,132114],{"class":114},[67,144546,323],{"class":73},[67,144548,144549],{"class":69,"line":202},[67,144550,132121],{"class":73},[67,144552,144553,144555,144557],{"class":69,"line":641},[67,144554,376],{"class":73},[67,144556,53377],{"class":262},[67,144558,323],{"class":73},[23794,144560,144562],{"id":144561},"_18363-旋转木马","18.3.6.3 旋转木马",[3317,144564],{"style":127846,"src":144565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[58,144567,144568],{"className":127990,"code":143793,"language":127992,"meta":63,"style":63},[32,144569,144570,144576,144592],{"__ignoreMap":63},[67,144571,144572,144574],{"class":69,"line":70},[67,144573,53377],{"class":262},[67,144575,17369],{"class":73},[67,144577,144578,144580,144582,144584,144586,144588,144590],{"class":69,"line":191},[67,144579,137974],{"class":77},[67,144581,53203],{"class":73},[67,144583,143810],{"class":77},[67,144585,854],{"class":73},[67,144587,2519],{"class":77},[67,144589,143817],{"class":84},[67,144591,4544],{"class":73},[67,144593,144594],{"class":69,"line":202},[67,144595,3419],{"class":73},[1903,144597,144598],{},"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":63,"searchDepth":191,"depth":191,"links":144600},[144601,144608],{"id":143696,"depth":191,"text":143697,"children":144602},[144603,144604,144605,144606,144607],{"id":143720,"depth":202,"text":143721},{"id":143775,"depth":202,"text":143776},{"id":143900,"depth":202,"text":143901},{"id":144003,"depth":202,"text":144004},{"id":144321,"depth":202,"text":144322},{"id":144349,"depth":191,"text":144350,"children":144609},[144610,144611,144612,144613,144614,144615],{"id":144356,"depth":202,"text":144357},{"id":144363,"depth":202,"text":144364},{"id":144379,"depth":202,"text":144380},{"id":144389,"depth":202,"text":144390},{"id":144416,"depth":202,"text":144417},{"id":144471,"depth":202,"text":144472},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143688,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144622,"title":144623,"body":144624,"description":25173,"extension":1930,"meta":144827,"navigation":630,"path":144828,"seo":144829,"stem":144830,"__hash__":144831},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144625,"toc":144816},[144626,144629,144633,144636,144639,144643,144646,144649,144652,144656,144659,144663,144666,144670,144673,144677,144691,144695,144720,144723,144726,144743,144747,144751,144754,144757,144761,144764,144767,144785,144789,144792,144806,144810,144813],[10,144627,144623],{"id":144628},"_19-移动端基础-前缀现状与视口",[14,144630,144632],{"id":144631},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3317,144634],{"style":127846,"src":144635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144637,144638],{},"意思就是加个前缀，增加兼容性",[14,144640,144642],{"id":144641},"_192-移动端现状认识","19.2 移动端现状认识",[3317,144644],{"style":127846,"src":144645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144647,144648],{},"调试方法：",[3317,144650],{"style":127846,"src":144651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144653,144655],{"id":144654},"_193-视口","19.3 视口",[19,144657,144658],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[391,144660,144662],{"id":144661},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3317,144664],{"style":127846,"src":144665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[391,144667,144669],{"id":144668},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3317,144671],{"style":127846,"src":144672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[391,144674,144676],{"id":144675},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[2994,144678,144679,144682,144685,144688],{},[29,144680,144681],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[29,144683,144684],{},"理想视口，对设备来讲，是最理想的视口尺寸",[29,144686,144687],{},"需要手动添写meta视口标签通知浏览器操作",[29,144689,144690],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[391,144692,144694],{"id":144693},"_1934-meta视口标签","19.3.4 meta视口标签",[58,144696,144698],{"className":128737,"code":144697,"language":128739,"meta":63,"style":63},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[32,144699,144700],{"__ignoreMap":63},[67,144701,144702,144704,144706,144708,144710,144712,144714,144716,144718],{"class":69,"line":70},[67,144703,259],{"class":73},[67,144705,53110],{"class":262},[67,144707,266],{"class":110},[67,144709,85],{"class":73},[67,144711,53157],{"class":114},[67,144713,53137],{"class":110},[67,144715,85],{"class":73},[67,144717,53164],{"class":114},[67,144719,323],{"class":73},[3317,144721],{"style":127846,"src":144722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144724,144725],{},"标准视口设置：",[26,144727,144728,144731,144734,144737,144740],{},[29,144729,144730],{},"视口宽度和设备保持一致",[29,144732,144733],{},"视口的默认缩放比例1.0",[29,144735,144736],{},"不允许用户自行缩放",[29,144738,144739],{},"最大允许的缩放比例1.0",[29,144741,144742],{},"最小允许的缩放比例1.0",[391,144744,144746],{"id":144745},"_1935-二倍图","19.3.5 二倍图",[23794,144748,144750],{"id":144749},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3317,144752],{"style":127846,"src":144753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3317,144755],{"style":127846,"src":144756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23794,144758,144760],{"id":144759},"_19352-多倍图","19.3.5.2 多倍图",[3317,144762],{"style":127846,"src":144763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144765,144766],{},"二倍图法，代码如下：",[58,144768,144770],{"className":127990,"code":144769,"language":127992,"meta":63,"style":63},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[32,144771,144772,144777],{"__ignoreMap":63},[67,144773,144774],{"class":69,"line":70},[67,144775,144776],{"class":2058},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[67,144778,144779,144782],{"class":69,"line":191},[67,144780,144781],{"class":262},"background-size",[67,144783,144784],{"class":73},": 50% 50%;\n",[23794,144786,144788],{"id":144787},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3317,144790],{"style":127846,"src":144791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[26,144793,144794,144797,144800,144803],{},[29,144795,144796],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[29,144798,144799],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[29,144801,144802],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[29,144804,144805],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23794,144807,144809],{"id":144808},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3317,144811],{"style":127846,"src":144812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1903,144814,144815],{},"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":63,"searchDepth":191,"depth":191,"links":144817},[144818,144819,144820],{"id":144631,"depth":191,"text":144632},{"id":144641,"depth":191,"text":144642},{"id":144654,"depth":191,"text":144655,"children":144821},[144822,144823,144824,144825,144826],{"id":144661,"depth":202,"text":144662},{"id":144668,"depth":202,"text":144669},{"id":144675,"depth":202,"text":144676},{"id":144693,"depth":202,"text":144694},{"id":144745,"depth":202,"text":144746},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144623,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144833,"title":144834,"body":144835,"description":25173,"extension":1930,"meta":145712,"navigation":630,"path":145713,"seo":145714,"stem":145715,"__hash__":145716},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144836,"toc":145696},[144837,144840,144844,144851,144854,144861,144864,144869,144872,144876,144880,144887,144890,144893,144897,144900,144903,144906,144909,144912,144916,144919,144923,144925,144928,144931,144934,144937,144939,144942,144944,144974,144976,145006,145010,145013,145017,145020,145037,145040,145043,145119,145121,145124,145127,145130,145133,145135,145138,145141,145145,145167,145170,145173,145177,145180,145186,145189,145193,145196,145199,145203,145206,145209,145212,145216,145219,145222,145225,145228,145232,145235,145239,145246,145249,145252,145255,145258,145268,145271,145274,145281,145284,145288,145291,145294,145298,145301,145304,145307,145352,145355,145358,145361,145363,145492,145494,145532,145535,145538,145540,145658,145660,145694],[10,144838,144834],{"id":144839},"_20-移动端布局实战上篇",[14,144841,144843],{"id":144842},"_201-移动端主流方案","20.1 移动端主流方案",[26,144845,144846],{},[29,144847,144848],{},[2144,144849,144850],{},"单独移动端页面（主流）",[3317,144852],{"style":127846,"src":144853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[26,144855,144856],{"start":191},[29,144857,144858],{},[2144,144859,144860],{},"响应式兼容PC移动端",[3317,144862],{"style":127846,"src":144863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[26,144865,144866],{"start":202},[29,144867,144868],{},"两种页面选型布局方式",[3317,144870],{"style":127846,"src":144871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144873,144875],{"id":144874},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[391,144877,144879],{"id":144878},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144881,144882,144883],{},"官网地址： ",[2230,144884,144885],{"href":144885,"rel":144886},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25657],[3317,144888],{"style":127846,"src":144889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3317,144891],{"style":127846,"src":144892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[391,144894,144896],{"id":144895},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3317,144898],{"style":127846,"src":144899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3317,144901],{"style":127846,"src":144902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144904,144905],{},"去除高亮：",[19,144907,144908],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144910,144911],{},"-webkit- tap-highlight-color: transparent;",[14,144913,144915],{"id":144914},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3317,144917],{"style":127846,"src":144918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144920,144922],{"id":144921},"_204-流式布局案例","20.4 流式布局案例",[19,144924,2031],{},[19,144926,144927],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144929,144930],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144932,144933],{},"图片格式：",[3317,144935],{"style":127846,"src":144936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144938,137033],{},[3317,144940],{"style":127846,"src":144941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144943,141360],{},[58,144945,144946],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,144947,144948],{"__ignoreMap":63},[67,144949,144950,144952,144954,144956,144958,144960,144962,144964,144966,144968,144970,144972],{"class":69,"line":70},[67,144951,259],{"class":73},[67,144953,3317],{"class":262},[67,144955,57000],{"class":110},[67,144957,85],{"class":73},[67,144959,135507],{"class":114},[67,144961,57008],{"class":110},[67,144963,85],{"class":73},[67,144965,135514],{"class":114},[67,144967,135517],{"class":110},[67,144969,85],{"class":73},[67,144971,135522],{"class":114},[67,144973,323],{"class":73},[19,144975,141449],{},[58,144977,144978],{"className":128737,"code":135492,"language":128739,"meta":63,"style":63},[32,144979,144980],{"__ignoreMap":63},[67,144981,144982,144984,144986,144988,144990,144992,144994,144996,144998,145000,145002,145004],{"class":69,"line":70},[67,144983,259],{"class":73},[67,144985,3317],{"class":262},[67,144987,57000],{"class":110},[67,144989,85],{"class":73},[67,144991,135507],{"class":114},[67,144993,57008],{"class":110},[67,144995,85],{"class":73},[67,144997,135514],{"class":114},[67,144999,135517],{"class":110},[67,145001,85],{"class":73},[67,145003,135522],{"class":114},[67,145005,323],{"class":73},[14,145007,145009],{"id":145008},"_205-flex布局","20.5 flex布局",[3317,145011],{"style":127846,"src":145012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[391,145014,145016],{"id":145015},"_2051-布局原理","20.5.1 布局原理",[19,145018,145019],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[2994,145021,145022,145025,145028,145031,145034],{},[29,145023,145024],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[29,145026,145027],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[29,145029,145030],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[29,145032,145033],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[29,145035,145036],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145038,145039],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145041,145042],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[58,145044,145046],{"className":127990,"code":145045,"language":127992,"meta":63,"style":63},"\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",[32,145047,145048,145053,145060,145070,145082,145093,145104,145115],{"__ignoreMap":63},[67,145049,145050],{"class":69,"line":70},[67,145051,145052],{"class":2058},"\u002F* Flex 弹性布局 *\u002F\n",[67,145054,145055,145058],{"class":69,"line":191},[67,145056,145057],{"class":110},".container",[67,145059,17369],{"class":73},[67,145061,145062,145064,145066,145068],{"class":69,"line":202},[67,145063,129606],{"class":77},[67,145065,53203],{"class":73},[67,145067,53243],{"class":77},[67,145069,3148],{"class":73},[67,145071,145072,145075,145077,145080],{"class":69,"line":641},[67,145073,145074],{"class":77},"  flex-direction",[67,145076,53203],{"class":73},[67,145078,145079],{"class":77},"row",[67,145081,3148],{"class":73},[67,145083,145084,145087,145089,145091],{"class":69,"line":655},[67,145085,145086],{"class":77},"  justify-content",[67,145088,53203],{"class":73},[67,145090,53434],{"class":77},[67,145092,3148],{"class":73},[67,145094,145095,145098,145100,145102],{"class":69,"line":660},[67,145096,145097],{"class":77},"  align-items",[67,145099,53203],{"class":73},[67,145101,53358],{"class":77},[67,145103,3148],{"class":73},[67,145105,145106,145109,145111,145113],{"class":69,"line":665},[67,145107,145108],{"class":77},"  flex-wrap",[67,145110,53203],{"class":73},[67,145112,80370],{"class":77},[67,145114,3148],{"class":73},[67,145116,145117],{"class":69,"line":677},[67,145118,3419],{"class":73},[19,145120,72213],{},[19,145122,145123],{},".form-item .male-label {",[19,145125,145126],{},"   margin-right: 20px;",[19,145128,145129],{},"   display: inline-flex;",[19,145131,145132],{},"   align-items: center;",[19,145134,2934],{},[3317,145136],{"style":127846,"src":145137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3317,145139],{"style":127846,"src":145140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[391,145142,145144],{"id":145143},"_2052-常见父项属性","20.5.2 常见父项属性",[26,145146,145147,145150,145153,145156,145159,145162,145165],{},[29,145148,145149],{},"flex-direction：设置主轴的方向",[29,145151,145152],{},"justify-content：设置主轴上的子元素排列方式",[29,145154,145155],{},"flex-wrap：设置子元素是否换行",[29,145157,145158],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[29,145160,145161],{},"align-items：设置侧轴上的子元素排列方式（单行）",[29,145163,145164],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[29,145166,145149],{},[3317,145168],{"style":127846,"src":145169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3317,145171],{"style":127846,"src":145172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[26,145174,145175],{"start":191},[29,145176,145152],{},[3317,145178],{"style":127846,"src":145179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145181,145182,145185],{},[32,145183,145184],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145187,145188],{},"跟着主轴走",[26,145190,145191],{"start":202},[29,145192,145155],{},[3317,145194],{"style":127846,"src":145195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145197,145198],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[26,145200,145201],{"start":641},[29,145202,145158],{},[3317,145204],{"style":127846,"src":145205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145207,145208],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145210,145211],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[26,145213,145214],{"start":655},[29,145215,145161],{},[3317,145217],{"style":127846,"src":145218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145220,145221],{},"align-items与align-content之间的区别：",[19,145223,145224],{},"单找items，多找content",[3317,145226],{"style":127846,"src":145227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[26,145229,145230],{"start":660},[29,145231,145164],{},[3317,145233],{"style":127846,"src":145234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[391,145236,145238],{"id":145237},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[26,145240,145241],{},[29,145242,145243],{},[2144,145244,145245],{},"flex 属性",[19,145247,145248],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3317,145250],{"style":127846,"src":145251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145253,145254],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145256,145257],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[26,145259,145260],{"start":191},[29,145261,145262,15593,145265],{},[2144,145263,145264],{},"align-self",[2144,145266,145267],{},"控制子项自己在侧轴上的排列方式",[3317,145269],{"style":127846,"src":145270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145272,145273],{},"单个子盒子在父盒子侧轴上的排列方式",[26,145275,145276],{"start":202},[29,145277,145278,145280],{},[2144,145279,97056],{}," 属性定义项目的排列顺序",[3317,145282],{"style":127846,"src":145283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[391,145285,145287],{"id":145286},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3317,145289],{"style":127846,"src":145290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145292,145293],{},"必须要添加浏览器的私有前缀",[391,145295,145297],{"id":145296},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145299,145300],{},"学到最重要的知识：",[19,145302,145303],{},"flex处理这样的布局思路",[3317,145305],{"style":127846,"src":145306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[58,145308,145310],{"className":127990,"code":145309,"language":127992,"meta":63,"style":63},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[32,145311,145312,145318,145328,145338,145348],{"__ignoreMap":63},[67,145313,145314,145316],{"class":69,"line":70},[67,145315,145057],{"class":110},[67,145317,17369],{"class":73},[67,145319,145320,145322,145324,145326],{"class":69,"line":191},[67,145321,129606],{"class":77},[67,145323,53203],{"class":73},[67,145325,53243],{"class":77},[67,145327,3148],{"class":73},[67,145329,145330,145332,145334,145336],{"class":69,"line":202},[67,145331,145086],{"class":77},[67,145333,53203],{"class":73},[67,145335,53358],{"class":77},[67,145337,3148],{"class":73},[67,145339,145340,145342,145344,145346],{"class":69,"line":641},[67,145341,145097],{"class":77},[67,145343,53203],{"class":73},[67,145345,53358],{"class":77},[67,145347,3148],{"class":73},[67,145349,145350],{"class":69,"line":655},[67,145351,3419],{"class":73},[19,145353,145354],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145356,145357],{},"使用属性选择器",[3317,145359],{"style":127846,"src":145360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145362,70649],{},[58,145364,145366],{"className":128737,"code":145365,"language":128739,"meta":63,"style":63},"\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",[32,145367,145368,145373,145387,145392,145412,145417,145436,145441,145460,145465,145484],{"__ignoreMap":63},[67,145369,145370],{"class":69,"line":70},[67,145371,145372],{"class":2058},"\u003C!-- 携程网移动端案例结构 -->\n",[67,145374,145375,145377,145379,145381,145383,145385],{"class":69,"line":191},[67,145376,259],{"class":73},[67,145378,53377],{"class":262},[67,145380,55248],{"class":110},[67,145382,85],{"class":73},[67,145384,94082],{"class":114},[67,145386,323],{"class":73},[67,145388,145389],{"class":69,"line":202},[67,145390,145391],{"class":2058},"  \u003C!-- 搜索栏 -->\n",[67,145393,145394,145396,145398,145400,145402,145405,145408,145410],{"class":69,"line":641},[67,145395,328],{"class":73},[67,145397,53377],{"class":262},[67,145399,55248],{"class":110},[67,145401,85],{"class":73},[67,145403,145404],{"class":114},"\"search-index\"",[67,145406,145407],{"class":73},">...\u003C\u002F",[67,145409,53377],{"class":262},[67,145411,323],{"class":73},[67,145413,145414],{"class":69,"line":655},[67,145415,145416],{"class":2058},"  \u003C!-- 焦点图 -->\n",[67,145418,145419,145421,145423,145425,145427,145430,145432,145434],{"class":69,"line":660},[67,145420,328],{"class":73},[67,145422,53377],{"class":262},[67,145424,55248],{"class":110},[67,145426,85],{"class":73},[67,145428,145429],{"class":114},"\"focus\"",[67,145431,145407],{"class":73},[67,145433,53377],{"class":262},[67,145435,323],{"class":73},[67,145437,145438],{"class":69,"line":665},[67,145439,145440],{"class":2058},"  \u003C!-- 主导航 -->\n",[67,145442,145443,145445,145447,145449,145451,145454,145456,145458],{"class":69,"line":677},[67,145444,328],{"class":73},[67,145446,53377],{"class":262},[67,145448,55248],{"class":110},[67,145450,85],{"class":73},[67,145452,145453],{"class":114},"\"local-nav\"",[67,145455,145407],{"class":73},[67,145457,53377],{"class":262},[67,145459,323],{"class":73},[67,145461,145462],{"class":69,"line":683},[67,145463,145464],{"class":2058},"  \u003C!-- 子导航 -->\n",[67,145466,145467,145469,145471,145473,145475,145478,145480,145482],{"class":69,"line":689},[67,145468,328],{"class":73},[67,145470,53377],{"class":262},[67,145472,55248],{"class":110},[67,145474,85],{"class":73},[67,145476,145477],{"class":114},"\"nav-common\"",[67,145479,145407],{"class":73},[67,145481,53377],{"class":262},[67,145483,323],{"class":73},[67,145485,145486,145488,145490],{"class":69,"line":694},[67,145487,376],{"class":73},[67,145489,53377],{"class":262},[67,145491,323],{"class":73},[19,145493,72213],{},[58,145495,145496],{"className":127990,"code":138442,"language":127992,"meta":63,"style":63},[32,145497,145498,145512,145528],{"__ignoreMap":63},[67,145499,145500,145502,145504,145506,145508,145510],{"class":69,"line":70},[67,145501,55583],{"class":262},[67,145503,2879],{"class":73},[67,145505,104791],{"class":110},[67,145507,85],{"class":84},[67,145509,64459],{"class":114},[67,145511,138459],{"class":73},[67,145513,145514,145516,145518,145520,145522,145524,145526],{"class":69,"line":191},[67,145515,72656],{"class":77},[67,145517,53203],{"class":73},[67,145519,2209],{"class":77},[67,145521,53258],{"class":84},[67,145523,53287],{"class":77},[67,145525,131570],{"class":77},[67,145527,3148],{"class":73},[67,145529,145530],{"class":69,"line":202},[67,145531,3419],{"class":73},[19,145533,145534],{},"总代码和效果展示：",[3317,145536],{"style":127846,"src":145537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145539,70649],{},[58,145541,145542],{"className":128737,"code":145365,"language":128739,"meta":63,"style":63},[32,145543,145544,145548,145562,145566,145584,145588,145606,145610,145628,145632,145650],{"__ignoreMap":63},[67,145545,145546],{"class":69,"line":70},[67,145547,145372],{"class":2058},[67,145549,145550,145552,145554,145556,145558,145560],{"class":69,"line":191},[67,145551,259],{"class":73},[67,145553,53377],{"class":262},[67,145555,55248],{"class":110},[67,145557,85],{"class":73},[67,145559,94082],{"class":114},[67,145561,323],{"class":73},[67,145563,145564],{"class":69,"line":202},[67,145565,145391],{"class":2058},[67,145567,145568,145570,145572,145574,145576,145578,145580,145582],{"class":69,"line":641},[67,145569,328],{"class":73},[67,145571,53377],{"class":262},[67,145573,55248],{"class":110},[67,145575,85],{"class":73},[67,145577,145404],{"class":114},[67,145579,145407],{"class":73},[67,145581,53377],{"class":262},[67,145583,323],{"class":73},[67,145585,145586],{"class":69,"line":655},[67,145587,145416],{"class":2058},[67,145589,145590,145592,145594,145596,145598,145600,145602,145604],{"class":69,"line":660},[67,145591,328],{"class":73},[67,145593,53377],{"class":262},[67,145595,55248],{"class":110},[67,145597,85],{"class":73},[67,145599,145429],{"class":114},[67,145601,145407],{"class":73},[67,145603,53377],{"class":262},[67,145605,323],{"class":73},[67,145607,145608],{"class":69,"line":665},[67,145609,145440],{"class":2058},[67,145611,145612,145614,145616,145618,145620,145622,145624,145626],{"class":69,"line":677},[67,145613,328],{"class":73},[67,145615,53377],{"class":262},[67,145617,55248],{"class":110},[67,145619,85],{"class":73},[67,145621,145453],{"class":114},[67,145623,145407],{"class":73},[67,145625,53377],{"class":262},[67,145627,323],{"class":73},[67,145629,145630],{"class":69,"line":683},[67,145631,145464],{"class":2058},[67,145633,145634,145636,145638,145640,145642,145644,145646,145648],{"class":69,"line":689},[67,145635,328],{"class":73},[67,145637,53377],{"class":262},[67,145639,55248],{"class":110},[67,145641,85],{"class":73},[67,145643,145477],{"class":114},[67,145645,145407],{"class":73},[67,145647,53377],{"class":262},[67,145649,323],{"class":73},[67,145651,145652,145654,145656],{"class":69,"line":694},[67,145653,376],{"class":73},[67,145655,53377],{"class":262},[67,145657,323],{"class":73},[19,145659,72213],{},[58,145661,145662],{"className":128737,"code":132094,"language":128739,"meta":63,"style":63},[32,145663,145664,145668,145682,145686],{"__ignoreMap":63},[67,145665,145666],{"class":69,"line":70},[67,145667,132101],{"class":2058},[67,145669,145670,145672,145674,145676,145678,145680],{"class":69,"line":191},[67,145671,259],{"class":73},[67,145673,53377],{"class":262},[67,145675,55248],{"class":110},[67,145677,85],{"class":73},[67,145679,132114],{"class":114},[67,145681,323],{"class":73},[67,145683,145684],{"class":69,"line":202},[67,145685,132121],{"class":73},[67,145687,145688,145690,145692],{"class":69,"line":641},[67,145689,376],{"class":73},[67,145691,53377],{"class":262},[67,145693,323],{"class":73},[1903,145695,139391],{},{"title":63,"searchDepth":191,"depth":191,"links":145697},[145698,145699,145703,145704,145705],{"id":144842,"depth":191,"text":144843},{"id":144874,"depth":191,"text":144875,"children":145700},[145701,145702],{"id":144878,"depth":202,"text":144879},{"id":144895,"depth":202,"text":144896},{"id":144914,"depth":191,"text":144915},{"id":144921,"depth":191,"text":144922},{"id":145008,"depth":191,"text":145009,"children":145706},[145707,145708,145709,145710,145711],{"id":145015,"depth":202,"text":145016},{"id":145143,"depth":202,"text":145144},{"id":145237,"depth":202,"text":145238},{"id":145286,"depth":202,"text":145287},{"id":145296,"depth":202,"text":145297},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144834,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145718,"title":145719,"body":145720,"description":25173,"extension":1930,"meta":146947,"navigation":630,"path":146948,"seo":146949,"stem":146950,"__hash__":146951},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145721,"toc":146925},[145722,145725,145729,145733,145736,145739,145743,145748,145751,145754,145757,145760,145763,145820,145823,145828,145831,145834,145838,145849,145853,145856,145859,145866,145871,145875,145878,145884,145887,145891,145894,145901,145904,145907,145914,145917,145924,145927,145930,145937,145940,145943,145945,145962,145966,145969,145972,145975,145979,145982,145985,145988,145991,145994,145997,145999,146002,146005,146067,146070,146180,146187,146193,146196,146199,146203,146206,146210,146215,146218,146225,146228,146234,146239,146242,146245,146248,146251,146254,146257,146260,146263,146319,146321,146347,146351,146354,146357,146360,146368,146371,146374,146378,146434,146437,146441,146447,146458,146461,146466,146469,146472,146478,146481,146484,146487,146490,146493,146496,146499,146502,146527,146533,146536,146539,146542,146545,146548,146551,146556,146559,146562,146565,146573,146576,146583,146586,146589,146591,146615,146617,146620,146623,146626,146629,146632,146635,146638,146672,146675,146678,146712,146719,146722,146725,146728,146731,146734,146737,146744,146747,146750,146753,146756,146763,146766,146769,146776,146779,146782,146786,146789,146792,146795,146798,146801,146804,146807,146810,146812,146836,146838,146862,146866,146877,146880,146883,146886,146889,146892,146895,146898,146901,146904,146907,146910,146913,146916,146919,146922],[10,145723,145719],{"id":145724},"_21-移动端布局实战下篇",[14,145726,145728],{"id":145727},"_211-rem适配布局","21.1 rem适配布局",[391,145730,145732],{"id":145731},"_2111-rem单位","21.1.1 rem单位",[3317,145734],{"style":127846,"src":145735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145737,145738],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[391,145740,145742],{"id":145741},"_2112-媒体查询","21.1.2 媒体查询",[26,145744,145745],{},[29,145746,145747],{},"参数介绍",[3317,145749],{"style":127846,"src":145750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3317,145752],{"style":127846,"src":145753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3317,145755],{"style":127846,"src":145756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3317,145758],{"style":127846,"src":145759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3317,145761],{"style":127846,"src":145762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[58,145764,145766],{"className":127990,"code":145765,"language":127992,"meta":63,"style":63},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[32,145767,145768,145773,145792,145799,145812,145816],{"__ignoreMap":63},[67,145769,145770],{"class":69,"line":70},[67,145771,145772],{"class":2058},"\u002F* 媒体查询 *\u002F\n",[67,145774,145775,145778,145780,145783,145785,145788,145790],{"class":69,"line":191},[67,145776,145777],{"class":84},"@media",[67,145779,3505],{"class":73},[67,145781,145782],{"class":77},"max-width",[67,145784,53203],{"class":73},[67,145786,145787],{"class":77},"768",[67,145789,53258],{"class":84},[67,145791,14241],{"class":73},[67,145793,145794,145797],{"class":69,"line":202},[67,145795,145796],{"class":110},"  .container",[67,145798,17369],{"class":73},[67,145800,145801,145804,145806,145808,145810],{"class":69,"line":641},[67,145802,145803],{"class":77},"    width",[67,145805,53203],{"class":73},[67,145807,2302],{"class":77},[67,145809,2319],{"class":84},[67,145811,3148],{"class":73},[67,145813,145814],{"class":69,"line":655},[67,145815,128786],{"class":73},[67,145817,145818],{"class":69,"line":660},[67,145819,3419],{"class":73},[19,145821,145822],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[26,145824,145825],{"start":191},[29,145826,145827],{},"引入资源",[3317,145829],{"style":127846,"src":145830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145832,145833],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[391,145835,145837],{"id":145836},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[2994,145839,145840,145843,145846],{},[29,145841,145842],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[29,145844,145845],{},"媒体查询可以根据不同设备宽度来修改样式",[29,145847,145848],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145850,145852],{"id":145851},"_212-less基础","21.2 Less基础",[19,145854,145855],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145857,145858],{},"Less可以解决该问题，它是css的扩展语言",[19,145860,145861,145862],{},"Less中文网址： ",[2230,145863,145864],{"href":145864,"rel":145865},"http:\u002F\u002Flesscss.cn\u002F",[25657],[19,145867,145868],{},[2144,145869,145870],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[391,145872,145874],{"id":145873},"_2121-less安装","21.2.1 less安装",[19,145876,145877],{},"如果使用vscode，则无需进行下方安装步骤",[19,145879,145880],{},[2230,145881,145882],{"href":145882,"rel":145883},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25657],[3317,145885],{"style":127846,"src":145886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[391,145888,145890],{"id":145889},"_2122-less使用","21.2.2 less使用",[19,145892,145893],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[26,145895,145896],{},[29,145897,145898],{},[2144,145899,145900],{},"Less 变量",[3317,145902],{"style":127846,"src":145903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3317,145905],{"style":127846,"src":145906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[26,145908,145909],{"start":191},[29,145910,145911],{},[2144,145912,145913],{},"Less 编译",[3317,145915],{"style":127846,"src":145916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[26,145918,145919],{"start":202},[29,145920,145921],{},[2144,145922,145923],{},"Less 嵌套",[3317,145925],{"style":127846,"src":145926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3317,145928],{"style":127846,"src":145929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[26,145931,145932],{"start":641},[29,145933,145934],{},[2144,145935,145936],{},"Less 运算",[3317,145938],{"style":127846,"src":145939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145941,145942],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145944,2031],{},[2994,145946,145947,145950,145953,145956,145959],{},[29,145948,145949],{},"乘号（*）和除号（\u002F）的写法",[29,145951,145952],{},"运算符中间左右有个空格隔开 1px + 5",[29,145954,145955],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[29,145957,145958],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[29,145960,145961],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145963,145965],{"id":145964},"_213-rem-适配方案","21.3 rem 适配方案",[19,145967,145968],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145970,145971],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3317,145973],{"style":127846,"src":145974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[391,145976,145978],{"id":145977},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145980,145981],{},"rem + 媒体查询 + less 技术",[3317,145983],{"style":127846,"src":145984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145986,145987],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145989,145990],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3317,145992],{"style":127846,"src":145993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145995,145996],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145998,16431],{},[3317,146000],{"style":127846,"src":146001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146003,146004],{},"index.html:",[58,146006,146008],{"className":127990,"code":146007,"language":127992,"meta":63,"style":63},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[32,146009,146010,146015,146021,146037,146041,146047,146063],{"__ignoreMap":63},[67,146011,146012],{"class":69,"line":70},[67,146013,146014],{"class":2058},"\u002F* rem 适配方案 *\u002F\n",[67,146016,146017,146019],{"class":69,"line":191},[67,146018,52403],{"class":262},[67,146020,17369],{"class":73},[67,146022,146023,146025,146027,146030,146032,146034],{"class":69,"line":202},[67,146024,72386],{"class":77},[67,146026,53203],{"class":73},[67,146028,146029],{"class":77},"62.5",[67,146031,2319],{"class":84},[67,146033,131853],{"class":73},[67,146035,146036],{"class":2058},"\u002F* 1rem = 10px *\u002F\n",[67,146038,146039],{"class":69,"line":641},[67,146040,3419],{"class":73},[67,146042,146043,146045],{"class":69,"line":655},[67,146044,131838],{"class":110},[67,146046,17369],{"class":73},[67,146048,146049,146051,146053,146055,146058,146060],{"class":69,"line":660},[67,146050,72328],{"class":77},[67,146052,53203],{"class":73},[67,146054,2437],{"class":77},[67,146056,146057],{"class":84},"rem",[67,146059,131853],{"class":73},[67,146061,146062],{"class":2058},"\u002F* 100px *\u002F\n",[67,146064,146065],{"class":69,"line":665},[67,146066,3419],{"class":73},[19,146068,146069],{},"common.less",[58,146071,146073],{"className":127990,"code":146072,"language":127992,"meta":63,"style":63},"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",[32,146074,146075,146081,146096,146100,146106,146120,146124,146128,146132,146138,146152,146156,146162,146176],{"__ignoreMap":63},[67,146076,146077,146079],{"class":69,"line":70},[67,146078,52403],{"class":262},[67,146080,17369],{"class":73},[67,146082,146083,146085,146087,146089,146091,146093],{"class":69,"line":191},[67,146084,72386],{"class":77},[67,146086,53203],{"class":73},[67,146088,146029],{"class":77},[67,146090,2319],{"class":84},[67,146092,27855],{"class":73},[67,146094,146095],{"class":2058},"\u002F* 10px *\u002F\n",[67,146097,146098],{"class":69,"line":202},[67,146099,3419],{"class":73},[67,146101,146102,146104],{"class":69,"line":641},[67,146103,53377],{"class":262},[67,146105,17369],{"class":73},[67,146107,146108,146110,146112,146114,146116,146118],{"class":69,"line":655},[67,146109,72328],{"class":77},[67,146111,53203],{"class":73},[67,146113,2437],{"class":77},[67,146115,146057],{"class":84},[67,146117,27855],{"class":73},[67,146119,146062],{"class":2058},[67,146121,146122],{"class":69,"line":660},[67,146123,3419],{"class":73},[67,146125,146126],{"class":69,"line":665},[67,146127,137451],{"class":73},[67,146129,146130],{"class":69,"line":677},[67,146131,146014],{"class":2058},[67,146133,146134,146136],{"class":69,"line":683},[67,146135,52403],{"class":262},[67,146137,17369],{"class":73},[67,146139,146140,146142,146144,146146,146148,146150],{"class":69,"line":689},[67,146141,72386],{"class":77},[67,146143,53203],{"class":73},[67,146145,146029],{"class":77},[67,146147,2319],{"class":84},[67,146149,131853],{"class":73},[67,146151,146036],{"class":2058},[67,146153,146154],{"class":69,"line":694},[67,146155,3419],{"class":73},[67,146157,146158,146160],{"class":69,"line":700},[67,146159,131838],{"class":110},[67,146161,17369],{"class":73},[67,146163,146164,146166,146168,146170,146172,146174],{"class":69,"line":706},[67,146165,72328],{"class":77},[67,146167,53203],{"class":73},[67,146169,2437],{"class":77},[67,146171,146057],{"class":84},[67,146173,131853],{"class":73},[67,146175,146062],{"class":2058},[67,146177,146178],{"class":69,"line":712},[67,146179,3419],{"class":73},[19,146181,146182,146183,146186],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25350,146184,146185],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[58,146188,146191],{"className":146189,"code":146190,"language":603},[601],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[32,146192,146190],{"__ignoreMap":63},[19,146194,146195],{},"less保存时会自动变成.css文件",[19,146197,146198],{},"好好搞懂上述代码写法",[391,146200,146202],{"id":146201},"_2132-样式导入样式","21.3.2 样式导入样式",[3317,146204],{"style":127846,"src":146205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[391,146207,146209],{"id":146208},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[26,146211,146212],{},[29,146213,146214],{},"准备工作",[3317,146216],{"style":127846,"src":146217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146219,146220,146221],{},"github地址：",[2230,146222,146223],{"href":146223,"rel":146224},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25657],[19,146226,146227],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146229,146230,146231],{},"js文件引入到index.html中使用的是",[32,146232,146233],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[26,146235,146236],{"start":191},[29,146237,146238],{},"vscode插件",[3317,146240],{"style":127846,"src":146241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146243,146244],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146246,146247],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3317,146249],{"style":127846,"src":146250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146252,146253],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3317,146255],{"style":127846,"src":146256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146258,146259],{},"修改成75就可以，alt+z为快捷键",[19,146261,146262],{},"index.css：",[58,146264,146265],{"className":127990,"code":146007,"language":127992,"meta":63,"style":63},[32,146266,146267,146271,146277,146291,146295,146301,146315],{"__ignoreMap":63},[67,146268,146269],{"class":69,"line":70},[67,146270,146014],{"class":2058},[67,146272,146273,146275],{"class":69,"line":191},[67,146274,52403],{"class":262},[67,146276,17369],{"class":73},[67,146278,146279,146281,146283,146285,146287,146289],{"class":69,"line":202},[67,146280,72386],{"class":77},[67,146282,53203],{"class":73},[67,146284,146029],{"class":77},[67,146286,2319],{"class":84},[67,146288,131853],{"class":73},[67,146290,146036],{"class":2058},[67,146292,146293],{"class":69,"line":641},[67,146294,3419],{"class":73},[67,146296,146297,146299],{"class":69,"line":655},[67,146298,131838],{"class":110},[67,146300,17369],{"class":73},[67,146302,146303,146305,146307,146309,146311,146313],{"class":69,"line":660},[67,146304,72328],{"class":77},[67,146306,53203],{"class":73},[67,146308,2437],{"class":77},[67,146310,146057],{"class":84},[67,146312,131853],{"class":73},[67,146314,146062],{"class":2058},[67,146316,146317],{"class":69,"line":665},[67,146318,3419],{"class":73},[19,146320,146004],{},[58,146322,146323],{"className":127990,"code":128394,"language":127992,"meta":63,"style":63},[32,146324,146325,146331,146343],{"__ignoreMap":63},[67,146326,146327,146329],{"class":69,"line":70},[67,146328,53565],{"class":262},[67,146330,17369],{"class":73},[67,146332,146333,146335,146337,146339,146341],{"class":69,"line":191},[67,146334,72386],{"class":77},[67,146336,53203],{"class":73},[67,146338,2590],{"class":77},[67,146340,53258],{"class":84},[67,146342,3148],{"class":73},[67,146344,146345],{"class":69,"line":202},[67,146346,3419],{"class":73},[14,146348,146350],{"id":146349},"_214-响应式开发","21.4 响应式开发",[19,146352,146353],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3317,146355],{"style":127846,"src":146356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146358,146359],{},"做法：",[2994,146361,146362,146365],{},[29,146363,146364],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[29,146366,146367],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3317,146369],{"style":127846,"src":146370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146372,146373],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[391,146375,146377],{"id":146376},"_2141-简单代码示范","21.4.1 简单代码示范",[58,146379,146380],{"className":127990,"code":146007,"language":127992,"meta":63,"style":63},[32,146381,146382,146386,146392,146406,146410,146416,146430],{"__ignoreMap":63},[67,146383,146384],{"class":69,"line":70},[67,146385,146014],{"class":2058},[67,146387,146388,146390],{"class":69,"line":191},[67,146389,52403],{"class":262},[67,146391,17369],{"class":73},[67,146393,146394,146396,146398,146400,146402,146404],{"class":69,"line":202},[67,146395,72386],{"class":77},[67,146397,53203],{"class":73},[67,146399,146029],{"class":77},[67,146401,2319],{"class":84},[67,146403,131853],{"class":73},[67,146405,146036],{"class":2058},[67,146407,146408],{"class":69,"line":641},[67,146409,3419],{"class":73},[67,146411,146412,146414],{"class":69,"line":655},[67,146413,131838],{"class":110},[67,146415,17369],{"class":73},[67,146417,146418,146420,146422,146424,146426,146428],{"class":69,"line":660},[67,146419,72328],{"class":77},[67,146421,53203],{"class":73},[67,146423,2437],{"class":77},[67,146425,146057],{"class":84},[67,146427,131853],{"class":73},[67,146429,146062],{"class":2058},[67,146431,146432],{"class":69,"line":665},[67,146433,3419],{"class":73},[19,146435,146436],{},"父盒子一般命名为container",[391,146438,146440],{"id":146439},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146442,146443,146444],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2144,146445,146446],{},"使得 Web 开发更加快捷",[2994,146448,146449],{},[29,146450,146451,146452],{},"官网：",[2144,146453,146454],{},[2230,146455,146456],{"href":146456,"rel":146457},"http:\u002F\u002Fgetbootstrap.com\u002F",[25657],[19,146459,146460],{},"可以直接去官网拿现成的东西",[26,146462,146463],{},[29,146464,146465],{},"Bootstrap的使用",[19,146467,146468],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146470,146471],{},"Bootstrap 使用四步曲：",[19,146473,146474,146477],{},[2144,146475,146476],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3317,146479],{"style":127846,"src":146480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146482,146483],{},"打开Bootstrap官网，然后下载",[3317,146485],{"style":127846,"src":146486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3317,146488],{"style":127846,"src":146489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146491,146492],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146494,146495],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146497,146498],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3317,146500],{"style":127846,"src":146501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[58,146503,146505],{"className":127990,"code":146504,"language":127992,"meta":63,"style":63},".center {\n  color: red;\n}\n",[32,146506,146507,146513,146523],{"__ignoreMap":63},[67,146508,146509,146511],{"class":69,"line":70},[67,146510,128281],{"class":110},[67,146512,17369],{"class":73},[67,146514,146515,146517,146519,146521],{"class":69,"line":191},[67,146516,72665],{"class":77},[67,146518,53203],{"class":73},[67,146520,59182],{"class":77},[67,146522,3148],{"class":73},[67,146524,146525],{"class":69,"line":202},[67,146526,3419],{"class":73},[19,146528,146529,146532],{},[32,146530,146531],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3317,146534],{"style":127846,"src":146535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3317,146537],{"style":127846,"src":146538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3317,146540],{"style":127846,"src":146541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146543,146544],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3317,146546],{"style":127846,"src":146547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146549,146550],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[26,146552,146553],{"start":191},[29,146554,146555],{},"布局容器",[3317,146557],{"style":127846,"src":146558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146560,146561],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146563,146564],{},"container-fluid用于移动式布局比较方便",[26,146566,146567],{"start":202},[29,146568,146569,146570],{},"bootstrap ",[2144,146571,146572],{},"栅格系统原理",[3317,146574],{"style":127846,"src":146575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[26,146577,146578],{"start":641},[29,146579,146580],{},[2144,146581,146582],{},"栅格选项参数",[3317,146584],{"style":127846,"src":146585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146587,146588],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146590,16431],{},[58,146592,146593],{"className":127990,"code":146504,"language":127992,"meta":63,"style":63},[32,146594,146595,146601,146611],{"__ignoreMap":63},[67,146596,146597,146599],{"class":69,"line":70},[67,146598,128281],{"class":110},[67,146600,17369],{"class":73},[67,146602,146603,146605,146607,146609],{"class":69,"line":191},[67,146604,72665],{"class":77},[67,146606,53203],{"class":73},[67,146608,59182],{"class":77},[67,146610,3148],{"class":73},[67,146612,146613],{"class":69,"line":202},[67,146614,3419],{"class":73},[19,146616,137033],{},[3317,146618],{"style":127846,"src":146619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146621,146622],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146624,146625],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146627,146628],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146630,146631],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146633,146634],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146636,146637],{},"汇总展示说明：",[58,146639,146640],{"className":128737,"code":132094,"language":128739,"meta":63,"style":63},[32,146641,146642,146646,146660,146664],{"__ignoreMap":63},[67,146643,146644],{"class":69,"line":70},[67,146645,132101],{"class":2058},[67,146647,146648,146650,146652,146654,146656,146658],{"class":69,"line":191},[67,146649,259],{"class":73},[67,146651,53377],{"class":262},[67,146653,55248],{"class":110},[67,146655,85],{"class":73},[67,146657,132114],{"class":114},[67,146659,323],{"class":73},[67,146661,146662],{"class":69,"line":202},[67,146663,132121],{"class":73},[67,146665,146666,146668,146670],{"class":69,"line":641},[67,146667,376],{"class":73},[67,146669,53377],{"class":262},[67,146671,323],{"class":73},[3317,146673],{"style":127846,"src":146674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146676,146677],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[58,146679,146680],{"className":128737,"code":132094,"language":128739,"meta":63,"style":63},[32,146681,146682,146686,146700,146704],{"__ignoreMap":63},[67,146683,146684],{"class":69,"line":70},[67,146685,132101],{"class":2058},[67,146687,146688,146690,146692,146694,146696,146698],{"class":69,"line":191},[67,146689,259],{"class":73},[67,146691,53377],{"class":262},[67,146693,55248],{"class":110},[67,146695,85],{"class":73},[67,146697,132114],{"class":114},[67,146699,323],{"class":73},[67,146701,146702],{"class":69,"line":202},[67,146703,132121],{"class":73},[67,146705,146706,146708,146710],{"class":69,"line":641},[67,146707,376],{"class":73},[67,146709,53377],{"class":262},[67,146711,323],{"class":73},[26,146713,146714],{"start":655},[29,146715,146716],{},[2144,146717,146718],{},"列嵌套",[3317,146720],{"style":127846,"src":146721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146723,146724],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146726,146727],{},"没加row内部这样：",[3317,146729],{"style":127846,"src":146730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146732,146733],{},"加上row之后内部为：",[3317,146735],{"style":127846,"src":146736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[26,146738,146739],{"start":660},[29,146740,146741],{},[2144,146742,146743],{},"列偏移",[3317,146745],{"style":127846,"src":146746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146748,146749],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146751,146752],{},"要加偏移量，即偏移份数",[19,146754,146755],{},"偏移的份数=12-两个盒子的份数",[26,146757,146758],{"start":665},[29,146759,146760],{},[2144,146761,146762],{},"列排序",[3317,146764],{"style":127846,"src":146765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146767,146768],{},"pull拉左；push推右",[26,146770,146771],{"start":677},[29,146772,146773],{},[2144,146774,146775],{},"响应式工具",[3317,146777],{"style":127846,"src":146778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146780,146781],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[391,146783,146785],{"id":146784},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146787,146788],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146790,146791],{},"ul {",[19,146793,146794],{},"list-style: none;",[19,146796,146797],{},"margin:0;",[19,146799,146800],{},"padding:0; }",[3317,146802],{"style":127846,"src":146803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3317,146805],{"style":127846,"src":146806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146808,146809],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146811,70649],{},[58,146813,146814],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,146815,146816,146822,146832],{"__ignoreMap":63},[67,146817,146818,146820],{"class":69,"line":70},[67,146819,131838],{"class":110},[67,146821,17369],{"class":73},[67,146823,146824,146826,146828,146830],{"class":69,"line":191},[67,146825,132470],{"class":77},[67,146827,53203],{"class":73},[67,146829,410],{"class":77},[67,146831,3148],{"class":73},[67,146833,146834],{"class":69,"line":202},[67,146835,3419],{"class":73},[19,146837,72213],{},[58,146839,146840],{"className":127990,"code":140660,"language":127992,"meta":63,"style":63},[32,146841,146842,146848,146858],{"__ignoreMap":63},[67,146843,146844,146846],{"class":69,"line":70},[67,146845,131838],{"class":110},[67,146847,17369],{"class":73},[67,146849,146850,146852,146854,146856],{"class":69,"line":191},[67,146851,132470],{"class":77},[67,146853,53203],{"class":73},[67,146855,410],{"class":77},[67,146857,3148],{"class":73},[67,146859,146860],{"class":69,"line":202},[67,146861,3419],{"class":73},[14,146863,146865],{"id":146864},"_215-swiper-插件使用","21.5 swiper 插件使用",[2994,146867,146868,146871,146874],{},[29,146869,146870],{},"下载需要的css和js文件html页面中 引入相关文件",[29,146872,146873],{},"官网找到类似案例，复制html结构，css样式 js 语法",[29,146875,146876],{},"根据需求定制修改模块",[3317,146878],{"style":127846,"src":146879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146881,146882],{},"解压后将这两部分放到项目中",[3317,146884],{"style":127846,"src":146885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146887,146888],{},"这个插件可以帮助我们实现轮播图效果",[19,146890,146891],{},"用法：",[3317,146893],{"style":127846,"src":146894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146896,146897],{},"找到自己喜欢的",[3317,146899],{"style":127846,"src":146900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146902,146903],{},"右键，查看网页源代码",[3317,146905],{"style":127846,"src":146906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146908,146909],{},"复制人家的结构内容",[19,146911,146912],{},"然后去看API文档：",[3317,146914],{"style":127846,"src":146915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146917,146918],{},"可以看看如何修改样式",[19,146920,146921],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1903,146923,146924],{},"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":63,"searchDepth":191,"depth":191,"links":146926},[146927,146932,146936,146941,146946],{"id":145727,"depth":191,"text":145728,"children":146928},[146929,146930,146931],{"id":145731,"depth":202,"text":145732},{"id":145741,"depth":202,"text":145742},{"id":145836,"depth":202,"text":145837},{"id":145851,"depth":191,"text":145852,"children":146933},[146934,146935],{"id":145873,"depth":202,"text":145874},{"id":145889,"depth":202,"text":145890},{"id":145964,"depth":191,"text":145965,"children":146937},[146938,146939,146940],{"id":145977,"depth":202,"text":145978},{"id":146201,"depth":202,"text":146202},{"id":146208,"depth":202,"text":146209},{"id":146349,"depth":191,"text":146350,"children":146942},[146943,146944,146945],{"id":146376,"depth":202,"text":146377},{"id":146439,"depth":202,"text":146440},{"id":146784,"depth":202,"text":146785},{"id":146864,"depth":191,"text":146865},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145719,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146953,"title":146954,"body":146955,"description":25173,"extension":1930,"meta":147175,"navigation":630,"path":147176,"seo":147177,"stem":147178,"__hash__":147179},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146956,"toc":147171},[146957,146960,146964,146967,146982,146987,146990,146995,147030,147035,147047,147052,147065,147070,147087,147092,147112,147117,147135,147138,147141,147144,147147,147151,147154,147157,147160,147163,147166,147169],[10,146958,146954],{"id":146959},"_22-代码提交与新型相对单位",[14,146961,146963],{"id":146962},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146965,146966],{},"法1：",[26,146968,146969,146976,146979],{},[29,146970,146971,146972],{},"登录网站注册：",[2230,146973,146974],{"href":146974,"rel":146975},"https:\u002F\u002Fgitee.com\u002F",[25657],[29,146977,146978],{},"码云创建新的仓库",[29,146980,146981],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[2994,146983,146984],{},[29,146985,146986],{},"在网站根目录右键-- Git Bash Here",[3317,146988],{"style":127846,"src":146989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[2994,146991,146992],{},[29,146993,146994],{},"如果是第一次利用git提交，请配置好全局选项",[58,146996,146998],{"className":118734,"code":146997,"language":118736,"meta":63,"style":63},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[32,146999,147000,147016],{"__ignoreMap":63},[67,147001,147002,147005,147007,147010,147013],{"class":69,"line":70},[67,147003,147004],{"class":110},"git",[67,147006,121157],{"class":114},[67,147008,147009],{"class":77}," --global",[67,147011,147012],{"class":114}," user.name",[67,147014,147015],{"class":114}," \"你的名字\"\n",[67,147017,147018,147020,147022,147024,147027],{"class":69,"line":191},[67,147019,147004],{"class":110},[67,147021,121157],{"class":114},[67,147023,147009],{"class":77},[67,147025,147026],{"class":114}," user.email",[67,147028,147029],{"class":114}," \"你的邮箱\"\n",[2994,147031,147032],{},[29,147033,147034],{},"初始化仓库",[58,147036,147038],{"className":118734,"code":147037,"language":118736,"meta":63,"style":63},"git init\n",[32,147039,147040],{"__ignoreMap":63},[67,147041,147042,147044],{"class":69,"line":70},[67,147043,147004],{"class":110},[67,147045,147046],{"class":114}," init\n",[2994,147048,147049],{},[29,147050,147051],{},"把本地文件放到暂存区",[58,147053,147055],{"className":118734,"code":147054,"language":118736,"meta":63,"style":63},"git add .\n",[32,147056,147057],{"__ignoreMap":63},[67,147058,147059,147061,147063],{"class":69,"line":70},[67,147060,147004],{"class":110},[67,147062,7026],{"class":114},[67,147064,30526],{"class":114},[2994,147066,147067],{},[29,147068,147069],{},"把本地文件放到本地仓库里面",[58,147071,147073],{"className":118734,"code":147072,"language":118736,"meta":63,"style":63},"git commit -m \"first commit\"\n",[32,147074,147075],{"__ignoreMap":63},[67,147076,147077,147079,147082,147084],{"class":69,"line":70},[67,147078,147004],{"class":110},[67,147080,147081],{"class":114}," commit",[67,147083,102631],{"class":77},[67,147085,147086],{"class":114}," \"first commit\"\n",[2994,147088,147089],{},[29,147090,147091],{},"链接远程仓库",[58,147093,147095],{"className":118734,"code":147094,"language":118736,"meta":63,"style":63},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[32,147096,147097],{"__ignoreMap":63},[67,147098,147099,147101,147104,147106,147109],{"class":69,"line":70},[67,147100,147004],{"class":110},[67,147102,147103],{"class":114}," remote",[67,147105,7026],{"class":114},[67,147107,147108],{"class":114}," origin",[67,147110,147111],{"class":114}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[2994,147113,147114],{},[29,147115,147116],{},"把本地仓库的文件推送到远程仓库 push",[58,147118,147120],{"className":118734,"code":147119,"language":118736,"meta":63,"style":63},"git push -u origin master\n",[32,147121,147122],{"__ignoreMap":63},[67,147123,147124,147126,147128,147130,147132],{"class":69,"line":70},[67,147125,147004],{"class":110},[67,147127,30801],{"class":114},[67,147129,30076],{"class":77},[67,147131,147108],{"class":114},[67,147133,147134],{"class":114}," master\n",[3317,147136],{"style":127846,"src":147137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147139,147140],{},"上方方法暂未实现，后边学完git后在整",[19,147142,147143],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3317,147145],{"style":127846,"src":147146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147148,147150],{"id":147149},"_222-新型相对单位","22.2 新型相对单位",[3317,147152],{"style":127846,"src":147153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3317,147155],{"style":127846,"src":147156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147158,147159],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147161,147162],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3317,147164],{"style":127846,"src":147165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147167,147168],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1903,147170,25750],{},{"title":63,"searchDepth":191,"depth":191,"links":147172},[147173,147174],{"id":146962,"depth":191,"text":146963},{"id":147149,"depth":191,"text":147150},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146954,"description":25173},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147181,"title":147182,"body":147183,"description":147187,"extension":1930,"meta":147188,"navigation":630,"path":147189,"seo":147190,"stem":147191,"__hash__":147192},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147184,"toc":147185},[],{"title":63,"searchDepth":191,"depth":191,"links":147186},[],"自己正经开始学编程的第一门语言！",{"category":94598},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147182,"description":147187},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147194,"title":147195,"body":147196,"description":25173,"extension":1930,"meta":148343,"navigation":630,"path":148344,"seo":148345,"stem":148346,"__hash__":148347},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147197,"toc":148319},[147198,147201,147205,147208,147211,147236,147239,147245,147249,147252,147279,147282,147322,147325,147337,147340,147346,147350,147354,147381,147398,147405,147409,147412,147438,147441,147445,147448,147488,147491,147508,147514,147518,147523,147567,147570,147588,147591,147659,147663,147670,147673,147688,147691,147700,147703,147714,147717,147726,147729,147746,147749,147764,147768,147772,147775,147777,147797,147801,147804,147807,147818,147821,147827,147831,147837,147864,147867,147879,147882,147893,147896,147902,147906,147912,147962,147965,148007,148010,148043,148046,148080,148084,148087,148107,148110,148146,148149,148162,148166,148170,148176,148179,148192,148196,148199,148205,148208,148212,148215,148218,148267,148271,148287,148293,148300,148306,148316],[10,147199,147195],{"id":147200},"_1-python环境与第一个程序",[14,147202,147204],{"id":147203},"_11-什么是python","1.1 什么是Python",[19,147206,147207],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147209,147210],{},"理解 Python 时抓住三个关键词：",[26,147212,147213,147216,147219],{},[29,147214,147215],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[29,147217,147218],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[29,147220,147221,147222,2204,147225,2204,147228,2204,147231,2204,147233,230],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[32,147223,147224],{},"os",[32,147226,147227],{},"sys",[32,147229,147230],{},"json",[32,147232,59621],{},[32,147234,147235],{},"datetime",[19,147237,147238],{},"Python 程序的运行链路：",[58,147240,147243],{"className":147241,"code":147242,"language":603,"meta":63},[601],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[32,147244,147242],{"__ignoreMap":63},[14,147246,147248],{"id":147247},"_12-python解释器","1.2 Python解释器",[19,147250,147251],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[58,147253,147255],{"className":101,"code":147254,"language":103,"meta":63,"style":63},"python --version\npython3 --version\npython\npython3\n",[32,147256,147257,147263,147269,147274],{"__ignoreMap":63},[67,147258,147259,147261],{"class":69,"line":70},[67,147260,62],{"class":110},[67,147262,28081],{"class":77},[67,147264,147265,147267],{"class":69,"line":191},[67,147266,102628],{"class":110},[67,147268,28081],{"class":77},[67,147270,147271],{"class":69,"line":202},[67,147272,147273],{"class":110},"python\n",[67,147275,147276],{"class":69,"line":641},[67,147277,147278],{"class":110},"python3\n",[19,147280,147281],{},"进入交互模式后，可以直接输入表达式：",[58,147283,147285],{"className":60,"code":147284,"language":62,"meta":63,"style":63},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[32,147286,147287,147298,147303,147317],{"__ignoreMap":63},[67,147288,147289,147292,147294,147296],{"class":69,"line":70},[67,147290,147291],{"class":84},">>>",[67,147293,906],{"class":77},[67,147295,47334],{"class":84},[67,147297,49491],{"class":77},[67,147299,147300],{"class":69,"line":191},[67,147301,147302],{"class":77},"3\n",[67,147304,147305,147307,147310,147312,147315],{"class":69,"line":202},[67,147306,147291],{"class":84},[67,147308,147309],{"class":77}," print",[67,147311,854],{"class":73},[67,147313,147314],{"class":114},"\"hello python\"",[67,147316,829],{"class":73},[67,147318,147319],{"class":69,"line":641},[67,147320,147321],{"class":73},"hello python\n",[19,147323,147324],{},"退出交互模式：",[58,147326,147328],{"className":60,"code":147327,"language":62,"meta":63,"style":63},"exit()\n",[32,147329,147330],{"__ignoreMap":63},[67,147331,147332,147335],{"class":69,"line":70},[67,147333,147334],{"class":77},"exit",[67,147336,3809],{"class":73},[19,147338,147339],{},"或使用快捷键：",[58,147341,147344],{"className":147342,"code":147343,"language":603,"meta":63},[601],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[32,147345,147343],{"__ignoreMap":63},[14,147347,147349],{"id":147348},"_13-安装python","1.3 安装Python",[391,147351,147353],{"id":147352},"_131-windows安装","1.3.1 Windows安装",[26,147355,147356,147363,147366,147372,147378],{},[29,147357,147358,147359],{},"打开 Python 官网：",[2230,147360,147361],{"href":147361,"rel":147362},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25657],[29,147364,147365],{},"下载 Windows Installer。",[29,147367,147368,147369,230],{},"安装时勾选 ",[32,147370,147371],{},"Add Python to PATH",[29,147373,147374,147375,230],{},"点击 ",[32,147376,147377],{},"Install Now",[29,147379,147380],{},"安装完成后打开命令提示符验证：",[58,147382,147384],{"className":101,"code":147383,"language":103,"meta":63,"style":63},"python --version\npip --version\n",[32,147385,147386,147392],{"__ignoreMap":63},[67,147387,147388,147390],{"class":69,"line":70},[67,147389,62],{"class":110},[67,147391,28081],{"class":77},[67,147393,147394,147396],{"class":69,"line":191},[67,147395,149],{"class":110},[67,147397,28081],{"class":77},[19,147399,147400,147401,147404],{},"如果提示 ",[32,147402,147403],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[391,147406,147408],{"id":147407},"_132-macos安装","1.3.2 macOS安装",[19,147410,147411],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[58,147413,147415],{"className":101,"code":147414,"language":103,"meta":63,"style":63},"brew install python\npython3 --version\npip3 --version\n",[32,147416,147417,147426,147432],{"__ignoreMap":63},[67,147418,147419,147422,147424],{"class":69,"line":70},[67,147420,147421],{"class":110},"brew",[67,147423,118],{"class":114},[67,147425,125756],{"class":114},[67,147427,147428,147430],{"class":69,"line":191},[67,147429,102628],{"class":110},[67,147431,28081],{"class":77},[67,147433,147434,147436],{"class":69,"line":202},[67,147435,121138],{"class":110},[67,147437,28081],{"class":77},[19,147439,147440],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[391,147442,147444],{"id":147443},"_133-linux安装","1.3.3 Linux安装",[19,147446,147447],{},"Ubuntu\u002FDebian：",[58,147449,147451],{"className":101,"code":147450,"language":103,"meta":63,"style":63},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[32,147452,147453,147461,147476,147482],{"__ignoreMap":63},[67,147454,147455,147457,147459],{"class":69,"line":70},[67,147456,111],{"class":110},[67,147458,118755],{"class":114},[67,147460,28030],{"class":114},[67,147462,147463,147465,147467,147469,147471,147473],{"class":69,"line":191},[67,147464,111],{"class":110},[67,147466,118755],{"class":114},[67,147468,118],{"class":114},[67,147470,124],{"class":114},[67,147472,127],{"class":114},[67,147474,147475],{"class":114}," python3-venv\n",[67,147477,147478,147480],{"class":69,"line":202},[67,147479,102628],{"class":110},[67,147481,28081],{"class":77},[67,147483,147484,147486],{"class":69,"line":641},[67,147485,121138],{"class":110},[67,147487,28081],{"class":77},[19,147489,147490],{},"Fedora：",[58,147492,147494],{"className":101,"code":147493,"language":103,"meta":63,"style":63},"sudo dnf install python3 python3-pip\n",[32,147495,147496],{"__ignoreMap":63},[67,147497,147498,147500,147502,147504,147506],{"class":69,"line":70},[67,147499,111],{"class":110},[67,147501,115],{"class":114},[67,147503,118],{"class":114},[67,147505,124],{"class":114},[67,147507,121203],{"class":114},[19,147509,147510,147511,147513],{},"Linux 上通常使用 ",[32,147512,102628],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147515,147517],{"id":147516},"_14-pip包管理器","1.4 pip包管理器",[19,147519,147520,147522],{},[32,147521,149],{}," 用来安装第三方库。",[58,147524,147526],{"className":101,"code":147525,"language":103,"meta":63,"style":63},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[32,147527,147528,147537,147546,147554,147560],{"__ignoreMap":63},[67,147529,147530,147532,147534],{"class":69,"line":70},[67,147531,149],{"class":110},[67,147533,118],{"class":114},[67,147535,147536],{"class":114}," requests\n",[67,147538,147539,147541,147544],{"class":69,"line":191},[67,147540,149],{"class":110},[67,147542,147543],{"class":114}," uninstall",[67,147545,147536],{"class":114},[67,147547,147548,147550,147552],{"class":69,"line":202},[67,147549,149],{"class":110},[67,147551,119012],{"class":114},[67,147553,147536],{"class":114},[67,147555,147556,147558],{"class":69,"line":641},[67,147557,149],{"class":110},[67,147559,120393],{"class":114},[67,147561,147562,147564],{"class":69,"line":655},[67,147563,149],{"class":110},[67,147565,147566],{"class":114}," freeze\n",[19,147568,147569],{},"国内网络较慢时可以临时使用镜像：",[58,147571,147573],{"className":101,"code":147572,"language":103,"meta":63,"style":63},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[32,147574,147575],{"__ignoreMap":63},[67,147576,147577,147579,147581,147584,147586],{"class":69,"line":70},[67,147578,149],{"class":110},[67,147580,118],{"class":114},[67,147582,147583],{"class":114}," requests",[67,147585,28216],{"class":77},[67,147587,121166],{"class":114},[19,147589,147590],{},"常见第三方库：",[399,147592,147593,147602],{},[402,147594,147595],{},[405,147596,147597,147600],{},[408,147598,147599],{},"库",[408,147601,414],{},[419,147603,147604,147612,147619,147627,147635,147643,147651],{},[405,147605,147606,147609],{},[424,147607,147608],{},"requests",[424,147610,147611],{},"网络请求",[405,147613,147614,147616],{},[424,147615,102383],{},[424,147617,147618],{},"数值计算",[405,147620,147621,147624],{},[424,147622,147623],{},"pandas",[424,147625,147626],{},"表格数据处理",[405,147628,147629,147632],{},[424,147630,147631],{},"matplotlib",[424,147633,147634],{},"绘图",[405,147636,147637,147640],{},[424,147638,147639],{},"pyecharts",[424,147641,147642],{},"ECharts 图表",[405,147644,147645,147648],{},[424,147646,147647],{},"flask",[424,147649,147650],{},"Web 后端",[405,147652,147653,147656],{},[424,147654,147655],{},"pytest",[424,147657,147658],{},"自动化测试",[14,147660,147662],{"id":147661},"_15-虚拟环境","1.5 虚拟环境",[19,147664,147665,147666,147669],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[32,147667,147668],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147671,147672],{},"创建虚拟环境：",[58,147674,147676],{"className":101,"code":147675,"language":103,"meta":63,"style":63},"python -m venv .venv\n",[32,147677,147678],{"__ignoreMap":63},[67,147679,147680,147682,147684,147686],{"class":69,"line":70},[67,147681,62],{"class":110},[67,147683,102631],{"class":77},[67,147685,102634],{"class":114},[67,147687,102637],{"class":114},[19,147689,147690],{},"Windows 激活：",[58,147692,147694],{"className":101,"code":147693,"language":103,"meta":63,"style":63},".venv\\Scripts\\activate\n",[32,147695,147696],{"__ignoreMap":63},[67,147697,147698],{"class":69,"line":70},[67,147699,147693],{"class":110},[19,147701,147702],{},"macOS\u002FLinux 激活：",[58,147704,147706],{"className":101,"code":147705,"language":103,"meta":63,"style":63},"source .venv\u002Fbin\u002Factivate\n",[32,147707,147708],{"__ignoreMap":63},[67,147709,147710,147712],{"class":69,"line":70},[67,147711,102642],{"class":77},[67,147713,102645],{"class":114},[19,147715,147716],{},"退出虚拟环境：",[58,147718,147720],{"className":101,"code":147719,"language":103,"meta":63,"style":63},"deactivate\n",[32,147721,147722],{"__ignoreMap":63},[67,147723,147724],{"class":69,"line":70},[67,147725,147719],{"class":110},[19,147727,147728],{},"保存依赖：",[58,147730,147732],{"className":101,"code":147731,"language":103,"meta":63,"style":63},"pip freeze > requirements.txt\n",[32,147733,147734],{"__ignoreMap":63},[67,147735,147736,147738,147741,147743],{"class":69,"line":70},[67,147737,149],{"class":110},[67,147739,147740],{"class":114}," freeze",[67,147742,28010],{"class":84},[67,147744,147745],{"class":114}," requirements.txt\n",[19,147747,147748],{},"安装依赖：",[58,147750,147752],{"className":101,"code":147751,"language":103,"meta":63,"style":63},"pip install -r requirements.txt\n",[32,147753,147754],{"__ignoreMap":63},[67,147755,147756,147758,147760,147762],{"class":69,"line":70},[67,147757,149],{"class":110},[67,147759,118],{"class":114},[67,147761,121077],{"class":77},[67,147763,147745],{"class":114},[14,147765,147767],{"id":147766},"_16-开发工具","1.6 开发工具",[391,147769,147771],{"id":147770},"_161-pycharm","1.6.1 PyCharm",[19,147773,147774],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147776,123500],{},[26,147778,147779,147782,147785,147791,147794],{},[29,147780,147781],{},"New Project：创建项目。",[29,147783,147784],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[29,147786,147787,147788,127421],{},"New Python File：创建 ",[32,147789,147790],{},".py",[29,147792,147793],{},"Run：运行当前文件。",[29,147795,147796],{},"Debug：断点调试。",[391,147798,147800],{"id":147799},"_162-vs-code","1.6.2 VS Code",[19,147802,147803],{},"VS Code 轻量，适合后续多语言开发。",[19,147805,147806],{},"建议安装插件：",[26,147808,147809,147812,147815],{},[29,147810,147811],{},"Python。",[29,147813,147814],{},"Pylance。",[29,147816,147817],{},"Jupyter。",[19,147819,147820],{},"选择解释器：",[58,147822,147825],{"className":147823,"code":147824,"language":603,"meta":63},[601],"Ctrl + Shift + P -> Python: Select Interpreter\n",[32,147826,147824],{"__ignoreMap":63},[14,147828,147830],{"id":147829},"_17-第一个python程序","1.7 第一个Python程序",[19,147832,147833,147834,26410],{},"创建文件 ",[32,147835,147836],{},"hello.py",[58,147838,147840],{"className":60,"code":147839,"language":62,"meta":63,"style":63},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[32,147841,147842,147853],{"__ignoreMap":63},[67,147843,147844,147846,147848,147851],{"class":69,"line":70},[67,147845,1626],{"class":77},[67,147847,854],{"class":73},[67,147849,147850],{"class":114},"\"Hello World\"",[67,147852,829],{"class":73},[67,147854,147855,147857,147859,147862],{"class":69,"line":191},[67,147856,1626],{"class":77},[67,147858,854],{"class":73},[67,147860,147861],{"class":114},"\"你好，Python\"",[67,147863,829],{"class":73},[19,147865,147866],{},"在终端运行：",[58,147868,147870],{"className":101,"code":147869,"language":103,"meta":63,"style":63},"python hello.py\n",[32,147871,147872],{"__ignoreMap":63},[67,147873,147874,147876],{"class":69,"line":70},[67,147875,62],{"class":110},[67,147877,147878],{"class":114}," hello.py\n",[19,147880,147881],{},"或：",[58,147883,147885],{"className":101,"code":147884,"language":103,"meta":63,"style":63},"python3 hello.py\n",[32,147886,147887],{"__ignoreMap":63},[67,147888,147889,147891],{"class":69,"line":70},[67,147890,102628],{"class":110},[67,147892,147878],{"class":114},[19,147894,147895],{},"输出：",[58,147897,147900],{"className":147898,"code":147899,"language":603,"meta":63},[601],"Hello World\n你好，Python\n",[32,147901,147899],{"__ignoreMap":63},[14,147903,147905],{"id":147904},"_18-print函数","1.8 print函数",[19,147907,147908,147911],{},[32,147909,147910],{},"print()"," 用来输出内容。",[58,147913,147915],{"className":60,"code":147914,"language":62,"meta":63,"style":63},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[32,147916,147917,147927,147937,147947],{"__ignoreMap":63},[67,147918,147919,147921,147923,147925],{"class":69,"line":70},[67,147920,1626],{"class":77},[67,147922,854],{"class":73},[67,147924,7661],{"class":114},[67,147926,829],{"class":73},[67,147928,147929,147931,147933,147935],{"class":69,"line":191},[67,147930,1626],{"class":77},[67,147932,854],{"class":73},[67,147934,2302],{"class":77},[67,147936,829],{"class":73},[67,147938,147939,147941,147943,147945],{"class":69,"line":202},[67,147940,1626],{"class":77},[67,147942,854],{"class":73},[67,147944,2049],{"class":77},[67,147946,829],{"class":73},[67,147948,147949,147951,147953,147956,147958,147960],{"class":69,"line":641},[67,147950,1626],{"class":77},[67,147952,854],{"class":73},[67,147954,147955],{"class":114},"\"年龄:\"",[67,147957,1868],{"class":73},[67,147959,2639],{"class":77},[67,147961,829],{"class":73},[19,147963,147964],{},"多个内容用逗号隔开，默认中间加空格：",[58,147966,147968],{"className":60,"code":147967,"language":62,"meta":63,"style":63},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[32,147969,147970,147980,147990],{"__ignoreMap":63},[67,147971,147972,147975,147977],{"class":69,"line":70},[67,147973,147974],{"class":73},"name ",[67,147976,85],{"class":84},[67,147978,147979],{"class":114}," \"张三\"\n",[67,147981,147982,147985,147987],{"class":69,"line":191},[67,147983,147984],{"class":73},"age ",[67,147986,85],{"class":84},[67,147988,147989],{"class":77}," 18\n",[67,147991,147992,147994,147996,147999,148002,148004],{"class":69,"line":202},[67,147993,1626],{"class":77},[67,147995,854],{"class":73},[67,147997,147998],{"class":114},"\"姓名:\"",[67,148000,148001],{"class":73},", name, ",[67,148003,147955],{"class":114},[67,148005,148006],{"class":73},", age)\n",[19,148008,148009],{},"修改分隔符：",[58,148011,148013],{"className":60,"code":148012,"language":62,"meta":63,"style":63},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[32,148014,148015],{"__ignoreMap":63},[67,148016,148017,148019,148021,148024,148026,148028,148030,148032,148034,148037,148039,148041],{"class":69,"line":70},[67,148018,1626],{"class":77},[67,148020,854],{"class":73},[67,148022,148023],{"class":114},"\"2024\"",[67,148025,1868],{"class":73},[67,148027,56077],{"class":114},[67,148029,1868],{"class":73},[67,148031,56077],{"class":114},[67,148033,1868],{"class":73},[67,148035,148036],{"class":7033},"sep",[67,148038,85],{"class":84},[67,148040,34252],{"class":114},[67,148042,829],{"class":73},[19,148044,148045],{},"修改结尾符：",[58,148047,148049],{"className":60,"code":148048,"language":62,"meta":63,"style":63},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[32,148050,148051,148069],{"__ignoreMap":63},[67,148052,148053,148055,148057,148059,148061,148063,148065,148067],{"class":69,"line":70},[67,148054,1626],{"class":77},[67,148056,854],{"class":73},[67,148058,7661],{"class":114},[67,148060,1868],{"class":73},[67,148062,47569],{"class":7033},[67,148064,85],{"class":84},[67,148066,6179],{"class":114},[67,148068,829],{"class":73},[67,148070,148071,148073,148075,148078],{"class":69,"line":191},[67,148072,1626],{"class":77},[67,148074,854],{"class":73},[67,148076,148077],{"class":114},"\"python\"",[67,148079,829],{"class":73},[14,148081,148083],{"id":148082},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148085,148086],{},"交互运行适合临时验证：",[58,148088,148090],{"className":60,"code":148089,"language":62,"meta":63,"style":63},">>> 10 * 3\n30\n",[32,148091,148092,148102],{"__ignoreMap":63},[67,148093,148094,148096,148098,148100],{"class":69,"line":70},[67,148095,147291],{"class":84},[67,148097,3871],{"class":77},[67,148099,986],{"class":84},[67,148101,121474],{"class":77},[67,148103,148104],{"class":69,"line":191},[67,148105,148106],{"class":77},"30\n",[19,148108,148109],{},"脚本运行适合保存程序：",[58,148111,148113],{"className":60,"code":148112,"language":62,"meta":63,"style":63},"price = 8\ncount = 5\nprint(price * count)\n",[32,148114,148115,148125,148134],{"__ignoreMap":63},[67,148116,148117,148120,148122],{"class":69,"line":70},[67,148118,148119],{"class":73},"price ",[67,148121,85],{"class":84},[67,148123,148124],{"class":77}," 8\n",[67,148126,148127,148130,148132],{"class":69,"line":191},[67,148128,148129],{"class":73},"count ",[67,148131,85],{"class":84},[67,148133,56188],{"class":77},[67,148135,148136,148138,148141,148143],{"class":69,"line":202},[67,148137,1626],{"class":77},[67,148139,148140],{"class":73},"(price ",[67,148142,965],{"class":84},[67,148144,148145],{"class":73}," count)\n",[19,148147,148148],{},"实际学习中推荐：",[26,148150,148151,148154,148159],{},[29,148152,148153],{},"临时试一个语法，用交互模式。",[29,148155,148156,148157,127421],{},"写完整练习，用 ",[32,148158,147790],{},[29,148160,148161],{},"写项目，用独立目录和虚拟环境。",[14,148163,148165],{"id":148164},"_110-常见错误","1.10 常见错误",[391,148167,148169],{"id":148168},"_1101-命令找不到","1.10.1 命令找不到",[58,148171,148174],{"className":148172,"code":148173,"language":603,"meta":63},[601],"python: command not found\n",[32,148175,148173],{"__ignoreMap":63},[19,148177,148178],{},"原因：",[26,148180,148181,148184,148187],{},[29,148182,148183],{},"没安装 Python。",[29,148185,148186],{},"PATH 没配置。",[29,148188,148189,148190,230],{},"Linux\u002FmacOS 应该使用 ",[32,148191,102628],{},[391,148193,148195],{"id":148194},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148197,148198],{},"不要把文件命名为：",[58,148200,148203],{"className":148201,"code":148202,"language":603,"meta":63},[601],"random.py\njson.py\ntime.py\nrequests.py\n",[32,148204,148202],{"__ignoreMap":63},[19,148206,148207],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[391,148209,148211],{"id":148210},"_1103-中文乱码","1.10.3 中文乱码",[19,148213,148214],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148216,148217],{},"如果读写文件出现乱码，要明确指定编码：",[58,148219,148221],{"className":60,"code":148220,"language":62,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[32,148222,148223,148257],{"__ignoreMap":63},[67,148224,148225,148227,148230,148232,148235,148237,148240,148242,148245,148247,148250,148252,148254],{"class":69,"line":70},[67,148226,109271],{"class":84},[67,148228,148229],{"class":77}," open",[67,148231,854],{"class":73},[67,148233,148234],{"class":114},"\"data.txt\"",[67,148236,1868],{"class":73},[67,148238,148239],{"class":114},"\"r\"",[67,148241,1868],{"class":73},[67,148243,148244],{"class":7033},"encoding",[67,148246,85],{"class":84},[67,148248,148249],{"class":114},"\"utf-8\"",[67,148251,15512],{"class":73},[67,148253,649],{"class":84},[67,148255,148256],{"class":73}," f:\n",[67,148258,148259,148262,148264],{"class":69,"line":191},[67,148260,148261],{"class":73},"    content ",[67,148263,85],{"class":84},[67,148265,148266],{"class":73}," f.read()\n",[14,148268,148270],{"id":148269},"_111-本章练习","1.11 本章练习",[26,148272,148273,148276,148282],{},[29,148274,148275],{},"安装 Python，并在终端输出版本号。",[29,148277,148278,148279,148281],{},"新建 ",[32,148280,147836],{},"，输出自己的姓名、年龄、学习目标。",[29,148283,106039,148284,148286],{},[32,148285,147910],{}," 输出下面格式：",[58,148288,148291],{"className":148289,"code":148290,"language":603,"meta":63},[601],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[32,148292,148290],{"__ignoreMap":63},[26,148294,148295],{"start":641},[29,148296,106039,148297,148299],{},[32,148298,148036],{}," 输出日期：",[58,148301,148304],{"className":148302,"code":148303,"language":603,"meta":63},[601],"2024-10-10\n",[32,148305,148303],{"__ignoreMap":63},[26,148307,148308],{"start":655},[29,148309,106039,148310,148312,148313,148315],{},[32,148311,47569],{}," 让两次 ",[32,148314,147910],{}," 输出在同一行。",[1903,148317,148318],{},"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":63,"searchDepth":191,"depth":191,"links":148320},[148321,148322,148323,148328,148329,148330,148334,148335,148336,148337,148342],{"id":147203,"depth":191,"text":147204},{"id":147247,"depth":191,"text":147248},{"id":147348,"depth":191,"text":147349,"children":148324},[148325,148326,148327],{"id":147352,"depth":202,"text":147353},{"id":147407,"depth":202,"text":147408},{"id":147443,"depth":202,"text":147444},{"id":147516,"depth":191,"text":147517},{"id":147661,"depth":191,"text":147662},{"id":147766,"depth":191,"text":147767,"children":148331},[148332,148333],{"id":147770,"depth":202,"text":147771},{"id":147799,"depth":202,"text":147800},{"id":147829,"depth":191,"text":147830},{"id":147904,"depth":191,"text":147905},{"id":148082,"depth":191,"text":148083},{"id":148164,"depth":191,"text":148165,"children":148338},[148339,148340,148341],{"id":148168,"depth":202,"text":148169},{"id":148194,"depth":202,"text":148195},{"id":148210,"depth":202,"text":148211},{"id":148269,"depth":191,"text":148270},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147195,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148349,"title":148350,"body":148351,"description":25173,"extension":1930,"meta":150755,"navigation":630,"path":150756,"seo":150757,"stem":150758,"__hash__":150759},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148352,"toc":150740},[148353,148356,148360,148363,148366,148383,148386,148428,148431,148435,148438,148441,148478,148481,148515,148518,148610,148614,148628,148631,148658,148661,148665,148768,148775,148778,148795,148799,148806,148995,148998,149071,149075,149078,149162,149165,149197,149201,149405,149408,149412,149418,149520,149523,149779,149783,149786,149789,149803,149805,149991,149995,150357,150363,150367,150370,150494,150497,150676,150679,150683,150716,150720,150737],[10,148354,148350],{"id":148355},"_10-json与pyecharts折线图",[14,148357,148359],{"id":148358},"_101-数据可视化","10.1 数据可视化",[19,148361,148362],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148364,148365],{},"常见图表：",[26,148367,148368,148371,148374,148377,148380],{},[29,148369,148370],{},"折线图：看趋势。",[29,148372,148373],{},"柱状图：看分类对比。",[29,148375,148376],{},"饼图：看占比。",[29,148378,148379],{},"地图：看地域分布。",[29,148381,148382],{},"散点图：看两个变量之间的关系。",[19,148384,148385],{},"Python 可视化常用库：",[399,148387,148388,148396],{},[402,148389,148390],{},[405,148391,148392,148394],{},[408,148393,147599],{},[408,148395,25536],{},[419,148397,148398,148405,148413,148420],{},[405,148399,148400,148402],{},[424,148401,147631],{},[424,148403,148404],{},"基础、经典、可定制",[405,148406,148407,148410],{},[424,148408,148409],{},"seaborn",[424,148411,148412],{},"统计图表更美观",[405,148414,148415,148417],{},[424,148416,147639],{},[424,148418,148419],{},"生成交互式网页图表",[405,148421,148422,148425],{},[424,148423,148424],{},"plotly",[424,148426,148427],{},"交互图表能力强",[19,148429,148430],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148432,148434],{"id":148433},"_102-json回顾","10.2 JSON回顾",[19,148436,148437],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148439,148440],{},"Python 字典：",[58,148442,148444],{"className":60,"code":148443,"language":62,"meta":63,"style":63},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[32,148445,148446,148454,148465,148474],{"__ignoreMap":63},[67,148447,148448,148450,148452],{"class":69,"line":70},[67,148449,103364],{"class":73},[67,148451,85],{"class":84},[67,148453,17369],{"class":73},[67,148455,148456,148459,148461,148463],{"class":69,"line":191},[67,148457,148458],{"class":114},"    \"name\"",[67,148460,53203],{"class":73},[67,148462,71029],{"class":114},[67,148464,33238],{"class":73},[67,148466,148467,148470,148472],{"class":69,"line":202},[67,148468,148469],{"class":114},"    \"value\"",[67,148471,53203],{"class":73},[67,148473,99215],{"class":77},[67,148475,148476],{"class":69,"line":641},[67,148477,3419],{"class":73},[19,148479,148480],{},"JSON 字符串：",[58,148482,148485],{"className":148483,"code":148484,"language":147230,"meta":63,"style":63},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[32,148486,148487,148491,148502,148511],{"__ignoreMap":63},[67,148488,148489],{"class":69,"line":70},[67,148490,3400],{"class":73},[67,148492,148493,148496,148498,148500],{"class":69,"line":191},[67,148494,148495],{"class":77},"  \"name\"",[67,148497,53203],{"class":73},[67,148499,71029],{"class":114},[67,148501,33238],{"class":73},[67,148503,148504,148507,148509],{"class":69,"line":202},[67,148505,148506],{"class":77},"  \"value\"",[67,148508,53203],{"class":73},[67,148510,99215],{"class":77},[67,148512,148513],{"class":69,"line":641},[67,148514,3419],{"class":73},[19,148516,148517],{},"Python 与 JSON 的转换：",[58,148519,148521],{"className":60,"code":148520,"language":62,"meta":63,"style":63},"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",[32,148522,148523,148530,148534,148559,148563,148582,148589,148593,148603],{"__ignoreMap":63},[67,148524,148525,148527],{"class":69,"line":70},[67,148526,622],{"class":84},[67,148528,148529],{"class":73}," json\n",[67,148531,148532],{"class":69,"line":191},[67,148533,631],{"emptyLinePlaceholder":630},[67,148535,148536,148538,148540,148542,148544,148546,148548,148550,148553,148555,148557],{"class":69,"line":202},[67,148537,103364],{"class":73},[67,148539,85],{"class":84},[67,148541,6267],{"class":73},[67,148543,64439],{"class":114},[67,148545,53203],{"class":73},[67,148547,71029],{"class":114},[67,148549,1868],{"class":73},[67,148551,148552],{"class":114},"\"value\"",[67,148554,53203],{"class":73},[67,148556,2302],{"class":77},[67,148558,3419],{"class":73},[67,148560,148561],{"class":69,"line":641},[67,148562,631],{"emptyLinePlaceholder":630},[67,148564,148565,148568,148570,148573,148576,148578,148580],{"class":69,"line":655},[67,148566,148567],{"class":73},"json_text ",[67,148569,85],{"class":84},[67,148571,148572],{"class":73}," json.dumps(data, ",[67,148574,148575],{"class":7033},"ensure_ascii",[67,148577,85],{"class":84},[67,148579,35756],{"class":77},[67,148581,829],{"class":73},[67,148583,148584,148586],{"class":69,"line":660},[67,148585,1626],{"class":77},[67,148587,148588],{"class":73},"(json_text)\n",[67,148590,148591],{"class":69,"line":665},[67,148592,631],{"emptyLinePlaceholder":630},[67,148594,148595,148598,148600],{"class":69,"line":677},[67,148596,148597],{"class":73},"new_data ",[67,148599,85],{"class":84},[67,148601,148602],{"class":73}," json.loads(json_text)\n",[67,148604,148605,148607],{"class":69,"line":683},[67,148606,1626],{"class":77},[67,148608,148609],{"class":73},"(new_data)\n",[14,148611,148613],{"id":148612},"_103-安装pyecharts","10.3 安装pyecharts",[58,148615,148617],{"className":101,"code":148616,"language":103,"meta":63,"style":63},"pip install pyecharts\n",[32,148618,148619],{"__ignoreMap":63},[67,148620,148621,148623,148625],{"class":69,"line":70},[67,148622,149],{"class":110},[67,148624,118],{"class":114},[67,148626,148627],{"class":114}," pyecharts\n",[19,148629,148630],{},"验证：",[58,148632,148634],{"className":60,"code":148633,"language":62,"meta":63,"style":63},"import pyecharts\n\nprint(pyecharts.__version__)\n",[32,148635,148636,148642,148646],{"__ignoreMap":63},[67,148637,148638,148640],{"class":69,"line":70},[67,148639,622],{"class":84},[67,148641,148627],{"class":73},[67,148643,148644],{"class":69,"line":191},[67,148645,631],{"emptyLinePlaceholder":630},[67,148647,148648,148650,148653,148656],{"class":69,"line":202},[67,148649,1626],{"class":77},[67,148651,148652],{"class":73},"(pyecharts.",[67,148654,148655],{"class":77},"__version__",[67,148657,829],{"class":73},[19,148659,148660],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148662,148664],{"id":148663},"_104-第一个折线图","10.4 第一个折线图",[58,148666,148668],{"className":60,"code":148667,"language":62,"meta":63,"style":63},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[32,148669,148670,148682,148686,148696,148726,148758],{"__ignoreMap":63},[67,148671,148672,148674,148677,148679],{"class":69,"line":70},[67,148673,32515],{"class":84},[67,148675,148676],{"class":73}," pyecharts.charts ",[67,148678,622],{"class":84},[67,148680,148681],{"class":73}," Line\n",[67,148683,148684],{"class":69,"line":191},[67,148685,631],{"emptyLinePlaceholder":630},[67,148687,148688,148691,148693],{"class":69,"line":202},[67,148689,148690],{"class":73},"line ",[67,148692,85],{"class":84},[67,148694,148695],{"class":73}," Line()\n",[67,148697,148698,148701,148704,148706,148709,148711,148714,148716,148719,148721,148724],{"class":69,"line":641},[67,148699,148700],{"class":73},"line.add_xaxis([",[67,148702,148703],{"class":114},"\"周一\"",[67,148705,1868],{"class":73},[67,148707,148708],{"class":114},"\"周二\"",[67,148710,1868],{"class":73},[67,148712,148713],{"class":114},"\"周三\"",[67,148715,1868],{"class":73},[67,148717,148718],{"class":114},"\"周四\"",[67,148720,1868],{"class":73},[67,148722,148723],{"class":114},"\"周五\"",[67,148725,6476],{"class":73},[67,148727,148728,148731,148734,148736,148738,148740,148742,148744,148746,148748,148751,148753,148756],{"class":69,"line":655},[67,148729,148730],{"class":73},"line.add_yaxis(",[67,148732,148733],{"class":114},"\"销售额\"",[67,148735,79278],{"class":73},[67,148737,2302],{"class":77},[67,148739,1868],{"class":73},[67,148741,2806],{"class":77},[67,148743,1868],{"class":73},[67,148745,2851],{"class":77},[67,148747,1868],{"class":73},[67,148749,148750],{"class":77},"150",[67,148752,1868],{"class":73},[67,148754,148755],{"class":77},"180",[67,148757,6476],{"class":73},[67,148759,148760,148763,148766],{"class":69,"line":660},[67,148761,148762],{"class":73},"line.render(",[67,148764,148765],{"class":114},"\"line.html\"",[67,148767,829],{"class":73},[19,148769,148770,148771,148774],{},"运行后会生成 ",[32,148772,148773],{},"line.html","，用浏览器打开即可看到图表。",[19,148776,148777],{},"核心步骤：",[26,148779,148780,148783,148786,148789,148792],{},[29,148781,148782],{},"导入图表类。",[29,148784,148785],{},"创建图表对象。",[29,148787,148788],{},"添加 x 轴数据。",[29,148790,148791],{},"添加 y 轴数据。",[29,148793,148794],{},"渲染为 HTML。",[14,148796,148798],{"id":148797},"_105-全局配置","10.5 全局配置",[19,148800,148801,148802,148805],{},"常用配置在 ",[32,148803,148804],{},"pyecharts.options"," 中。",[58,148807,148809],{"className":60,"code":148808,"language":62,"meta":63,"style":63},"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",[32,148810,148811,148828,148838,148842,148850,148874,148902,148907,148926,148945,148963,148983,148987],{"__ignoreMap":63},[67,148812,148813,148815,148818,148820,148823,148825],{"class":69,"line":70},[67,148814,32515],{"class":84},[67,148816,148817],{"class":73}," pyecharts ",[67,148819,622],{"class":84},[67,148821,148822],{"class":73}," options ",[67,148824,649],{"class":84},[67,148826,148827],{"class":73}," opts\n",[67,148829,148830,148832,148834,148836],{"class":69,"line":191},[67,148831,32515],{"class":84},[67,148833,148676],{"class":73},[67,148835,622],{"class":84},[67,148837,148681],{"class":73},[67,148839,148840],{"class":69,"line":202},[67,148841,631],{"emptyLinePlaceholder":630},[67,148843,148844,148846,148848],{"class":69,"line":641},[67,148845,148690],{"class":73},[67,148847,85],{"class":84},[67,148849,148695],{"class":73},[67,148851,148852,148854,148856,148858,148860,148862,148864,148866,148868,148870,148872],{"class":69,"line":655},[67,148853,148700],{"class":73},[67,148855,148703],{"class":114},[67,148857,1868],{"class":73},[67,148859,148708],{"class":114},[67,148861,1868],{"class":73},[67,148863,148713],{"class":114},[67,148865,1868],{"class":73},[67,148867,148718],{"class":114},[67,148869,1868],{"class":73},[67,148871,148723],{"class":114},[67,148873,6476],{"class":73},[67,148875,148876,148878,148880,148882,148884,148886,148888,148890,148892,148894,148896,148898,148900],{"class":69,"line":660},[67,148877,148730],{"class":73},[67,148879,148733],{"class":114},[67,148881,79278],{"class":73},[67,148883,2302],{"class":77},[67,148885,1868],{"class":73},[67,148887,2806],{"class":77},[67,148889,1868],{"class":73},[67,148891,2851],{"class":77},[67,148893,1868],{"class":73},[67,148895,148750],{"class":77},[67,148897,1868],{"class":73},[67,148899,148755],{"class":77},[67,148901,6476],{"class":73},[67,148903,148904],{"class":69,"line":665},[67,148905,148906],{"class":73},"line.set_global_opts(\n",[67,148908,148909,148912,148914,148917,148919,148921,148924],{"class":69,"line":677},[67,148910,148911],{"class":7033},"    title_opts",[67,148913,85],{"class":84},[67,148915,148916],{"class":73},"opts.TitleOpts(",[67,148918,53173],{"class":7033},[67,148920,85],{"class":84},[67,148922,148923],{"class":114},"\"一周销售额\"",[67,148925,39815],{"class":73},[67,148927,148928,148931,148933,148936,148938,148940,148943],{"class":69,"line":683},[67,148929,148930],{"class":7033},"    xaxis_opts",[67,148932,85],{"class":84},[67,148934,148935],{"class":73},"opts.AxisOpts(",[67,148937,81570],{"class":7033},[67,148939,85],{"class":84},[67,148941,148942],{"class":114},"\"日期\"",[67,148944,39815],{"class":73},[67,148946,148947,148950,148952,148954,148956,148958,148961],{"class":69,"line":689},[67,148948,148949],{"class":7033},"    yaxis_opts",[67,148951,85],{"class":84},[67,148953,148935],{"class":73},[67,148955,81570],{"class":7033},[67,148957,85],{"class":84},[67,148959,148960],{"class":114},"\"金额\"",[67,148962,39815],{"class":73},[67,148964,148965,148968,148970,148973,148976,148978,148981],{"class":69,"line":694},[67,148966,148967],{"class":7033},"    tooltip_opts",[67,148969,85],{"class":84},[67,148971,148972],{"class":73},"opts.TooltipOpts(",[67,148974,148975],{"class":7033},"trigger",[67,148977,85],{"class":84},[67,148979,148980],{"class":114},"\"axis\"",[67,148982,39815],{"class":73},[67,148984,148985],{"class":69,"line":700},[67,148986,829],{"class":73},[67,148988,148989,148991,148993],{"class":69,"line":706},[67,148990,148762],{"class":73},[67,148992,148765],{"class":114},[67,148994,829],{"class":73},[19,148996,148997],{},"常见全局配置：",[399,148999,149000,149009],{},[402,149001,149002],{},[405,149003,149004,149007],{},[408,149005,149006],{},"配置",[408,149008,414],{},[419,149010,149011,149021,149031,149041,149051,149061],{},[405,149012,149013,149018],{},[424,149014,149015],{},[32,149016,149017],{},"TitleOpts",[424,149019,149020],{},"标题",[405,149022,149023,149028],{},[424,149024,149025],{},[32,149026,149027],{},"LegendOpts",[424,149029,149030],{},"图例",[405,149032,149033,149038],{},[424,149034,149035],{},[32,149036,149037],{},"TooltipOpts",[424,149039,149040],{},"提示框",[405,149042,149043,149048],{},[424,149044,149045],{},[32,149046,149047],{},"AxisOpts",[424,149049,149050],{},"坐标轴",[405,149052,149053,149058],{},[424,149054,149055],{},[32,149056,149057],{},"VisualMapOpts",[424,149059,149060],{},"视觉映射",[405,149062,149063,149068],{},[424,149064,149065],{},[32,149066,149067],{},"DataZoomOpts",[424,149069,149070],{},"区域缩放",[14,149072,149074],{"id":149073},"_106-系列配置","10.6 系列配置",[19,149076,149077],{},"系列配置作用于某一组数据。",[58,149079,149081],{"className":60,"code":149080,"language":62,"meta":63,"style":63},"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",[32,149082,149083,149088,149099,149128,149139,149158],{"__ignoreMap":63},[67,149084,149085],{"class":69,"line":70},[67,149086,149087],{"class":73},"line.add_yaxis(\n",[67,149089,149090,149093,149095,149097],{"class":69,"line":191},[67,149091,149092],{"class":7033},"    series_name",[67,149094,85],{"class":84},[67,149096,148733],{"class":114},[67,149098,33238],{"class":73},[67,149100,149101,149104,149106,149108,149110,149112,149114,149116,149118,149120,149122,149124,149126],{"class":69,"line":202},[67,149102,149103],{"class":7033},"    y_axis",[67,149105,85],{"class":84},[67,149107,2879],{"class":73},[67,149109,2302],{"class":77},[67,149111,1868],{"class":73},[67,149113,2806],{"class":77},[67,149115,1868],{"class":73},[67,149117,2851],{"class":77},[67,149119,1868],{"class":73},[67,149121,148750],{"class":77},[67,149123,1868],{"class":73},[67,149125,148755],{"class":77},[67,149127,89595],{"class":73},[67,149129,149130,149133,149135,149137],{"class":69,"line":641},[67,149131,149132],{"class":7033},"    is_smooth",[67,149134,85],{"class":84},[67,149136,33248],{"class":77},[67,149138,33238],{"class":73},[67,149140,149141,149144,149146,149149,149152,149154,149156],{"class":69,"line":655},[67,149142,149143],{"class":7033},"    label_opts",[67,149145,85],{"class":84},[67,149147,149148],{"class":73},"opts.LabelOpts(",[67,149150,149151],{"class":7033},"is_show",[67,149153,85],{"class":84},[67,149155,33248],{"class":77},[67,149157,39815],{"class":73},[67,149159,149160],{"class":69,"line":660},[67,149161,829],{"class":73},[19,149163,149164],{},"常用参数：",[26,149166,149167,149173,149179,149185,149191],{},[29,149168,149169,149172],{},[32,149170,149171],{},"series_name","：系列名称。",[29,149174,149175,149178],{},[32,149176,149177],{},"y_axis","：y 轴数据。",[29,149180,149181,149184],{},[32,149182,149183],{},"is_smooth","：是否平滑曲线。",[29,149186,149187,149190],{},[32,149188,149189],{},"label_opts","：标签配置。",[29,149192,149193,149196],{},[32,149194,149195],{},"symbol_size","：标记点大小。",[14,149198,149200],{"id":149199},"_107-多条折线","10.7 多条折线",[58,149202,149204],{"className":60,"code":149203,"language":62,"meta":63,"style":63},"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",[32,149205,149206,149220,149230,149234,149263,149267,149275,149280,149318,149355,149359,149376,149392,149396],{"__ignoreMap":63},[67,149207,149208,149210,149212,149214,149216,149218],{"class":69,"line":70},[67,149209,32515],{"class":84},[67,149211,148817],{"class":73},[67,149213,622],{"class":84},[67,149215,148822],{"class":73},[67,149217,649],{"class":84},[67,149219,148827],{"class":73},[67,149221,149222,149224,149226,149228],{"class":69,"line":191},[67,149223,32515],{"class":84},[67,149225,148676],{"class":73},[67,149227,622],{"class":84},[67,149229,148681],{"class":73},[67,149231,149232],{"class":69,"line":202},[67,149233,631],{"emptyLinePlaceholder":630},[67,149235,149236,149239,149241,149243,149245,149247,149249,149251,149253,149255,149257,149259,149261],{"class":69,"line":641},[67,149237,149238],{"class":73},"dates ",[67,149240,85],{"class":84},[67,149242,53990],{"class":73},[67,149244,148703],{"class":114},[67,149246,1868],{"class":73},[67,149248,148708],{"class":114},[67,149250,1868],{"class":73},[67,149252,148713],{"class":114},[67,149254,1868],{"class":73},[67,149256,148718],{"class":114},[67,149258,1868],{"class":73},[67,149260,148723],{"class":114},[67,149262,35015],{"class":73},[67,149264,149265],{"class":69,"line":655},[67,149266,631],{"emptyLinePlaceholder":630},[67,149268,149269,149271,149273],{"class":69,"line":660},[67,149270,148690],{"class":73},[67,149272,85],{"class":84},[67,149274,148695],{"class":73},[67,149276,149277],{"class":69,"line":665},[67,149278,149279],{"class":73},"line.add_xaxis(dates)\n",[67,149281,149282,149284,149287,149289,149291,149293,149296,149298,149300,149302,149304,149306,149308,149310,149312,149314,149316],{"class":69,"line":677},[67,149283,148730],{"class":73},[67,149285,149286],{"class":114},"\"线上销售\"",[67,149288,79278],{"class":73},[67,149290,2302],{"class":77},[67,149292,1868],{"class":73},[67,149294,149295],{"class":77},"130",[67,149297,1868],{"class":73},[67,149299,2806],{"class":77},[67,149301,1868],{"class":73},[67,149303,22844],{"class":77},[67,149305,1868],{"class":73},[67,149307,3565],{"class":77},[67,149309,113640],{"class":73},[67,149311,149183],{"class":7033},[67,149313,85],{"class":84},[67,149315,33248],{"class":77},[67,149317,829],{"class":73},[67,149319,149320,149322,149325,149327,149329,149331,149333,149335,149337,149339,149341,149343,149345,149347,149349,149351,149353],{"class":69,"line":683},[67,149321,148730],{"class":73},[67,149323,149324],{"class":114},"\"线下销售\"",[67,149326,79278],{"class":73},[67,149328,2601],{"class":77},[67,149330,1868],{"class":73},[67,149332,2851],{"class":77},[67,149334,1868],{"class":73},[67,149336,2302],{"class":77},[67,149338,1868],{"class":73},[67,149340,2806],{"class":77},[67,149342,1868],{"class":73},[67,149344,148750],{"class":77},[67,149346,113640],{"class":73},[67,149348,149183],{"class":7033},[67,149350,85],{"class":84},[67,149352,33248],{"class":77},[67,149354,829],{"class":73},[67,149356,149357],{"class":69,"line":689},[67,149358,148906],{"class":73},[67,149360,149361,149363,149365,149367,149369,149371,149374],{"class":69,"line":694},[67,149362,148911],{"class":7033},[67,149364,85],{"class":84},[67,149366,148916],{"class":73},[67,149368,53173],{"class":7033},[67,149370,85],{"class":84},[67,149372,149373],{"class":114},"\"线上线下销售趋势\"",[67,149375,39815],{"class":73},[67,149377,149378,149380,149382,149384,149386,149388,149390],{"class":69,"line":700},[67,149379,148967],{"class":7033},[67,149381,85],{"class":84},[67,149383,148972],{"class":73},[67,149385,148975],{"class":7033},[67,149387,85],{"class":84},[67,149389,148980],{"class":114},[67,149391,39815],{"class":73},[67,149393,149394],{"class":69,"line":706},[67,149395,829],{"class":73},[67,149397,149398,149400,149403],{"class":69,"line":712},[67,149399,148762],{"class":73},[67,149401,149402],{"class":114},"\"sales.html\"",[67,149404,829],{"class":73},[19,149406,149407],{},"多条折线适合比较不同指标或不同地区。",[14,149409,149411],{"id":149410},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149413,149414,149415,26410],{},"假设 ",[32,149416,149417],{},"sales.json",[58,149419,149421],{"className":148483,"code":149420,"language":147230,"meta":63,"style":63},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[32,149422,149423,149428,149460,149488,149516],{"__ignoreMap":63},[67,149424,149425],{"class":69,"line":70},[67,149426,149427],{"class":73},"[\n",[67,149429,149430,149433,149436,149438,149440,149442,149445,149447,149449,149451,149454,149456,149458],{"class":69,"line":191},[67,149431,149432],{"class":73},"  {",[67,149434,149435],{"class":77},"\"date\"",[67,149437,53203],{"class":73},[67,149439,148703],{"class":114},[67,149441,1868],{"class":73},[67,149443,149444],{"class":77},"\"online\"",[67,149446,53203],{"class":73},[67,149448,2302],{"class":77},[67,149450,1868],{"class":73},[67,149452,149453],{"class":77},"\"offline\"",[67,149455,53203],{"class":73},[67,149457,2601],{"class":77},[67,149459,6749],{"class":73},[67,149461,149462,149464,149466,149468,149470,149472,149474,149476,149478,149480,149482,149484,149486],{"class":69,"line":202},[67,149463,149432],{"class":73},[67,149465,149435],{"class":77},[67,149467,53203],{"class":73},[67,149469,148708],{"class":114},[67,149471,1868],{"class":73},[67,149473,149444],{"class":77},[67,149475,53203],{"class":73},[67,149477,149295],{"class":77},[67,149479,1868],{"class":73},[67,149481,149453],{"class":77},[67,149483,53203],{"class":73},[67,149485,2851],{"class":77},[67,149487,6749],{"class":73},[67,149489,149490,149492,149494,149496,149498,149500,149502,149504,149506,149508,149510,149512,149514],{"class":69,"line":641},[67,149491,149432],{"class":73},[67,149493,149435],{"class":77},[67,149495,53203],{"class":73},[67,149497,148713],{"class":114},[67,149499,1868],{"class":73},[67,149501,149444],{"class":77},[67,149503,53203],{"class":73},[67,149505,2806],{"class":77},[67,149507,1868],{"class":73},[67,149509,149453],{"class":77},[67,149511,53203],{"class":73},[67,149513,2302],{"class":77},[67,149515,3419],{"class":73},[67,149517,149518],{"class":69,"line":655},[67,149519,35015],{"class":73},[19,149521,149522],{},"读取并绘图：",[58,149524,149526],{"className":60,"code":149525,"language":62,"meta":63,"style":63},"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",[32,149527,149528,149534,149548,149558,149562,149594,149607,149611,149619,149628,149637,149641,149653,149662,149671,149680,149684,149692,149696,149713,149730,149734,149751,149767,149771],{"__ignoreMap":63},[67,149529,149530,149532],{"class":69,"line":70},[67,149531,622],{"class":84},[67,149533,148529],{"class":73},[67,149535,149536,149538,149540,149542,149544,149546],{"class":69,"line":191},[67,149537,32515],{"class":84},[67,149539,148817],{"class":73},[67,149541,622],{"class":84},[67,149543,148822],{"class":73},[67,149545,649],{"class":84},[67,149547,148827],{"class":73},[67,149549,149550,149552,149554,149556],{"class":69,"line":202},[67,149551,32515],{"class":84},[67,149553,148676],{"class":73},[67,149555,622],{"class":84},[67,149557,148681],{"class":73},[67,149559,149560],{"class":69,"line":641},[67,149561,631],{"emptyLinePlaceholder":630},[67,149563,149564,149566,149568,149570,149573,149575,149577,149579,149581,149583,149585,149587,149589,149592],{"class":69,"line":655},[67,149565,109271],{"class":84},[67,149567,148229],{"class":77},[67,149569,854],{"class":73},[67,149571,149572],{"class":114},"\"sales.json\"",[67,149574,1868],{"class":73},[67,149576,148239],{"class":114},[67,149578,1868],{"class":73},[67,149580,148244],{"class":7033},[67,149582,85],{"class":84},[67,149584,148249],{"class":114},[67,149586,15512],{"class":73},[67,149588,649],{"class":84},[67,149590,149591],{"class":7033}," file",[67,149593,813],{"class":73},[67,149595,149596,149598,149600,149603,149605],{"class":69,"line":660},[67,149597,835],{"class":73},[67,149599,85],{"class":84},[67,149601,149602],{"class":73}," json.load(",[67,149604,47122],{"class":7033},[67,149606,829],{"class":73},[67,149608,149609],{"class":69,"line":665},[67,149610,631],{"emptyLinePlaceholder":630},[67,149612,149613,149615,149617],{"class":69,"line":677},[67,149614,149238],{"class":73},[67,149616,85],{"class":84},[67,149618,53603],{"class":73},[67,149620,149621,149624,149626],{"class":69,"line":683},[67,149622,149623],{"class":73},"online_sales ",[67,149625,85],{"class":84},[67,149627,53603],{"class":73},[67,149629,149630,149633,149635],{"class":69,"line":689},[67,149631,149632],{"class":73},"offline_sales ",[67,149634,85],{"class":84},[67,149636,53603],{"class":73},[67,149638,149639],{"class":69,"line":694},[67,149640,631],{"emptyLinePlaceholder":630},[67,149642,149643,149645,149648,149650],{"class":69,"line":700},[67,149644,1512],{"class":84},[67,149646,149647],{"class":73}," item ",[67,149649,941],{"class":84},[67,149651,149652],{"class":73}," data:\n",[67,149654,149655,149658,149660],{"class":69,"line":706},[67,149656,149657],{"class":73},"    dates.append(item[",[67,149659,149435],{"class":114},[67,149661,6476],{"class":73},[67,149663,149664,149667,149669],{"class":69,"line":712},[67,149665,149666],{"class":73},"    online_sales.append(item[",[67,149668,149444],{"class":114},[67,149670,6476],{"class":73},[67,149672,149673,149676,149678],{"class":69,"line":717},[67,149674,149675],{"class":73},"    offline_sales.append(item[",[67,149677,149453],{"class":114},[67,149679,6476],{"class":73},[67,149681,149682],{"class":69,"line":723},[67,149683,631],{"emptyLinePlaceholder":630},[67,149685,149686,149688,149690],{"class":69,"line":729},[67,149687,148690],{"class":73},[67,149689,85],{"class":84},[67,149691,148695],{"class":73},[67,149693,149694],{"class":69,"line":735},[67,149695,149279],{"class":73},[67,149697,149698,149700,149702,149705,149707,149709,149711],{"class":69,"line":741},[67,149699,148730],{"class":73},[67,149701,149286],{"class":114},[67,149703,149704],{"class":73},", online_sales, ",[67,149706,149183],{"class":7033},[67,149708,85],{"class":84},[67,149710,33248],{"class":77},[67,149712,829],{"class":73},[67,149714,149715,149717,149719,149722,149724,149726,149728],{"class":69,"line":747},[67,149716,148730],{"class":73},[67,149718,149324],{"class":114},[67,149720,149721],{"class":73},", offline_sales, ",[67,149723,149183],{"class":7033},[67,149725,85],{"class":84},[67,149727,33248],{"class":77},[67,149729,829],{"class":73},[67,149731,149732],{"class":69,"line":753},[67,149733,148906],{"class":73},[67,149735,149736,149738,149740,149742,149744,149746,149749],{"class":69,"line":758},[67,149737,148911],{"class":7033},[67,149739,85],{"class":84},[67,149741,148916],{"class":73},[67,149743,53173],{"class":7033},[67,149745,85],{"class":84},[67,149747,149748],{"class":114},"\"销售趋势\"",[67,149750,39815],{"class":73},[67,149752,149753,149755,149757,149759,149761,149763,149765],{"class":69,"line":764},[67,149754,148967],{"class":7033},[67,149756,85],{"class":84},[67,149758,148972],{"class":73},[67,149760,148975],{"class":7033},[67,149762,85],{"class":84},[67,149764,148980],{"class":114},[67,149766,39815],{"class":73},[67,149768,149769],{"class":69,"line":770},[67,149770,829],{"class":73},[67,149772,149773,149775,149777],{"class":69,"line":776},[67,149774,148762],{"class":73},[67,149776,149402],{"class":114},[67,149778,829],{"class":73},[14,149780,149782],{"id":149781},"_109-数据清洗","10.9 数据清洗",[19,149784,149785],{},"真实数据经常不整齐，需要清洗。",[19,149787,149788],{},"常见问题：",[26,149790,149791,149794,149797,149800],{},[29,149792,149793],{},"数字是字符串。",[29,149795,149796],{},"字段缺失。",[29,149798,149799],{},"空值。",[29,149801,149802],{},"日期格式不统一。",[19,149804,16932],{},[58,149806,149808],{"className":60,"code":149807,"language":62,"meta":63,"style":63},"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",[32,149809,149810,149819,149842,149862,149883,149887,149891,149899,149908,149912,149923,149937,149946,149951,149955,149963,149973,149977,149984],{"__ignoreMap":63},[67,149811,149812,149815,149817],{"class":69,"line":70},[67,149813,149814],{"class":73},"raw_data ",[67,149816,85],{"class":84},[67,149818,57208],{"class":73},[67,149820,149821,149824,149826,149828,149830,149832,149835,149837,149840],{"class":69,"line":191},[67,149822,149823],{"class":73},"    {",[67,149825,149435],{"class":114},[67,149827,53203],{"class":73},[67,149829,148703],{"class":114},[67,149831,1868],{"class":73},[67,149833,149834],{"class":114},"\"sales\"",[67,149836,53203],{"class":73},[67,149838,149839],{"class":114},"\"100\"",[67,149841,6749],{"class":73},[67,149843,149844,149846,149848,149850,149852,149854,149856,149858,149860],{"class":69,"line":202},[67,149845,149823],{"class":73},[67,149847,149435],{"class":114},[67,149849,53203],{"class":73},[67,149851,148708],{"class":114},[67,149853,1868],{"class":73},[67,149855,149834],{"class":114},[67,149857,53203],{"class":73},[67,149859,9468],{"class":114},[67,149861,6749],{"class":73},[67,149863,149864,149866,149868,149870,149872,149874,149876,149878,149881],{"class":69,"line":641},[67,149865,149823],{"class":73},[67,149867,149435],{"class":114},[67,149869,53203],{"class":73},[67,149871,148713],{"class":114},[67,149873,1868],{"class":73},[67,149875,149834],{"class":114},[67,149877,53203],{"class":73},[67,149879,149880],{"class":114},"\"120\"",[67,149882,6749],{"class":73},[67,149884,149885],{"class":69,"line":655},[67,149886,35015],{"class":73},[67,149888,149889],{"class":69,"line":660},[67,149890,631],{"emptyLinePlaceholder":630},[67,149892,149893,149895,149897],{"class":69,"line":665},[67,149894,149238],{"class":73},[67,149896,85],{"class":84},[67,149898,53603],{"class":73},[67,149900,149901,149904,149906],{"class":69,"line":677},[67,149902,149903],{"class":73},"sales ",[67,149905,85],{"class":84},[67,149907,53603],{"class":73},[67,149909,149910],{"class":69,"line":683},[67,149911,631],{"emptyLinePlaceholder":630},[67,149913,149914,149916,149918,149920],{"class":69,"line":689},[67,149915,1512],{"class":84},[67,149917,149647],{"class":73},[67,149919,941],{"class":84},[67,149921,149922],{"class":73}," raw_data:\n",[67,149924,149925,149928,149930,149933,149935],{"class":69,"line":694},[67,149926,149927],{"class":73},"    value ",[67,149929,85],{"class":84},[67,149931,149932],{"class":73}," item.get(",[67,149934,149834],{"class":114},[67,149936,829],{"class":73},[67,149938,149939,149941,149943],{"class":69,"line":700},[67,149940,897],{"class":84},[67,149942,40698],{"class":84},[67,149944,149945],{"class":73}," value:\n",[67,149947,149948],{"class":69,"line":706},[67,149949,149950],{"class":84},"        continue\n",[67,149952,149953],{"class":69,"line":712},[67,149954,631],{"emptyLinePlaceholder":630},[67,149956,149957,149959,149961],{"class":69,"line":717},[67,149958,149657],{"class":73},[67,149960,149435],{"class":114},[67,149962,6476],{"class":73},[67,149964,149965,149968,149970],{"class":69,"line":723},[67,149966,149967],{"class":73},"    sales.append(",[67,149969,2006],{"class":77},[67,149971,149972],{"class":73},"(value))\n",[67,149974,149975],{"class":69,"line":729},[67,149976,631],{"emptyLinePlaceholder":630},[67,149978,149979,149981],{"class":69,"line":735},[67,149980,1626],{"class":77},[67,149982,149983],{"class":73},"(dates)\n",[67,149985,149986,149988],{"class":69,"line":741},[67,149987,1626],{"class":77},[67,149989,149990],{"class":73},"(sales)\n",[14,149992,149994],{"id":149993},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[58,149996,149998],{"className":60,"code":149997,"language":62,"meta":63,"style":63},"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",[32,149999,150000,150014,150024,150028,150036,150057,150079,150101,150123,150145,150149,150153,150175,150196,150200,150208,150212,150216,150226,150235,150245,150261,150265,150269,150286,150302,150318,150334,150344,150348],{"__ignoreMap":63},[67,150001,150002,150004,150006,150008,150010,150012],{"class":69,"line":70},[67,150003,32515],{"class":84},[67,150005,148817],{"class":73},[67,150007,622],{"class":84},[67,150009,148822],{"class":73},[67,150011,649],{"class":84},[67,150013,148827],{"class":73},[67,150015,150016,150018,150020,150022],{"class":69,"line":191},[67,150017,32515],{"class":84},[67,150019,148676],{"class":73},[67,150021,622],{"class":84},[67,150023,148681],{"class":73},[67,150025,150026],{"class":69,"line":202},[67,150027,631],{"emptyLinePlaceholder":630},[67,150029,150030,150032,150034],{"class":69,"line":641},[67,150031,149903],{"class":73},[67,150033,85],{"class":84},[67,150035,57208],{"class":73},[67,150037,150038,150040,150042,150044,150047,150049,150051,150053,150055],{"class":69,"line":655},[67,150039,149823],{"class":73},[67,150041,149435],{"class":114},[67,150043,53203],{"class":73},[67,150045,150046],{"class":114},"\"2024-10-01\"",[67,150048,1868],{"class":73},[67,150050,85843],{"class":114},[67,150052,53203],{"class":73},[67,150054,93782],{"class":77},[67,150056,6749],{"class":73},[67,150058,150059,150061,150063,150065,150068,150070,150072,150074,150077],{"class":69,"line":660},[67,150060,149823],{"class":73},[67,150062,149435],{"class":114},[67,150064,53203],{"class":73},[67,150066,150067],{"class":114},"\"2024-10-02\"",[67,150069,1868],{"class":73},[67,150071,85843],{"class":114},[67,150073,53203],{"class":73},[67,150075,150076],{"class":77},"1800",[67,150078,6749],{"class":73},[67,150080,150081,150083,150085,150087,150090,150092,150094,150096,150099],{"class":69,"line":665},[67,150082,149823],{"class":73},[67,150084,149435],{"class":114},[67,150086,53203],{"class":73},[67,150088,150089],{"class":114},"\"2024-10-03\"",[67,150091,1868],{"class":73},[67,150093,85843],{"class":114},[67,150095,53203],{"class":73},[67,150097,150098],{"class":77},"1500",[67,150100,6749],{"class":73},[67,150102,150103,150105,150107,150109,150112,150114,150116,150118,150121],{"class":69,"line":677},[67,150104,149823],{"class":73},[67,150106,149435],{"class":114},[67,150108,53203],{"class":73},[67,150110,150111],{"class":114},"\"2024-10-04\"",[67,150113,1868],{"class":73},[67,150115,85843],{"class":114},[67,150117,53203],{"class":73},[67,150119,150120],{"class":77},"2100",[67,150122,6749],{"class":73},[67,150124,150125,150127,150129,150131,150134,150136,150138,150140,150143],{"class":69,"line":683},[67,150126,149823],{"class":73},[67,150128,149435],{"class":114},[67,150130,53203],{"class":73},[67,150132,150133],{"class":114},"\"2024-10-05\"",[67,150135,1868],{"class":73},[67,150137,85843],{"class":114},[67,150139,53203],{"class":73},[67,150141,150142],{"class":77},"2600",[67,150144,6749],{"class":73},[67,150146,150147],{"class":69,"line":689},[67,150148,35015],{"class":73},[67,150150,150151],{"class":69,"line":694},[67,150152,631],{"emptyLinePlaceholder":630},[67,150154,150155,150157,150159,150162,150164,150166,150168,150170,150172],{"class":69,"line":700},[67,150156,149238],{"class":73},[67,150158,85],{"class":84},[67,150160,150161],{"class":73}," [item[",[67,150163,149435],{"class":114},[67,150165,81],{"class":73},[67,150167,1512],{"class":84},[67,150169,149647],{"class":73},[67,150171,941],{"class":84},[67,150173,150174],{"class":73}," sales]\n",[67,150176,150177,150180,150182,150184,150186,150188,150190,150192,150194],{"class":69,"line":706},[67,150178,150179],{"class":73},"amounts ",[67,150181,85],{"class":84},[67,150183,150161],{"class":73},[67,150185,85843],{"class":114},[67,150187,81],{"class":73},[67,150189,1512],{"class":84},[67,150191,149647],{"class":73},[67,150193,941],{"class":84},[67,150195,150174],{"class":73},[67,150197,150198],{"class":69,"line":712},[67,150199,631],{"emptyLinePlaceholder":630},[67,150201,150202,150204,150206],{"class":69,"line":717},[67,150203,148690],{"class":73},[67,150205,85],{"class":84},[67,150207,148695],{"class":73},[67,150209,150210],{"class":69,"line":723},[67,150211,149279],{"class":73},[67,150213,150214],{"class":69,"line":729},[67,150215,149087],{"class":73},[67,150217,150218,150220,150222,150224],{"class":69,"line":735},[67,150219,149092],{"class":7033},[67,150221,85],{"class":84},[67,150223,148733],{"class":114},[67,150225,33238],{"class":73},[67,150227,150228,150230,150232],{"class":69,"line":741},[67,150229,149103],{"class":7033},[67,150231,85],{"class":84},[67,150233,150234],{"class":73},"amounts,\n",[67,150236,150237,150239,150241,150243],{"class":69,"line":747},[67,150238,149132],{"class":7033},[67,150240,85],{"class":84},[67,150242,33248],{"class":77},[67,150244,33238],{"class":73},[67,150246,150247,150249,150251,150253,150255,150257,150259],{"class":69,"line":753},[67,150248,149143],{"class":7033},[67,150250,85],{"class":84},[67,150252,149148],{"class":73},[67,150254,149151],{"class":7033},[67,150256,85],{"class":84},[67,150258,33248],{"class":77},[67,150260,39815],{"class":73},[67,150262,150263],{"class":69,"line":758},[67,150264,829],{"class":73},[67,150266,150267],{"class":69,"line":764},[67,150268,148906],{"class":73},[67,150270,150271,150273,150275,150277,150279,150281,150284],{"class":69,"line":770},[67,150272,148911],{"class":7033},[67,150274,85],{"class":84},[67,150276,148916],{"class":73},[67,150278,53173],{"class":7033},[67,150280,85],{"class":84},[67,150282,150283],{"class":114},"\"每日销售额\"",[67,150285,39815],{"class":73},[67,150287,150288,150290,150292,150294,150296,150298,150300],{"class":69,"line":776},[67,150289,148930],{"class":7033},[67,150291,85],{"class":84},[67,150293,148935],{"class":73},[67,150295,81570],{"class":7033},[67,150297,85],{"class":84},[67,150299,148942],{"class":114},[67,150301,39815],{"class":73},[67,150303,150304,150306,150308,150310,150312,150314,150316],{"class":69,"line":782},[67,150305,148949],{"class":7033},[67,150307,85],{"class":84},[67,150309,148935],{"class":73},[67,150311,81570],{"class":7033},[67,150313,85],{"class":84},[67,150315,148960],{"class":114},[67,150317,39815],{"class":73},[67,150319,150320,150322,150324,150326,150328,150330,150332],{"class":69,"line":788},[67,150321,148967],{"class":7033},[67,150323,85],{"class":84},[67,150325,148972],{"class":73},[67,150327,148975],{"class":7033},[67,150329,85],{"class":84},[67,150331,148980],{"class":114},[67,150333,39815],{"class":73},[67,150335,150336,150339,150341],{"class":69,"line":793},[67,150337,150338],{"class":7033},"    datazoom_opts",[67,150340,85],{"class":84},[67,150342,150343],{"class":73},"[opts.DataZoomOpts()],\n",[67,150345,150346],{"class":69,"line":798},[67,150347,829],{"class":73},[67,150349,150350,150352,150355],{"class":69,"line":816},[67,150351,148762],{"class":73},[67,150353,150354],{"class":114},"\"daily_sales.html\"",[67,150356,829],{"class":73},[19,150358,150359,150362],{},[32,150360,150361],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150364,150366],{"id":150365},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150368,150369],{},"如果数据结构如下：",[58,150371,150373],{"className":60,"code":150372,"language":62,"meta":63,"style":63},"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",[32,150374,150375,150383,150391,150413,150434,150439,150446,150466,150486,150490],{"__ignoreMap":63},[67,150376,150377,150379,150381],{"class":69,"line":70},[67,150378,103364],{"class":73},[67,150380,85],{"class":84},[67,150382,17369],{"class":73},[67,150384,150385,150388],{"class":69,"line":191},[67,150386,150387],{"class":114},"    \"北京\"",[67,150389,150390],{"class":73},": [\n",[67,150392,150393,150395,150397,150399,150402,150404,150407,150409,150411],{"class":69,"line":202},[67,150394,6736],{"class":73},[67,150396,149435],{"class":114},[67,150398,53203],{"class":73},[67,150400,150401],{"class":114},"\"2024-01-01\"",[67,150403,1868],{"class":73},[67,150405,150406],{"class":114},"\"confirm\"",[67,150408,53203],{"class":73},[67,150410,2437],{"class":77},[67,150412,6749],{"class":73},[67,150414,150415,150417,150419,150421,150424,150426,150428,150430,150432],{"class":69,"line":641},[67,150416,6736],{"class":73},[67,150418,149435],{"class":114},[67,150420,53203],{"class":73},[67,150422,150423],{"class":114},"\"2024-01-02\"",[67,150425,1868],{"class":73},[67,150427,150406],{"class":114},[67,150429,53203],{"class":73},[67,150431,2488],{"class":77},[67,150433,6749],{"class":73},[67,150435,150436],{"class":69,"line":655},[67,150437,150438],{"class":73},"    ],\n",[67,150440,150441,150444],{"class":69,"line":660},[67,150442,150443],{"class":114},"    \"上海\"",[67,150445,150390],{"class":73},[67,150447,150448,150450,150452,150454,150456,150458,150460,150462,150464],{"class":69,"line":665},[67,150449,6736],{"class":73},[67,150451,149435],{"class":114},[67,150453,53203],{"class":73},[67,150455,150401],{"class":114},[67,150457,1868],{"class":73},[67,150459,150406],{"class":114},[67,150461,53203],{"class":73},[67,150463,2386],{"class":77},[67,150465,6749],{"class":73},[67,150467,150468,150470,150472,150474,150476,150478,150480,150482,150484],{"class":69,"line":677},[67,150469,6736],{"class":73},[67,150471,149435],{"class":114},[67,150473,53203],{"class":73},[67,150475,150423],{"class":114},[67,150477,1868],{"class":73},[67,150479,150406],{"class":114},[67,150481,53203],{"class":73},[67,150483,2513],{"class":77},[67,150485,6749],{"class":73},[67,150487,150488],{"class":69,"line":683},[67,150489,150438],{"class":73},[67,150491,150492],{"class":69,"line":689},[67,150493,3419],{"class":73},[19,150495,150496],{},"绘制多地区趋势：",[58,150498,150500],{"className":60,"code":150499,"language":62,"meta":63,"style":63},"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",[32,150501,150502,150516,150526,150530,150555,150559,150567,150571,150575,150587,150609,150622,150626,150630,150647,150663,150667],{"__ignoreMap":63},[67,150503,150504,150506,150508,150510,150512,150514],{"class":69,"line":70},[67,150505,32515],{"class":84},[67,150507,148817],{"class":73},[67,150509,622],{"class":84},[67,150511,148822],{"class":73},[67,150513,649],{"class":84},[67,150515,148827],{"class":73},[67,150517,150518,150520,150522,150524],{"class":69,"line":191},[67,150519,32515],{"class":84},[67,150521,148676],{"class":73},[67,150523,622],{"class":84},[67,150525,148681],{"class":73},[67,150527,150528],{"class":69,"line":202},[67,150529,631],{"emptyLinePlaceholder":630},[67,150531,150532,150534,150536,150538,150540,150542,150544,150546,150548,150551,150553],{"class":69,"line":641},[67,150533,149238],{"class":73},[67,150535,85],{"class":84},[67,150537,150161],{"class":73},[67,150539,149435],{"class":114},[67,150541,81],{"class":73},[67,150543,1512],{"class":84},[67,150545,149647],{"class":73},[67,150547,941],{"class":84},[67,150549,150550],{"class":73}," data[",[67,150552,71029],{"class":114},[67,150554,79287],{"class":73},[67,150556,150557],{"class":69,"line":655},[67,150558,631],{"emptyLinePlaceholder":630},[67,150560,150561,150563,150565],{"class":69,"line":660},[67,150562,148690],{"class":73},[67,150564,85],{"class":84},[67,150566,148695],{"class":73},[67,150568,150569],{"class":69,"line":665},[67,150570,149279],{"class":73},[67,150572,150573],{"class":69,"line":677},[67,150574,631],{"emptyLinePlaceholder":630},[67,150576,150577,150579,150582,150584],{"class":69,"line":683},[67,150578,1512],{"class":84},[67,150580,150581],{"class":73}," city, records ",[67,150583,941],{"class":84},[67,150585,150586],{"class":73}," data.items():\n",[67,150588,150589,150592,150594,150596,150598,150600,150602,150604,150606],{"class":69,"line":689},[67,150590,150591],{"class":73},"    values ",[67,150593,85],{"class":84},[67,150595,150161],{"class":73},[67,150597,150406],{"class":114},[67,150599,81],{"class":73},[67,150601,1512],{"class":84},[67,150603,149647],{"class":73},[67,150605,941],{"class":84},[67,150607,150608],{"class":73}," records]\n",[67,150610,150611,150614,150616,150618,150620],{"class":69,"line":694},[67,150612,150613],{"class":73},"    line.add_yaxis(city, values, ",[67,150615,149183],{"class":7033},[67,150617,85],{"class":84},[67,150619,33248],{"class":77},[67,150621,829],{"class":73},[67,150623,150624],{"class":69,"line":700},[67,150625,631],{"emptyLinePlaceholder":630},[67,150627,150628],{"class":69,"line":706},[67,150629,148906],{"class":73},[67,150631,150632,150634,150636,150638,150640,150642,150645],{"class":69,"line":712},[67,150633,148911],{"class":7033},[67,150635,85],{"class":84},[67,150637,148916],{"class":73},[67,150639,53173],{"class":7033},[67,150641,85],{"class":84},[67,150643,150644],{"class":114},"\"多地区趋势图\"",[67,150646,39815],{"class":73},[67,150648,150649,150651,150653,150655,150657,150659,150661],{"class":69,"line":717},[67,150650,148967],{"class":7033},[67,150652,85],{"class":84},[67,150654,148972],{"class":73},[67,150656,148975],{"class":7033},[67,150658,85],{"class":84},[67,150660,148980],{"class":114},[67,150662,39815],{"class":73},[67,150664,150665],{"class":69,"line":723},[67,150666,829],{"class":73},[67,150668,150669,150671,150674],{"class":69,"line":729},[67,150670,148762],{"class":73},[67,150672,150673],{"class":114},"\"trend.html\"",[67,150675,829],{"class":73},[19,150677,150678],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150680,150682],{"id":150681},"_1012-易错点","10.12 易错点",[26,150684,150685,150691,150697,150707,150713],{},[29,150686,150687,150690],{},[32,150688,150689],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[29,150692,150693,150696],{},[32,150694,150695],{},"render()"," 生成的是 HTML，不是图片。",[29,150698,150699,150700,150703,150704,230],{},"JSON 字符串用 ",[32,150701,150702],{},"json.loads()","，JSON 文件用 ",[32,150705,150706],{},"json.load()",[29,150708,150709,150710,230],{},"中文 JSON 保存时加 ",[32,150711,150712],{},"ensure_ascii=False",[29,150714,150715],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150717,150719],{"id":150718},"_1013-本章练习","10.13 本章练习",[26,150721,150722,150725,150728,150731,150734],{},[29,150723,150724],{},"安装 pyecharts 并生成第一个折线图。",[29,150726,150727],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[29,150729,150730],{},"绘制两条折线，对比线上和线下销售额。",[29,150732,150733],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[29,150735,150736],{},"对含有空值的销售数据进行清洗后再绘图。",[1903,150738,150739],{},"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":63,"searchDepth":191,"depth":191,"links":150741},[150742,150743,150744,150745,150746,150747,150748,150749,150750,150751,150752,150753,150754],{"id":148358,"depth":191,"text":148359},{"id":148433,"depth":191,"text":148434},{"id":148612,"depth":191,"text":148613},{"id":148663,"depth":191,"text":148664},{"id":148797,"depth":191,"text":148798},{"id":149073,"depth":191,"text":149074},{"id":149199,"depth":191,"text":149200},{"id":149410,"depth":191,"text":149411},{"id":149781,"depth":191,"text":149782},{"id":149993,"depth":191,"text":149994},{"id":150365,"depth":191,"text":150366},{"id":150681,"depth":191,"text":150682},{"id":150718,"depth":191,"text":150719},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148350,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150761,"title":150762,"body":150763,"description":25173,"extension":1930,"meta":153123,"navigation":630,"path":153124,"seo":153125,"stem":153126,"__hash__":153127},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150764,"toc":153100},[150765,150768,150772,150775,150778,150854,150857,150948,150951,150955,150958,151002,151015,151019,151022,151089,151092,151096,151099,151183,151191,151195,151200,151341,151344,151355,151361,151367,151481,151485,151488,151491,151744,151747,151751,151754,151858,151861,151865,152016,152020,152027,152140,152144,152147,152253,152256,152260,152263,152294,152297,152402,152405,152409,152413,152423,152491,152495,152502,152566,152569,152573,152579,152675,152684,152688,153012,153021,153025,153053,153057,153097],[10,150766,150762],{"id":150767},"_11-面向对象基础",[14,150769,150771],{"id":150770},"_111-什么是面向对象","11.1 什么是面向对象",[19,150773,150774],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150776,150777],{},"面向过程：",[58,150779,150781],{"className":60,"code":150780,"language":62,"meta":63,"style":63},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[32,150782,150783,150792,150800,150804,150814,150845,150849],{"__ignoreMap":63},[67,150784,150785,150787,150789],{"class":69,"line":70},[67,150786,147974],{"class":73},[67,150788,85],{"class":84},[67,150790,150791],{"class":114}," \"小明\"\n",[67,150793,150794,150796,150798],{"class":69,"line":191},[67,150795,147984],{"class":73},[67,150797,85],{"class":84},[67,150799,147989],{"class":77},[67,150801,150802],{"class":69,"line":202},[67,150803,631],{"emptyLinePlaceholder":630},[67,150805,150806,150808,150811],{"class":69,"line":641},[67,150807,801],{"class":84},[67,150809,150810],{"class":110}," introduce",[67,150812,150813],{"class":73},"(name, age):\n",[67,150815,150816,150818,150820,150822,150825,150827,150829,150831,150834,150836,150838,150840,150843],{"class":69,"line":655},[67,150817,851],{"class":77},[67,150819,854],{"class":73},[67,150821,2052],{"class":84},[67,150823,150824],{"class":114},"\"我叫",[67,150826,2885],{"class":77},[67,150828,81570],{"class":73},[67,150830,2934],{"class":77},[67,150832,150833],{"class":114},"，今年",[67,150835,2885],{"class":77},[67,150837,71981],{"class":73},[67,150839,2934],{"class":77},[67,150841,150842],{"class":114},"岁\"",[67,150844,829],{"class":73},[67,150846,150847],{"class":69,"line":660},[67,150848,631],{"emptyLinePlaceholder":630},[67,150850,150851],{"class":69,"line":665},[67,150852,150853],{"class":73},"introduce(name, age)\n",[19,150855,150856],{},"面向对象：",[58,150858,150860],{"className":60,"code":150859,"language":62,"meta":63,"style":63},"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",[32,150861,150862,150870,150878,150907,150911,150915,150925,150934,150943],{"__ignoreMap":63},[67,150863,150864,150866,150868],{"class":69,"line":70},[67,150865,16492],{"class":84},[67,150867,9714],{"class":110},[67,150869,813],{"class":73},[67,150871,150872,150874,150876],{"class":69,"line":191},[67,150873,32578],{"class":84},[67,150875,150810],{"class":110},[67,150877,32584],{"class":73},[67,150879,150880,150882,150884,150886,150888,150891,150893,150895,150897,150899,150901,150903,150905],{"class":69,"line":202},[67,150881,34220],{"class":77},[67,150883,854],{"class":73},[67,150885,2052],{"class":84},[67,150887,150824],{"class":114},[67,150889,150890],{"class":77},"{self",[67,150892,82061],{"class":73},[67,150894,2934],{"class":77},[67,150896,150833],{"class":114},[67,150898,150890],{"class":77},[67,150900,82073],{"class":73},[67,150902,2934],{"class":77},[67,150904,150842],{"class":114},[67,150906,829],{"class":73},[67,150908,150909],{"class":69,"line":641},[67,150910,631],{"emptyLinePlaceholder":630},[67,150912,150913],{"class":69,"line":655},[67,150914,631],{"emptyLinePlaceholder":630},[67,150916,150917,150920,150922],{"class":69,"line":660},[67,150918,150919],{"class":73},"student ",[67,150921,85],{"class":84},[67,150923,150924],{"class":73}," Student()\n",[67,150926,150927,150930,150932],{"class":69,"line":665},[67,150928,150929],{"class":73},"student.name ",[67,150931,85],{"class":84},[67,150933,150791],{"class":114},[67,150935,150936,150939,150941],{"class":69,"line":677},[67,150937,150938],{"class":73},"student.age ",[67,150940,85],{"class":84},[67,150942,147989],{"class":77},[67,150944,150945],{"class":69,"line":683},[67,150946,150947],{"class":73},"student.introduce()\n",[19,150949,150950],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150952,150954],{"id":150953},"_112-类和对象","11.2 类和对象",[19,150956,150957],{},"类是模板，对象是根据模板创建出来的具体实例。",[58,150959,150961],{"className":60,"code":150960,"language":62,"meta":63,"style":63},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[32,150962,150963,150971,150976,150980,150984,150993],{"__ignoreMap":63},[67,150964,150965,150967,150969],{"class":69,"line":70},[67,150966,16492],{"class":84},[67,150968,9714],{"class":110},[67,150970,813],{"class":73},[67,150972,150973],{"class":69,"line":191},[67,150974,150975],{"class":84},"    pass\n",[67,150977,150978],{"class":69,"line":202},[67,150979,631],{"emptyLinePlaceholder":630},[67,150981,150982],{"class":69,"line":641},[67,150983,631],{"emptyLinePlaceholder":630},[67,150985,150986,150989,150991],{"class":69,"line":655},[67,150987,150988],{"class":73},"student1 ",[67,150990,85],{"class":84},[67,150992,150924],{"class":73},[67,150994,150995,150998,151000],{"class":69,"line":660},[67,150996,150997],{"class":73},"student2 ",[67,150999,85],{"class":84},[67,151001,150924],{"class":73},[19,151003,151004,151007,151008,1264,151011,151014],{},[32,151005,151006],{},"Student"," 是类，",[32,151009,151010],{},"student1",[32,151012,151013],{},"student2"," 是对象。",[14,151016,151018],{"id":151017},"_113-属性","11.3 属性",[19,151020,151021],{},"属性是对象保存的数据。",[58,151023,151025],{"className":60,"code":151024,"language":62,"meta":63,"style":63},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[32,151026,151027,151035,151039,151043,151047,151055,151063,151071,151075,151082],{"__ignoreMap":63},[67,151028,151029,151031,151033],{"class":69,"line":70},[67,151030,16492],{"class":84},[67,151032,9714],{"class":110},[67,151034,813],{"class":73},[67,151036,151037],{"class":69,"line":191},[67,151038,150975],{"class":84},[67,151040,151041],{"class":69,"line":202},[67,151042,631],{"emptyLinePlaceholder":630},[67,151044,151045],{"class":69,"line":641},[67,151046,631],{"emptyLinePlaceholder":630},[67,151048,151049,151051,151053],{"class":69,"line":655},[67,151050,150919],{"class":73},[67,151052,85],{"class":84},[67,151054,150924],{"class":73},[67,151056,151057,151059,151061],{"class":69,"line":660},[67,151058,150929],{"class":73},[67,151060,85],{"class":84},[67,151062,150791],{"class":114},[67,151064,151065,151067,151069],{"class":69,"line":665},[67,151066,150938],{"class":73},[67,151068,85],{"class":84},[67,151070,147989],{"class":77},[67,151072,151073],{"class":69,"line":677},[67,151074,631],{"emptyLinePlaceholder":630},[67,151076,151077,151079],{"class":69,"line":683},[67,151078,1626],{"class":77},[67,151080,151081],{"class":73},"(student.name)\n",[67,151083,151084,151086],{"class":69,"line":689},[67,151085,1626],{"class":77},[67,151087,151088],{"class":73},"(student.age)\n",[19,151090,151091],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151093,151095],{"id":151094},"_114-方法","11.4 方法",[19,151097,151098],{},"类中的函数叫方法。",[58,151100,151101],{"className":60,"code":150859,"language":62,"meta":63,"style":63},[32,151102,151103,151111,151119,151147,151151,151155,151163,151171,151179],{"__ignoreMap":63},[67,151104,151105,151107,151109],{"class":69,"line":70},[67,151106,16492],{"class":84},[67,151108,9714],{"class":110},[67,151110,813],{"class":73},[67,151112,151113,151115,151117],{"class":69,"line":191},[67,151114,32578],{"class":84},[67,151116,150810],{"class":110},[67,151118,32584],{"class":73},[67,151120,151121,151123,151125,151127,151129,151131,151133,151135,151137,151139,151141,151143,151145],{"class":69,"line":202},[67,151122,34220],{"class":77},[67,151124,854],{"class":73},[67,151126,2052],{"class":84},[67,151128,150824],{"class":114},[67,151130,150890],{"class":77},[67,151132,82061],{"class":73},[67,151134,2934],{"class":77},[67,151136,150833],{"class":114},[67,151138,150890],{"class":77},[67,151140,82073],{"class":73},[67,151142,2934],{"class":77},[67,151144,150842],{"class":114},[67,151146,829],{"class":73},[67,151148,151149],{"class":69,"line":641},[67,151150,631],{"emptyLinePlaceholder":630},[67,151152,151153],{"class":69,"line":655},[67,151154,631],{"emptyLinePlaceholder":630},[67,151156,151157,151159,151161],{"class":69,"line":660},[67,151158,150919],{"class":73},[67,151160,85],{"class":84},[67,151162,150924],{"class":73},[67,151164,151165,151167,151169],{"class":69,"line":665},[67,151166,150929],{"class":73},[67,151168,85],{"class":84},[67,151170,150791],{"class":114},[67,151172,151173,151175,151177],{"class":69,"line":677},[67,151174,150938],{"class":73},[67,151176,85],{"class":84},[67,151178,147989],{"class":77},[67,151180,151181],{"class":69,"line":683},[67,151182,150947],{"class":73},[19,151184,151185,151187,151188,151190],{},[32,151186,32600],{}," 表示当前对象。调用方法时不需要手动传入 ",[32,151189,32600],{},"，Python 会自动传。",[14,151192,151194],{"id":151193},"_115-构造方法__init__","11.5 构造方法__init__",[19,151196,151197,151199],{},[32,151198,32606],{}," 在对象创建时自动执行，用于初始化属性。",[58,151201,151203],{"className":60,"code":151202,"language":62,"meta":63,"style":63},"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",[32,151204,151205,151213,151222,151234,151246,151257,151261,151269,151307,151311,151315,151337],{"__ignoreMap":63},[67,151206,151207,151209,151211],{"class":69,"line":70},[67,151208,16492],{"class":84},[67,151210,9714],{"class":110},[67,151212,813],{"class":73},[67,151214,151215,151217,151219],{"class":69,"line":191},[67,151216,32578],{"class":84},[67,151218,32581],{"class":77},[67,151220,151221],{"class":73},"(self, name, age, score):\n",[67,151223,151224,151226,151229,151231],{"class":69,"line":202},[67,151225,32622],{"class":77},[67,151227,151228],{"class":73},".name ",[67,151230,85],{"class":84},[67,151232,151233],{"class":73}," name\n",[67,151235,151236,151238,151241,151243],{"class":69,"line":641},[67,151237,32622],{"class":77},[67,151239,151240],{"class":73},".age ",[67,151242,85],{"class":84},[67,151244,151245],{"class":73}," age\n",[67,151247,151248,151250,151253,151255],{"class":69,"line":655},[67,151249,32622],{"class":77},[67,151251,151252],{"class":73},".score ",[67,151254,85],{"class":84},[67,151256,3433],{"class":73},[67,151258,151259],{"class":69,"line":660},[67,151260,631],{"emptyLinePlaceholder":630},[67,151262,151263,151265,151267],{"class":69,"line":665},[67,151264,32578],{"class":84},[67,151266,150810],{"class":110},[67,151268,32584],{"class":73},[67,151270,151271,151273,151275,151277,151279,151281,151283,151285,151287,151289,151291,151293,151296,151298,151301,151303,151305],{"class":69,"line":677},[67,151272,34220],{"class":77},[67,151274,854],{"class":73},[67,151276,2052],{"class":84},[67,151278,150824],{"class":114},[67,151280,150890],{"class":77},[67,151282,82061],{"class":73},[67,151284,2934],{"class":77},[67,151286,150833],{"class":114},[67,151288,150890],{"class":77},[67,151290,82073],{"class":73},[67,151292,2934],{"class":77},[67,151294,151295],{"class":114},"岁，成绩",[67,151297,150890],{"class":77},[67,151299,151300],{"class":73},".score",[67,151302,2934],{"class":77},[67,151304,2243],{"class":114},[67,151306,829],{"class":73},[67,151308,151309],{"class":69,"line":683},[67,151310,631],{"emptyLinePlaceholder":630},[67,151312,151313],{"class":69,"line":689},[67,151314,631],{"emptyLinePlaceholder":630},[67,151316,151317,151319,151321,151324,151327,151329,151331,151333,151335],{"class":69,"line":694},[67,151318,150919],{"class":73},[67,151320,85],{"class":84},[67,151322,151323],{"class":73}," Student(",[67,151325,151326],{"class":114},"\"小明\"",[67,151328,1868],{"class":73},[67,151330,2639],{"class":77},[67,151332,1868],{"class":73},[67,151334,2977],{"class":77},[67,151336,829],{"class":73},[67,151338,151339],{"class":69,"line":700},[67,151340,150947],{"class":73},[19,151342,151343],{},"构造方法的好处：",[26,151345,151346,151349,151352],{},[29,151347,151348],{},"创建对象时必须提供必要数据。",[29,151350,151351],{},"属性初始化集中，不容易漏。",[29,151353,151354],{},"对象状态更完整。",[14,151356,151358,151359],{"id":151357},"_116-str","11.6 ",[2144,151360,3157],{},[19,151362,151363,151364,230],{},"直接打印对象时，默认输出不直观。可以定义 ",[32,151365,151366],{},"__str__",[58,151368,151370],{"className":60,"code":151369,"language":62,"meta":63,"style":63},"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",[32,151371,151372,151380,151389,151399,151409,151413,151422,151450,151454,151458,151474],{"__ignoreMap":63},[67,151373,151374,151376,151378],{"class":69,"line":70},[67,151375,16492],{"class":84},[67,151377,9714],{"class":110},[67,151379,813],{"class":73},[67,151381,151382,151384,151386],{"class":69,"line":191},[67,151383,32578],{"class":84},[67,151385,32581],{"class":77},[67,151387,151388],{"class":73},"(self, name, age):\n",[67,151390,151391,151393,151395,151397],{"class":69,"line":202},[67,151392,32622],{"class":77},[67,151394,151228],{"class":73},[67,151396,85],{"class":84},[67,151398,151233],{"class":73},[67,151400,151401,151403,151405,151407],{"class":69,"line":641},[67,151402,32622],{"class":77},[67,151404,151240],{"class":73},[67,151406,85],{"class":84},[67,151408,151245],{"class":73},[67,151410,151411],{"class":69,"line":655},[67,151412,631],{"emptyLinePlaceholder":630},[67,151414,151415,151417,151420],{"class":69,"line":660},[67,151416,32578],{"class":84},[67,151418,151419],{"class":77}," __str__",[67,151421,32584],{"class":73},[67,151423,151424,151426,151429,151432,151434,151436,151438,151441,151443,151445,151447],{"class":69,"line":665},[67,151425,16550],{"class":84},[67,151427,151428],{"class":84}," f",[67,151430,151431],{"class":114},"\"Student(name=",[67,151433,150890],{"class":77},[67,151435,82061],{"class":73},[67,151437,2934],{"class":77},[67,151439,151440],{"class":114},", age=",[67,151442,150890],{"class":77},[67,151444,82073],{"class":73},[67,151446,2934],{"class":77},[67,151448,151449],{"class":114},")\"\n",[67,151451,151452],{"class":69,"line":677},[67,151453,631],{"emptyLinePlaceholder":630},[67,151455,151456],{"class":69,"line":683},[67,151457,631],{"emptyLinePlaceholder":630},[67,151459,151460,151462,151464,151466,151468,151470,151472],{"class":69,"line":689},[67,151461,150919],{"class":73},[67,151463,85],{"class":84},[67,151465,151323],{"class":73},[67,151467,151326],{"class":114},[67,151469,1868],{"class":73},[67,151471,2639],{"class":77},[67,151473,829],{"class":73},[67,151475,151476,151478],{"class":69,"line":694},[67,151477,1626],{"class":77},[67,151479,151480],{"class":73},"(student)\n",[14,151482,151484],{"id":151483},"_117-封装","11.7 封装",[19,151486,151487],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151489,151490],{},"Python 中以双下划线开头的属性通常视为私有属性。",[58,151492,151494],{"className":60,"code":151493,"language":62,"meta":63,"style":63},"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",[32,151495,151496,151505,151514,151526,151538,151542,151551,151560,151564,151574,151587,151598,151603,151614,151618,151627,151639,151650,151654,151667,151678,151682,151693,151697,151701,151719,151728,151737],{"__ignoreMap":63},[67,151497,151498,151500,151503],{"class":69,"line":70},[67,151499,16492],{"class":84},[67,151501,151502],{"class":110}," Account",[67,151504,813],{"class":73},[67,151506,151507,151509,151511],{"class":69,"line":191},[67,151508,32578],{"class":84},[67,151510,32581],{"class":77},[67,151512,151513],{"class":73},"(self, owner, balance):\n",[67,151515,151516,151518,151521,151523],{"class":69,"line":202},[67,151517,32622],{"class":77},[67,151519,151520],{"class":73},".owner ",[67,151522,85],{"class":84},[67,151524,151525],{"class":73}," owner\n",[67,151527,151528,151530,151533,151535],{"class":69,"line":641},[67,151529,32622],{"class":77},[67,151531,151532],{"class":73},".__balance ",[67,151534,85],{"class":84},[67,151536,151537],{"class":73}," balance\n",[67,151539,151540],{"class":69,"line":655},[67,151541,631],{"emptyLinePlaceholder":630},[67,151543,151544,151546,151549],{"class":69,"line":660},[67,151545,32578],{"class":84},[67,151547,151548],{"class":110}," get_balance",[67,151550,32584],{"class":73},[67,151552,151553,151555,151557],{"class":69,"line":665},[67,151554,16550],{"class":84},[67,151556,40641],{"class":77},[67,151558,151559],{"class":73},".__balance\n",[67,151561,151562],{"class":69,"line":677},[67,151563,631],{"emptyLinePlaceholder":630},[67,151565,151566,151568,151571],{"class":69,"line":683},[67,151567,32578],{"class":84},[67,151569,151570],{"class":110}," deposit",[67,151572,151573],{"class":73},"(self, money):\n",[67,151575,151576,151578,151581,151583,151585],{"class":69,"line":689},[67,151577,4329],{"class":84},[67,151579,151580],{"class":73}," money ",[67,151582,3442],{"class":84},[67,151584,5913],{"class":77},[67,151586,813],{"class":73},[67,151588,151589,151591,151593,151596],{"class":69,"line":694},[67,151590,36419],{"class":77},[67,151592,854],{"class":73},[67,151594,151595],{"class":114},"\"存款金额必须大于0\"",[67,151597,829],{"class":73},[67,151599,151600],{"class":69,"line":700},[67,151601,151602],{"class":84},"            return\n",[67,151604,151605,151607,151609,151611],{"class":69,"line":706},[67,151606,32622],{"class":77},[67,151608,151532],{"class":73},[67,151610,11283],{"class":84},[67,151612,151613],{"class":73}," money\n",[67,151615,151616],{"class":69,"line":712},[67,151617,631],{"emptyLinePlaceholder":630},[67,151619,151620,151622,151625],{"class":69,"line":717},[67,151621,32578],{"class":84},[67,151623,151624],{"class":110}," withdraw",[67,151626,151573],{"class":73},[67,151628,151629,151631,151633,151635,151637],{"class":69,"line":723},[67,151630,4329],{"class":84},[67,151632,151580],{"class":73},[67,151634,3442],{"class":84},[67,151636,5913],{"class":77},[67,151638,813],{"class":73},[67,151640,151641,151643,151645,151648],{"class":69,"line":729},[67,151642,36419],{"class":77},[67,151644,854],{"class":73},[67,151646,151647],{"class":114},"\"取款金额必须大于0\"",[67,151649,829],{"class":73},[67,151651,151652],{"class":69,"line":735},[67,151653,151602],{"class":84},[67,151655,151656,151658,151660,151662,151664],{"class":69,"line":741},[67,151657,4329],{"class":84},[67,151659,151580],{"class":73},[67,151661,2948],{"class":84},[67,151663,40641],{"class":77},[67,151665,151666],{"class":73},".__balance:\n",[67,151668,151669,151671,151673,151676],{"class":69,"line":747},[67,151670,36419],{"class":77},[67,151672,854],{"class":73},[67,151674,151675],{"class":114},"\"余额不足\"",[67,151677,829],{"class":73},[67,151679,151680],{"class":69,"line":753},[67,151681,151602],{"class":84},[67,151683,151684,151686,151688,151691],{"class":69,"line":758},[67,151685,32622],{"class":77},[67,151687,151532],{"class":73},[67,151689,151690],{"class":84},"-=",[67,151692,151613],{"class":73},[67,151694,151695],{"class":69,"line":764},[67,151696,631],{"emptyLinePlaceholder":630},[67,151698,151699],{"class":69,"line":770},[67,151700,631],{"emptyLinePlaceholder":630},[67,151702,151703,151706,151708,151711,151713,151715,151717],{"class":69,"line":776},[67,151704,151705],{"class":73},"account ",[67,151707,85],{"class":84},[67,151709,151710],{"class":73}," Account(",[67,151712,151326],{"class":114},[67,151714,1868],{"class":73},[67,151716,8227],{"class":77},[67,151718,829],{"class":73},[67,151720,151721,151724,151726],{"class":69,"line":782},[67,151722,151723],{"class":73},"account.deposit(",[67,151725,3565],{"class":77},[67,151727,829],{"class":73},[67,151729,151730,151733,151735],{"class":69,"line":788},[67,151731,151732],{"class":73},"account.withdraw(",[67,151734,2302],{"class":77},[67,151736,829],{"class":73},[67,151738,151739,151741],{"class":69,"line":793},[67,151740,1626],{"class":77},[67,151742,151743],{"class":73},"(account.get_balance())\n",[19,151745,151746],{},"封装的意义是避免外部随意修改内部状态。",[14,151748,151750],{"id":151749},"_118-继承","11.8 继承",[19,151752,151753],{},"继承可以让子类复用父类的属性和方法。",[58,151755,151757],{"className":60,"code":151756,"language":62,"meta":63,"style":63},"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",[32,151758,151759,151768,151777,151788,151792,151796,151810,151819,151830,151834,151838,151848,151853],{"__ignoreMap":63},[67,151760,151761,151763,151766],{"class":69,"line":70},[67,151762,16492],{"class":84},[67,151764,151765],{"class":110}," Animal",[67,151767,813],{"class":73},[67,151769,151770,151772,151775],{"class":69,"line":191},[67,151771,32578],{"class":84},[67,151773,151774],{"class":110}," eat",[67,151776,32584],{"class":73},[67,151778,151779,151781,151783,151786],{"class":69,"line":202},[67,151780,34220],{"class":77},[67,151782,854],{"class":73},[67,151784,151785],{"class":114},"\"吃东西\"",[67,151787,829],{"class":73},[67,151789,151790],{"class":69,"line":641},[67,151791,631],{"emptyLinePlaceholder":630},[67,151793,151794],{"class":69,"line":655},[67,151795,631],{"emptyLinePlaceholder":630},[67,151797,151798,151800,151803,151805,151808],{"class":69,"line":660},[67,151799,16492],{"class":84},[67,151801,151802],{"class":110}," Dog",[67,151804,854],{"class":73},[67,151806,151807],{"class":110},"Animal",[67,151809,952],{"class":73},[67,151811,151812,151814,151817],{"class":69,"line":665},[67,151813,32578],{"class":84},[67,151815,151816],{"class":110}," bark",[67,151818,32584],{"class":73},[67,151820,151821,151823,151825,151828],{"class":69,"line":677},[67,151822,34220],{"class":77},[67,151824,854],{"class":73},[67,151826,151827],{"class":114},"\"汪汪\"",[67,151829,829],{"class":73},[67,151831,151832],{"class":69,"line":683},[67,151833,631],{"emptyLinePlaceholder":630},[67,151835,151836],{"class":69,"line":689},[67,151837,631],{"emptyLinePlaceholder":630},[67,151839,151840,151843,151845],{"class":69,"line":694},[67,151841,151842],{"class":73},"dog ",[67,151844,85],{"class":84},[67,151846,151847],{"class":73}," Dog()\n",[67,151849,151850],{"class":69,"line":700},[67,151851,151852],{"class":73},"dog.eat()\n",[67,151854,151855],{"class":69,"line":706},[67,151856,151857],{"class":73},"dog.bark()\n",[19,151859,151860],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151862,151864],{"id":151863},"_119-方法重写","11.9 方法重写",[58,151866,151868],{"className":60,"code":151867,"language":62,"meta":63,"style":63},"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",[32,151869,151870,151878,151887,151898,151902,151906,151918,151926,151936,151940,151944,151957,151965,151976,151980,151984,151992,152002,152006,152011],{"__ignoreMap":63},[67,151871,151872,151874,151876],{"class":69,"line":70},[67,151873,16492],{"class":84},[67,151875,151765],{"class":110},[67,151877,813],{"class":73},[67,151879,151880,151882,151885],{"class":69,"line":191},[67,151881,32578],{"class":84},[67,151883,151884],{"class":110}," speak",[67,151886,32584],{"class":73},[67,151888,151889,151891,151893,151896],{"class":69,"line":202},[67,151890,34220],{"class":77},[67,151892,854],{"class":73},[67,151894,151895],{"class":114},"\"动物叫\"",[67,151897,829],{"class":73},[67,151899,151900],{"class":69,"line":641},[67,151901,631],{"emptyLinePlaceholder":630},[67,151903,151904],{"class":69,"line":655},[67,151905,631],{"emptyLinePlaceholder":630},[67,151907,151908,151910,151912,151914,151916],{"class":69,"line":660},[67,151909,16492],{"class":84},[67,151911,151802],{"class":110},[67,151913,854],{"class":73},[67,151915,151807],{"class":110},[67,151917,952],{"class":73},[67,151919,151920,151922,151924],{"class":69,"line":665},[67,151921,32578],{"class":84},[67,151923,151884],{"class":110},[67,151925,32584],{"class":73},[67,151927,151928,151930,151932,151934],{"class":69,"line":677},[67,151929,34220],{"class":77},[67,151931,854],{"class":73},[67,151933,151827],{"class":114},[67,151935,829],{"class":73},[67,151937,151938],{"class":69,"line":683},[67,151939,631],{"emptyLinePlaceholder":630},[67,151941,151942],{"class":69,"line":689},[67,151943,631],{"emptyLinePlaceholder":630},[67,151945,151946,151948,151951,151953,151955],{"class":69,"line":694},[67,151947,16492],{"class":84},[67,151949,151950],{"class":110}," Cat",[67,151952,854],{"class":73},[67,151954,151807],{"class":110},[67,151956,952],{"class":73},[67,151958,151959,151961,151963],{"class":69,"line":700},[67,151960,32578],{"class":84},[67,151962,151884],{"class":110},[67,151964,32584],{"class":73},[67,151966,151967,151969,151971,151974],{"class":69,"line":706},[67,151968,34220],{"class":77},[67,151970,854],{"class":73},[67,151972,151973],{"class":114},"\"喵喵\"",[67,151975,829],{"class":73},[67,151977,151978],{"class":69,"line":712},[67,151979,631],{"emptyLinePlaceholder":630},[67,151981,151982],{"class":69,"line":717},[67,151983,631],{"emptyLinePlaceholder":630},[67,151985,151986,151988,151990],{"class":69,"line":723},[67,151987,151842],{"class":73},[67,151989,85],{"class":84},[67,151991,151847],{"class":73},[67,151993,151994,151997,151999],{"class":69,"line":729},[67,151995,151996],{"class":73},"cat ",[67,151998,85],{"class":84},[67,152000,152001],{"class":73}," Cat()\n",[67,152003,152004],{"class":69,"line":735},[67,152005,631],{"emptyLinePlaceholder":630},[67,152007,152008],{"class":69,"line":741},[67,152009,152010],{"class":73},"dog.speak()\n",[67,152012,152013],{"class":69,"line":747},[67,152014,152015],{"class":73},"cat.speak()\n",[14,152017,152019],{"id":152018},"_1110-super","11.10 super",[19,152021,152022,152023,152026],{},"子类可以通过 ",[32,152024,152025],{},"super()"," 调用父类方法。",[58,152028,152030],{"className":60,"code":152029,"language":62,"meta":63,"style":63},"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",[32,152031,152032,152040,152049,152059,152063,152067,152079,152088,152099,152109,152113,152117,152133],{"__ignoreMap":63},[67,152033,152034,152036,152038],{"class":69,"line":70},[67,152035,16492],{"class":84},[67,152037,17366],{"class":110},[67,152039,813],{"class":73},[67,152041,152042,152044,152046],{"class":69,"line":191},[67,152043,32578],{"class":84},[67,152045,32581],{"class":77},[67,152047,152048],{"class":73},"(self, name):\n",[67,152050,152051,152053,152055,152057],{"class":69,"line":202},[67,152052,32622],{"class":77},[67,152054,151228],{"class":73},[67,152056,85],{"class":84},[67,152058,151233],{"class":73},[67,152060,152061],{"class":69,"line":641},[67,152062,631],{"emptyLinePlaceholder":630},[67,152064,152065],{"class":69,"line":655},[67,152066,631],{"emptyLinePlaceholder":630},[67,152068,152069,152071,152073,152075,152077],{"class":69,"line":660},[67,152070,16492],{"class":84},[67,152072,9714],{"class":110},[67,152074,854],{"class":73},[67,152076,20843],{"class":110},[67,152078,952],{"class":73},[67,152080,152081,152083,152085],{"class":69,"line":665},[67,152082,32578],{"class":84},[67,152084,32581],{"class":77},[67,152086,152087],{"class":73},"(self, name, score):\n",[67,152089,152090,152092,152094,152096],{"class":69,"line":677},[67,152091,32594],{"class":77},[67,152093,19058],{"class":73},[67,152095,32606],{"class":77},[67,152097,152098],{"class":73},"(name)\n",[67,152100,152101,152103,152105,152107],{"class":69,"line":683},[67,152102,32622],{"class":77},[67,152104,151252],{"class":73},[67,152106,85],{"class":84},[67,152108,3433],{"class":73},[67,152110,152111],{"class":69,"line":689},[67,152112,631],{"emptyLinePlaceholder":630},[67,152114,152115],{"class":69,"line":694},[67,152116,631],{"emptyLinePlaceholder":630},[67,152118,152119,152121,152123,152125,152127,152129,152131],{"class":69,"line":700},[67,152120,150919],{"class":73},[67,152122,85],{"class":84},[67,152124,151323],{"class":73},[67,152126,151326],{"class":114},[67,152128,1868],{"class":73},[67,152130,2977],{"class":77},[67,152132,829],{"class":73},[67,152134,152135,152137],{"class":69,"line":706},[67,152136,1626],{"class":77},[67,152138,152139],{"class":73},"(student.name, student.score)\n",[14,152141,152143],{"id":152142},"_1111-多态","11.11 多态",[19,152145,152146],{},"多态指不同对象响应同一个方法，表现出不同结果。",[58,152148,152150],{"className":60,"code":152149,"language":62,"meta":63,"style":63},"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",[32,152151,152152,152160,152168,152178,152182,152186,152194,152202,152212,152216,152220,152230,152235,152239,152243,152248],{"__ignoreMap":63},[67,152153,152154,152156,152158],{"class":69,"line":70},[67,152155,16492],{"class":84},[67,152157,151802],{"class":110},[67,152159,813],{"class":73},[67,152161,152162,152164,152166],{"class":69,"line":191},[67,152163,32578],{"class":84},[67,152165,151884],{"class":110},[67,152167,32584],{"class":73},[67,152169,152170,152172,152174,152176],{"class":69,"line":202},[67,152171,34220],{"class":77},[67,152173,854],{"class":73},[67,152175,151827],{"class":114},[67,152177,829],{"class":73},[67,152179,152180],{"class":69,"line":641},[67,152181,631],{"emptyLinePlaceholder":630},[67,152183,152184],{"class":69,"line":655},[67,152185,631],{"emptyLinePlaceholder":630},[67,152187,152188,152190,152192],{"class":69,"line":660},[67,152189,16492],{"class":84},[67,152191,151950],{"class":110},[67,152193,813],{"class":73},[67,152195,152196,152198,152200],{"class":69,"line":665},[67,152197,32578],{"class":84},[67,152199,151884],{"class":110},[67,152201,32584],{"class":73},[67,152203,152204,152206,152208,152210],{"class":69,"line":677},[67,152205,34220],{"class":77},[67,152207,854],{"class":73},[67,152209,151973],{"class":114},[67,152211,829],{"class":73},[67,152213,152214],{"class":69,"line":683},[67,152215,631],{"emptyLinePlaceholder":630},[67,152217,152218],{"class":69,"line":689},[67,152219,631],{"emptyLinePlaceholder":630},[67,152221,152222,152224,152227],{"class":69,"line":694},[67,152223,801],{"class":84},[67,152225,152226],{"class":110}," make_sound",[67,152228,152229],{"class":73},"(animal):\n",[67,152231,152232],{"class":69,"line":700},[67,152233,152234],{"class":73},"    animal.speak()\n",[67,152236,152237],{"class":69,"line":706},[67,152238,631],{"emptyLinePlaceholder":630},[67,152240,152241],{"class":69,"line":712},[67,152242,631],{"emptyLinePlaceholder":630},[67,152244,152245],{"class":69,"line":717},[67,152246,152247],{"class":73},"make_sound(Dog())\n",[67,152249,152250],{"class":69,"line":723},[67,152251,152252],{"class":73},"make_sound(Cat())\n",[19,152254,152255],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152257,152259],{"id":152258},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152261,152262],{},"实例属性属于对象：",[58,152264,152266],{"className":60,"code":152265,"language":62,"meta":63,"style":63},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[32,152267,152268,152276,152284],{"__ignoreMap":63},[67,152269,152270,152272,152274],{"class":69,"line":70},[67,152271,16492],{"class":84},[67,152273,9714],{"class":110},[67,152275,813],{"class":73},[67,152277,152278,152280,152282],{"class":69,"line":191},[67,152279,32578],{"class":84},[67,152281,32581],{"class":77},[67,152283,152048],{"class":73},[67,152285,152286,152288,152290,152292],{"class":69,"line":202},[67,152287,32622],{"class":77},[67,152289,151228],{"class":73},[67,152291,85],{"class":84},[67,152293,151233],{"class":73},[19,152295,152296],{},"类属性属于类，所有对象共享：",[58,152298,152300],{"className":60,"code":152299,"language":62,"meta":63,"style":63},"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",[32,152301,152302,152310,152320,152324,152332,152342,152346,152350,152363,152377,152381,152388,152395],{"__ignoreMap":63},[67,152303,152304,152306,152308],{"class":69,"line":70},[67,152305,16492],{"class":84},[67,152307,9714],{"class":110},[67,152309,813],{"class":73},[67,152311,152312,152315,152317],{"class":69,"line":191},[67,152313,152314],{"class":73},"    school ",[67,152316,85],{"class":84},[67,152318,152319],{"class":114}," \"黑马学校\"\n",[67,152321,152322],{"class":69,"line":202},[67,152323,631],{"emptyLinePlaceholder":630},[67,152325,152326,152328,152330],{"class":69,"line":641},[67,152327,32578],{"class":84},[67,152329,32581],{"class":77},[67,152331,152048],{"class":73},[67,152333,152334,152336,152338,152340],{"class":69,"line":655},[67,152335,32622],{"class":77},[67,152337,151228],{"class":73},[67,152339,85],{"class":84},[67,152341,151233],{"class":73},[67,152343,152344],{"class":69,"line":660},[67,152345,631],{"emptyLinePlaceholder":630},[67,152347,152348],{"class":69,"line":665},[67,152349,631],{"emptyLinePlaceholder":630},[67,152351,152352,152355,152357,152359,152361],{"class":69,"line":677},[67,152353,152354],{"class":73},"s1 ",[67,152356,85],{"class":84},[67,152358,151323],{"class":73},[67,152360,151326],{"class":114},[67,152362,829],{"class":73},[67,152364,152365,152368,152370,152372,152375],{"class":69,"line":683},[67,152366,152367],{"class":73},"s2 ",[67,152369,85],{"class":84},[67,152371,151323],{"class":73},[67,152373,152374],{"class":114},"\"小红\"",[67,152376,829],{"class":73},[67,152378,152379],{"class":69,"line":689},[67,152380,631],{"emptyLinePlaceholder":630},[67,152382,152383,152385],{"class":69,"line":694},[67,152384,1626],{"class":77},[67,152386,152387],{"class":73},"(s1.school)\n",[67,152389,152390,152392],{"class":69,"line":700},[67,152391,1626],{"class":77},[67,152393,152394],{"class":73},"(s2.school)\n",[67,152396,152397,152399],{"class":69,"line":706},[67,152398,1626],{"class":77},[67,152400,152401],{"class":73},"(Student.school)\n",[19,152403,152404],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152406,152408],{"id":152407},"_1113-类方法和静态方法","11.13 类方法和静态方法",[391,152410,152412],{"id":152411},"_11131-类方法","11.13.1 类方法",[19,152414,152415,152416,152419,152420,230],{},"类方法使用 ",[32,152417,152418],{},"@classmethod","，第一个参数通常是 ",[32,152421,152422],{},"cls",[58,152424,152426],{"className":60,"code":152425,"language":62,"meta":63,"style":63},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[32,152427,152428,152436,152444,152448,152456,152466,152476,152480,152484],{"__ignoreMap":63},[67,152429,152430,152432,152434],{"class":69,"line":70},[67,152431,16492],{"class":84},[67,152433,9714],{"class":110},[67,152435,813],{"class":73},[67,152437,152438,152440,152442],{"class":69,"line":191},[67,152439,152314],{"class":73},[67,152441,85],{"class":84},[67,152443,152319],{"class":114},[67,152445,152446],{"class":69,"line":202},[67,152447,631],{"emptyLinePlaceholder":630},[67,152449,152450,152453],{"class":69,"line":641},[67,152451,152452],{"class":110},"    @",[67,152454,152455],{"class":77},"classmethod\n",[67,152457,152458,152460,152463],{"class":69,"line":655},[67,152459,32578],{"class":84},[67,152461,152462],{"class":110}," get_school",[67,152464,152465],{"class":73},"(cls):\n",[67,152467,152468,152470,152473],{"class":69,"line":660},[67,152469,16550],{"class":84},[67,152471,152472],{"class":77}," cls",[67,152474,152475],{"class":73},".school\n",[67,152477,152478],{"class":69,"line":665},[67,152479,631],{"emptyLinePlaceholder":630},[67,152481,152482],{"class":69,"line":677},[67,152483,631],{"emptyLinePlaceholder":630},[67,152485,152486,152488],{"class":69,"line":683},[67,152487,1626],{"class":77},[67,152489,152490],{"class":73},"(Student.get_school())\n",[391,152492,152494],{"id":152493},"_11132-静态方法","11.13.2 静态方法",[19,152496,152497,152498,152501],{},"静态方法使用 ",[32,152499,152500],{},"@staticmethod","，不需要访问实例和类。",[58,152503,152505],{"className":60,"code":152504,"language":62,"meta":63,"style":63},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[32,152506,152507,152516,152523,152532,152543,152547,152551],{"__ignoreMap":63},[67,152508,152509,152511,152514],{"class":69,"line":70},[67,152510,16492],{"class":84},[67,152512,152513],{"class":110}," MathUtils",[67,152515,813],{"class":73},[67,152517,152518,152520],{"class":69,"line":191},[67,152519,152452],{"class":110},[67,152521,152522],{"class":77},"staticmethod\n",[67,152524,152525,152527,152529],{"class":69,"line":202},[67,152526,32578],{"class":84},[67,152528,7026],{"class":110},[67,152530,152531],{"class":73},"(a, b):\n",[67,152533,152534,152536,152538,152540],{"class":69,"line":641},[67,152535,16550],{"class":84},[67,152537,12669],{"class":73},[67,152539,2471],{"class":84},[67,152541,152542],{"class":73}," b\n",[67,152544,152545],{"class":69,"line":655},[67,152546,631],{"emptyLinePlaceholder":630},[67,152548,152549],{"class":69,"line":660},[67,152550,631],{"emptyLinePlaceholder":630},[67,152552,152553,152555,152558,152560,152562,152564],{"class":69,"line":665},[67,152554,1626],{"class":77},[67,152556,152557],{"class":73},"(MathUtils.add(",[67,152559,2209],{"class":77},[67,152561,1868],{"class":73},[67,152563,2077],{"class":77},[67,152565,1050],{"class":73},[19,152567,152568],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152570,152572],{"id":152571},"_1114-dataclass","11.14 dataclass",[19,152574,152575,152578],{},[32,152576,152577],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[58,152580,152582],{"className":60,"code":152581,"language":62,"meta":63,"style":63},"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",[32,152583,152584,152596,152600,152604,152609,152617,152625,152633,152641,152645,152649,152669],{"__ignoreMap":63},[67,152585,152586,152588,152591,152593],{"class":69,"line":70},[67,152587,32515],{"class":84},[67,152589,152590],{"class":73}," dataclasses ",[67,152592,622],{"class":84},[67,152594,152595],{"class":73}," dataclass\n",[67,152597,152598],{"class":69,"line":191},[67,152599,631],{"emptyLinePlaceholder":630},[67,152601,152602],{"class":69,"line":202},[67,152603,631],{"emptyLinePlaceholder":630},[67,152605,152606],{"class":69,"line":641},[67,152607,152608],{"class":110},"@dataclass\n",[67,152610,152611,152613,152615],{"class":69,"line":655},[67,152612,16492],{"class":84},[67,152614,9714],{"class":110},[67,152616,813],{"class":73},[67,152618,152619,152622],{"class":69,"line":660},[67,152620,152621],{"class":73},"    name: ",[67,152623,152624],{"class":77},"str\n",[67,152626,152627,152630],{"class":69,"line":665},[67,152628,152629],{"class":73},"    age: ",[67,152631,152632],{"class":77},"int\n",[67,152634,152635,152638],{"class":69,"line":677},[67,152636,152637],{"class":73},"    score: ",[67,152639,152640],{"class":77},"float\n",[67,152642,152643],{"class":69,"line":683},[67,152644,631],{"emptyLinePlaceholder":630},[67,152646,152647],{"class":69,"line":689},[67,152648,631],{"emptyLinePlaceholder":630},[67,152650,152651,152653,152655,152657,152659,152661,152663,152665,152667],{"class":69,"line":694},[67,152652,150919],{"class":73},[67,152654,85],{"class":84},[67,152656,151323],{"class":73},[67,152658,151326],{"class":114},[67,152660,1868],{"class":73},[67,152662,2639],{"class":77},[67,152664,1868],{"class":73},[67,152666,2977],{"class":77},[67,152668,829],{"class":73},[67,152670,152671,152673],{"class":69,"line":700},[67,152672,1626],{"class":77},[67,152674,151480],{"class":73},[19,152676,152677,152678,2204,152680,152683],{},"它会自动生成 ",[32,152679,32606],{},[32,152681,152682],{},"__repr__"," 等方法。适合数据模型类。",[14,152685,152687],{"id":152686},"_1115-小案例学生类","11.15 小案例：学生类",[58,152689,152691],{"className":60,"code":152690,"language":62,"meta":63,"style":63},"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",[32,152692,152693,152701,152710,152722,152732,152742,152752,152756,152765,152778,152782,152791,152797,152809,152821,152833,152845,152849,152853,152859,152869,152878,152888,152896,152904,152913,152917,152921,152929,152965,152969,152973,152998,153005],{"__ignoreMap":63},[67,152694,152695,152697,152699],{"class":69,"line":70},[67,152696,16492],{"class":84},[67,152698,9714],{"class":110},[67,152700,813],{"class":73},[67,152702,152703,152705,152707],{"class":69,"line":191},[67,152704,32578],{"class":84},[67,152706,32581],{"class":77},[67,152708,152709],{"class":73},"(self, student_id, name, age, score):\n",[67,152711,152712,152714,152717,152719],{"class":69,"line":202},[67,152713,32622],{"class":77},[67,152715,152716],{"class":73},".student_id ",[67,152718,85],{"class":84},[67,152720,152721],{"class":73}," student_id\n",[67,152723,152724,152726,152728,152730],{"class":69,"line":641},[67,152725,32622],{"class":77},[67,152727,151228],{"class":73},[67,152729,85],{"class":84},[67,152731,151233],{"class":73},[67,152733,152734,152736,152738,152740],{"class":69,"line":655},[67,152735,32622],{"class":77},[67,152737,151240],{"class":73},[67,152739,85],{"class":84},[67,152741,151245],{"class":73},[67,152743,152744,152746,152748,152750],{"class":69,"line":660},[67,152745,32622],{"class":77},[67,152747,151252],{"class":73},[67,152749,85],{"class":84},[67,152751,3433],{"class":73},[67,152753,152754],{"class":69,"line":665},[67,152755,631],{"emptyLinePlaceholder":630},[67,152757,152758,152760,152763],{"class":69,"line":677},[67,152759,32578],{"class":84},[67,152761,152762],{"class":110}," is_passed",[67,152764,32584],{"class":73},[67,152766,152767,152769,152771,152773,152775],{"class":69,"line":683},[67,152768,16550],{"class":84},[67,152770,40641],{"class":77},[67,152772,151252],{"class":73},[67,152774,3553],{"class":84},[67,152776,152777],{"class":77}," 60\n",[67,152779,152780],{"class":69,"line":689},[67,152781,631],{"emptyLinePlaceholder":630},[67,152783,152784,152786,152789],{"class":69,"line":694},[67,152785,32578],{"class":84},[67,152787,152788],{"class":110}," to_dict",[67,152790,32584],{"class":73},[67,152792,152793,152795],{"class":69,"line":700},[67,152794,16550],{"class":84},[67,152796,17369],{"class":73},[67,152798,152799,152802,152804,152806],{"class":69,"line":706},[67,152800,152801],{"class":114},"            \"student_id\"",[67,152803,53203],{"class":73},[67,152805,32600],{"class":77},[67,152807,152808],{"class":73},".student_id,\n",[67,152810,152811,152814,152816,152818],{"class":69,"line":712},[67,152812,152813],{"class":114},"            \"name\"",[67,152815,53203],{"class":73},[67,152817,32600],{"class":77},[67,152819,152820],{"class":73},".name,\n",[67,152822,152823,152826,152828,152830],{"class":69,"line":717},[67,152824,152825],{"class":114},"            \"age\"",[67,152827,53203],{"class":73},[67,152829,32600],{"class":77},[67,152831,152832],{"class":73},".age,\n",[67,152834,152835,152838,152840,152842],{"class":69,"line":723},[67,152836,152837],{"class":114},"            \"score\"",[67,152839,53203],{"class":73},[67,152841,32600],{"class":77},[67,152843,152844],{"class":73},".score,\n",[67,152846,152847],{"class":69,"line":729},[67,152848,4361],{"class":73},[67,152850,152851],{"class":69,"line":735},[67,152852,631],{"emptyLinePlaceholder":630},[67,152854,152855,152857],{"class":69,"line":741},[67,152856,152452],{"class":110},[67,152858,152455],{"class":77},[67,152860,152861,152863,152866],{"class":69,"line":747},[67,152862,32578],{"class":84},[67,152864,152865],{"class":110}," from_dict",[67,152867,152868],{"class":73},"(cls, data):\n",[67,152870,152871,152873,152875],{"class":69,"line":753},[67,152872,16550],{"class":84},[67,152874,152472],{"class":77},[67,152876,152877],{"class":73},"(\n",[67,152879,152880,152883,152886],{"class":69,"line":758},[67,152881,152882],{"class":73},"            data[",[67,152884,152885],{"class":114},"\"student_id\"",[67,152887,89595],{"class":73},[67,152889,152890,152892,152894],{"class":69,"line":764},[67,152891,152882],{"class":73},[67,152893,64439],{"class":114},[67,152895,89595],{"class":73},[67,152897,152898,152900,152902],{"class":69,"line":770},[67,152899,152882],{"class":73},[67,152901,70884],{"class":114},[67,152903,89595],{"class":73},[67,152905,152906,152908,152911],{"class":69,"line":776},[67,152907,152882],{"class":73},[67,152909,152910],{"class":114},"\"score\"",[67,152912,89595],{"class":73},[67,152914,152915],{"class":69,"line":782},[67,152916,39894],{"class":73},[67,152918,152919],{"class":69,"line":788},[67,152920,631],{"emptyLinePlaceholder":630},[67,152922,152923,152925,152927],{"class":69,"line":793},[67,152924,32578],{"class":84},[67,152926,151419],{"class":77},[67,152928,32584],{"class":73},[67,152930,152931,152933,152935,152937,152939,152942,152944,152947,152949,152951,152953,152955,152957,152959,152961,152963],{"class":69,"line":798},[67,152932,16550],{"class":84},[67,152934,151428],{"class":84},[67,152936,2243],{"class":114},[67,152938,150890],{"class":77},[67,152940,152941],{"class":73},".student_id",[67,152943,2934],{"class":77},[67,152945,152946],{"class":77}," {self",[67,152948,82061],{"class":73},[67,152950,2934],{"class":77},[67,152952,152946],{"class":77},[67,152954,82073],{"class":73},[67,152956,2934],{"class":77},[67,152958,152946],{"class":77},[67,152960,151300],{"class":73},[67,152962,2934],{"class":77},[67,152964,26923],{"class":114},[67,152966,152967],{"class":69,"line":816},[67,152968,631],{"emptyLinePlaceholder":630},[67,152970,152971],{"class":69,"line":832},[67,152972,631],{"emptyLinePlaceholder":630},[67,152974,152975,152977,152979,152981,152984,152986,152988,152990,152992,152994,152996],{"class":69,"line":843},[67,152976,150919],{"class":73},[67,152978,85],{"class":84},[67,152980,151323],{"class":73},[67,152982,152983],{"class":114},"\"001\"",[67,152985,1868],{"class":73},[67,152987,151326],{"class":114},[67,152989,1868],{"class":73},[67,152991,2639],{"class":77},[67,152993,1868],{"class":73},[67,152995,2977],{"class":77},[67,152997,829],{"class":73},[67,152999,153000,153002],{"class":69,"line":848},[67,153001,1626],{"class":77},[67,153003,153004],{"class":73},"(student.is_passed())\n",[67,153006,153007,153009],{"class":69,"line":863},[67,153008,1626],{"class":77},[67,153010,153011],{"class":73},"(student.to_dict())\n",[19,153013,153014,1264,153017,153020],{},[32,153015,153016],{},"to_dict()",[32,153018,153019],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153022,153024],{"id":153023},"_1116-易错点","11.16 易错点",[26,153026,153027,153033,153039,153044,153047,153050],{},[29,153028,153029,153030,230],{},"类名推荐使用大驼峰，如 ",[32,153031,153032],{},"StudentManager",[29,153034,153035,153036,153038],{},"方法第一个参数必须写 ",[32,153037,32600],{},"，调用时不用传。",[29,153040,153041,153043],{},[32,153042,32606],{}," 不是普通方法，它在创建对象时自动执行。",[29,153045,153046],{},"私有属性不是绝对安全，只是约定和名称改写。",[29,153048,153049],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[29,153051,153052],{},"类中方法太多时，说明职责可能过重。",[14,153054,153056],{"id":153055},"_1117-本章练习","11.17 本章练习",[26,153058,153059,153065,153071,153076,153089],{},[29,153060,153061,153062,153064],{},"定义 ",[32,153063,151006],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[29,153066,153061,153067,153070],{},[32,153068,153069],{},"Account"," 类，实现存款、取款、查询余额。",[29,153072,153061,153073,153075],{},[32,153074,19023],{}," 类，计算圆的周长和面积。",[29,153077,153061,153078,2204,153081,153084,153085,153088],{},[32,153079,153080],{},"Dog",[32,153082,153083],{},"Cat"," 类，并用同一个函数调用它们的 ",[32,153086,153087],{},"speak()"," 方法。",[29,153090,106039,153091,153093,153094,230],{},[32,153092,152577],{}," 定义一个商品类 ",[32,153095,153096],{},"Product",[1903,153098,153099],{},"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":63,"searchDepth":191,"depth":191,"links":153101},[153102,153103,153104,153105,153106,153107,153109,153110,153111,153112,153113,153114,153115,153119,153120,153121,153122],{"id":150770,"depth":191,"text":150771},{"id":150953,"depth":191,"text":150954},{"id":151017,"depth":191,"text":151018},{"id":151094,"depth":191,"text":151095},{"id":151193,"depth":191,"text":151194},{"id":151357,"depth":191,"text":153108},"11.6 str",{"id":151483,"depth":191,"text":151484},{"id":151749,"depth":191,"text":151750},{"id":151863,"depth":191,"text":151864},{"id":152018,"depth":191,"text":152019},{"id":152142,"depth":191,"text":152143},{"id":152258,"depth":191,"text":152259},{"id":152407,"depth":191,"text":152408,"children":153116},[153117,153118],{"id":152411,"depth":202,"text":152412},{"id":152493,"depth":202,"text":152494},{"id":152571,"depth":191,"text":152572},{"id":152686,"depth":191,"text":152687},{"id":153023,"depth":191,"text":153024},{"id":153055,"depth":191,"text":153056},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150762,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153129,"title":153130,"body":153131,"description":25173,"extension":1930,"meta":156444,"navigation":630,"path":156445,"seo":156446,"stem":156447,"__hash__":156448},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153132,"toc":156420},[153133,153136,153140,153143,153146,153175,153178,153186,153190,153194,153197,153220,153223,153229,153233,154679,154682,154703,154707,154710,154722,154725,154909,154912,155038,155041,155045,155049,155185,155189,155275,155279,155361,155365,155402,155406,155595,155599,155602,155832,155836,155839,156020,156023,156027,156030,156036,156039,156065,156069,156072,156086,156089,156114,156117,156131,156134,156151,156154,156171,156174,156191,156195,156221,156225,156248,156252,156255,156257,156263,156265,156286,156289,156295,156301,156305,156308,156384,156387,156391,156417],[10,153134,153130],{"id":153135},"_12-综合案例与复习路线",[14,153137,153139],{"id":153138},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153141,153142],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153144,153145],{},"一个合格的入门综合项目最好覆盖：",[26,153147,153148,153151,153154,153157,153160,153163,153166,153169,153172],{},[29,153149,153150],{},"输入输出。",[29,153152,153153],{},"判断和循环。",[29,153155,153156],{},"函数拆分。",[29,153158,153159],{},"列表、字典等容器。",[29,153161,153162],{},"文件持久化。",[29,153164,153165],{},"异常处理。",[29,153167,153168],{},"模块拆分。",[29,153170,153171],{},"可选：面向对象。",[29,153173,153174],{},"可选：数据可视化。",[19,153176,153177],{},"本章整理两个方向：",[26,153179,153180,153183],{},[29,153181,153182],{},"学生管理系统。",[29,153184,153185],{},"销售数据统计和可视化。",[14,153187,153189],{"id":153188},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[391,153191,153193],{"id":153192},"_1221-需求","12.2.1 需求",[19,153195,153196],{},"实现一个命令行学生管理系统：",[26,153198,153199,153202,153205,153208,153211,153214,153217],{},[29,153200,153201],{},"添加学生。",[29,153203,153204],{},"删除学生。",[29,153206,153207],{},"修改学生。",[29,153209,153210],{},"查询学生。",[29,153212,153213],{},"显示所有学生。",[29,153215,153216],{},"保存到 JSON 文件。",[29,153218,153219],{},"程序启动时自动读取 JSON 文件。",[19,153221,153222],{},"学生字段：",[58,153224,153227],{"className":153225,"code":153226,"language":603,"meta":63},[601],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[32,153228,153226],{"__ignoreMap":63},[14,153230,153232],{"id":153231},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[58,153234,153236],{"className":60,"code":153235,"language":62,"meta":63,"style":63},"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",[32,153237,153238,153244,153254,153258,153272,153276,153280,153289,153301,153307,153311,153317,153348,153358,153365,153376,153382,153386,153390,153400,153431,153457,153461,153465,153474,153485,153496,153507,153518,153529,153540,153551,153555,153559,153569,153581,153597,153604,153611,153615,153619,153629,153637,153644,153657,153667,153678,153682,153686,153695,153703,153709,153721,153729,153740,153744,153748,153757,153773,153777,153784,153795,153800,153804,153820,153835,153850,153854,153859,153867,153875,153883,153891,153895,153900,153911,153915,153919,153928,153943,153953,153957,153969,153980,153984,153988,153993,153997,154008,154012,154016,154025,154040,154048,154052,154064,154074,154078,154082,154097,154110,154123,154127,154140,154152,154164,154168,154172,154183,154187,154191,154200,154215,154223,154227,154239,154249,154253,154257,154262,154266,154270,154280,154286,154308,154327,154346,154365,154370,154374,154378,154387,154395,154406,154410,154414,154440,154450,154455,154459,154463,154471,154481,154485,154493,154498,154514,154518,154532,154537,154551,154556,154569,154574,154587,154592,154605,154610,154623,154634,154638,154644,154655,154659,154663,154675],{"__ignoreMap":63},[67,153239,153240,153242],{"class":69,"line":70},[67,153241,622],{"class":84},[67,153243,148529],{"class":73},[67,153245,153246,153248,153250,153252],{"class":69,"line":191},[67,153247,32515],{"class":84},[67,153249,109749],{"class":73},[67,153251,622],{"class":84},[67,153253,109754],{"class":73},[67,153255,153256],{"class":69,"line":202},[67,153257,631],{"emptyLinePlaceholder":630},[67,153259,153260,153263,153265,153267,153270],{"class":69,"line":641},[67,153261,153262],{"class":77},"DATA_FILE",[67,153264,671],{"class":84},[67,153266,109983],{"class":73},[67,153268,153269],{"class":114},"\"students.json\"",[67,153271,829],{"class":73},[67,153273,153274],{"class":69,"line":655},[67,153275,631],{"emptyLinePlaceholder":630},[67,153277,153278],{"class":69,"line":660},[67,153279,631],{"emptyLinePlaceholder":630},[67,153281,153282,153284,153287],{"class":69,"line":665},[67,153283,801],{"class":84},[67,153285,153286],{"class":110}," load_students",[67,153288,33723],{"class":73},[67,153290,153291,153293,153295,153298],{"class":69,"line":677},[67,153292,897],{"class":84},[67,153294,40698],{"class":84},[67,153296,153297],{"class":77}," DATA_FILE",[67,153299,153300],{"class":73},".exists():\n",[67,153302,153303,153305],{"class":69,"line":683},[67,153304,16550],{"class":84},[67,153306,53603],{"class":73},[67,153308,153309],{"class":69,"line":689},[67,153310,631],{"emptyLinePlaceholder":630},[67,153312,153313,153315],{"class":69,"line":694},[67,153314,127222],{"class":84},[67,153316,813],{"class":73},[67,153318,153319,153322,153324,153326,153328,153330,153332,153334,153336,153338,153340,153342,153344,153346],{"class":69,"line":700},[67,153320,153321],{"class":84},"        with",[67,153323,148229],{"class":77},[67,153325,854],{"class":73},[67,153327,153262],{"class":77},[67,153329,1868],{"class":73},[67,153331,148239],{"class":114},[67,153333,1868],{"class":73},[67,153335,148244],{"class":7033},[67,153337,85],{"class":84},[67,153339,148249],{"class":114},[67,153341,15512],{"class":73},[67,153343,649],{"class":84},[67,153345,149591],{"class":7033},[67,153347,813],{"class":73},[67,153349,153350,153352,153354,153356],{"class":69,"line":706},[67,153351,17529],{"class":84},[67,153353,149602],{"class":73},[67,153355,47122],{"class":7033},[67,153357,829],{"class":73},[67,153359,153360,153362],{"class":69,"line":712},[67,153361,127250],{"class":84},[67,153363,153364],{"class":73}," json.JSONDecodeError:\n",[67,153366,153367,153369,153371,153374],{"class":69,"line":717},[67,153368,34220],{"class":77},[67,153370,854],{"class":73},[67,153372,153373],{"class":114},"\"数据文件格式错误，已使用空数据启动\"",[67,153375,829],{"class":73},[67,153377,153378,153380],{"class":69,"line":723},[67,153379,16550],{"class":84},[67,153381,53603],{"class":73},[67,153383,153384],{"class":69,"line":729},[67,153385,631],{"emptyLinePlaceholder":630},[67,153387,153388],{"class":69,"line":735},[67,153389,631],{"emptyLinePlaceholder":630},[67,153391,153392,153394,153397],{"class":69,"line":741},[67,153393,801],{"class":84},[67,153395,153396],{"class":110}," save_students",[67,153398,153399],{"class":73},"(students):\n",[67,153401,153402,153404,153406,153408,153410,153412,153415,153417,153419,153421,153423,153425,153427,153429],{"class":69,"line":747},[67,153403,35947],{"class":84},[67,153405,148229],{"class":77},[67,153407,854],{"class":73},[67,153409,153262],{"class":77},[67,153411,1868],{"class":73},[67,153413,153414],{"class":114},"\"w\"",[67,153416,1868],{"class":73},[67,153418,148244],{"class":7033},[67,153420,85],{"class":84},[67,153422,148249],{"class":114},[67,153424,15512],{"class":73},[67,153426,649],{"class":84},[67,153428,149591],{"class":7033},[67,153430,813],{"class":73},[67,153432,153433,153436,153438,153440,153442,153444,153446,153448,153451,153453,153455],{"class":69,"line":753},[67,153434,153435],{"class":73},"        json.dump(students, ",[67,153437,47122],{"class":7033},[67,153439,1868],{"class":73},[67,153441,148575],{"class":7033},[67,153443,85],{"class":84},[67,153445,35756],{"class":77},[67,153447,1868],{"class":73},[67,153449,153450],{"class":7033},"indent",[67,153452,85],{"class":84},[67,153454,2077],{"class":77},[67,153456,829],{"class":73},[67,153458,153459],{"class":69,"line":758},[67,153460,631],{"emptyLinePlaceholder":630},[67,153462,153463],{"class":69,"line":764},[67,153464,631],{"emptyLinePlaceholder":630},[67,153466,153467,153469,153472],{"class":69,"line":770},[67,153468,801],{"class":84},[67,153470,153471],{"class":110}," show_menu",[67,153473,33723],{"class":73},[67,153475,153476,153478,153480,153483],{"class":69,"line":776},[67,153477,851],{"class":77},[67,153479,854],{"class":73},[67,153481,153482],{"class":114},"\"====== 学生管理系统 ======\"",[67,153484,829],{"class":73},[67,153486,153487,153489,153491,153494],{"class":69,"line":782},[67,153488,851],{"class":77},[67,153490,854],{"class":73},[67,153492,153493],{"class":114},"\"1. 添加学生\"",[67,153495,829],{"class":73},[67,153497,153498,153500,153502,153505],{"class":69,"line":788},[67,153499,851],{"class":77},[67,153501,854],{"class":73},[67,153503,153504],{"class":114},"\"2. 删除学生\"",[67,153506,829],{"class":73},[67,153508,153509,153511,153513,153516],{"class":69,"line":793},[67,153510,851],{"class":77},[67,153512,854],{"class":73},[67,153514,153515],{"class":114},"\"3. 修改学生\"",[67,153517,829],{"class":73},[67,153519,153520,153522,153524,153527],{"class":69,"line":798},[67,153521,851],{"class":77},[67,153523,854],{"class":73},[67,153525,153526],{"class":114},"\"4. 查询学生\"",[67,153528,829],{"class":73},[67,153530,153531,153533,153535,153538],{"class":69,"line":816},[67,153532,851],{"class":77},[67,153534,854],{"class":73},[67,153536,153537],{"class":114},"\"5. 显示所有学生\"",[67,153539,829],{"class":73},[67,153541,153542,153544,153546,153549],{"class":69,"line":832},[67,153543,851],{"class":77},[67,153545,854],{"class":73},[67,153547,153548],{"class":114},"\"0. 退出系统\"",[67,153550,829],{"class":73},[67,153552,153553],{"class":69,"line":843},[67,153554,631],{"emptyLinePlaceholder":630},[67,153556,153557],{"class":69,"line":848},[67,153558,631],{"emptyLinePlaceholder":630},[67,153560,153561,153563,153566],{"class":69,"line":863},[67,153562,801],{"class":84},[67,153564,153565],{"class":110}," find_student",[67,153567,153568],{"class":73},"(students, student_id):\n",[67,153570,153571,153573,153576,153578],{"class":69,"line":876},[67,153572,935],{"class":84},[67,153574,153575],{"class":73}," student ",[67,153577,941],{"class":84},[67,153579,153580],{"class":73}," students:\n",[67,153582,153583,153585,153588,153590,153592,153594],{"class":69,"line":889},[67,153584,4329],{"class":84},[67,153586,153587],{"class":73}," student[",[67,153589,152885],{"class":114},[67,153591,81],{"class":73},[67,153593,4774],{"class":84},[67,153595,153596],{"class":73}," student_id:\n",[67,153598,153599,153601],{"class":69,"line":894},[67,153600,17529],{"class":84},[67,153602,153603],{"class":73}," student\n",[67,153605,153606,153608],{"class":69,"line":911},[67,153607,5910],{"class":84},[67,153609,153610],{"class":77}," None\n",[67,153612,153613],{"class":69,"line":927},[67,153614,631],{"emptyLinePlaceholder":630},[67,153616,153617],{"class":69,"line":932},[67,153618,631],{"emptyLinePlaceholder":630},[67,153620,153621,153623,153626],{"class":69,"line":955},[67,153622,801],{"class":84},[67,153624,153625],{"class":110}," input_int",[67,153627,153628],{"class":73},"(prompt):\n",[67,153630,153631,153633,153635],{"class":69,"line":971},[67,153632,4084],{"class":84},[67,153634,97051],{"class":77},[67,153636,813],{"class":73},[67,153638,153639,153642],{"class":69,"line":1010},[67,153640,153641],{"class":84},"        try",[67,153643,813],{"class":73},[67,153645,153646,153648,153650,153652,153654],{"class":69,"line":1016},[67,153647,17529],{"class":84},[67,153649,4215],{"class":77},[67,153651,854],{"class":73},[67,153653,55583],{"class":77},[67,153655,153656],{"class":73},"(prompt))\n",[67,153658,153659,153662,153665],{"class":69,"line":1021},[67,153660,153661],{"class":84},"        except",[67,153663,153664],{"class":77}," ValueError",[67,153666,813],{"class":73},[67,153668,153669,153671,153673,153676],{"class":69,"line":1034},[67,153670,36419],{"class":77},[67,153672,854],{"class":73},[67,153674,153675],{"class":114},"\"请输入整数\"",[67,153677,829],{"class":73},[67,153679,153680],{"class":69,"line":1053},[67,153681,631],{"emptyLinePlaceholder":630},[67,153683,153684],{"class":69,"line":1070},[67,153685,631],{"emptyLinePlaceholder":630},[67,153687,153688,153690,153693],{"class":69,"line":1083},[67,153689,801],{"class":84},[67,153691,153692],{"class":110}," input_float",[67,153694,153628],{"class":73},[67,153696,153697,153699,153701],{"class":69,"line":1088},[67,153698,4084],{"class":84},[67,153700,97051],{"class":77},[67,153702,813],{"class":73},[67,153704,153705,153707],{"class":69,"line":1093},[67,153706,153641],{"class":84},[67,153708,813],{"class":73},[67,153710,153711,153713,153715,153717,153719],{"class":69,"line":1110},[67,153712,17529],{"class":84},[67,153714,111235],{"class":77},[67,153716,854],{"class":73},[67,153718,55583],{"class":77},[67,153720,153656],{"class":73},[67,153722,153723,153725,153727],{"class":69,"line":11603},[67,153724,153661],{"class":84},[67,153726,153664],{"class":77},[67,153728,813],{"class":73},[67,153730,153731,153733,153735,153738],{"class":69,"line":11612},[67,153732,36419],{"class":77},[67,153734,854],{"class":73},[67,153736,153737],{"class":114},"\"请输入数字\"",[67,153739,829],{"class":73},[67,153741,153742],{"class":69,"line":11617},[67,153743,631],{"emptyLinePlaceholder":630},[67,153745,153746],{"class":69,"line":11623},[67,153747,631],{"emptyLinePlaceholder":630},[67,153749,153750,153752,153755],{"class":69,"line":11644},[67,153751,801],{"class":84},[67,153753,153754],{"class":110}," add_student",[67,153756,153399],{"class":73},[67,153758,153759,153762,153764,153766,153768,153771],{"class":69,"line":11650},[67,153760,153761],{"class":73},"    student_id ",[67,153763,85],{"class":84},[67,153765,62366],{"class":77},[67,153767,854],{"class":73},[67,153769,153770],{"class":114},"\"请输入学号:\"",[67,153772,829],{"class":73},[67,153774,153775],{"class":69,"line":11664},[67,153776,631],{"emptyLinePlaceholder":630},[67,153778,153779,153781],{"class":69,"line":11670},[67,153780,897],{"class":84},[67,153782,153783],{"class":73}," find_student(students, student_id):\n",[67,153785,153786,153788,153790,153793],{"class":69,"line":11697},[67,153787,34220],{"class":77},[67,153789,854],{"class":73},[67,153791,153792],{"class":114},"\"学号已存在\"",[67,153794,829],{"class":73},[67,153796,153797],{"class":69,"line":11706},[67,153798,153799],{"class":84},"        return\n",[67,153801,153802],{"class":69,"line":11712},[67,153803,631],{"emptyLinePlaceholder":630},[67,153805,153806,153809,153811,153813,153815,153818],{"class":69,"line":11720},[67,153807,153808],{"class":73},"    name ",[67,153810,85],{"class":84},[67,153812,62366],{"class":77},[67,153814,854],{"class":73},[67,153816,153817],{"class":114},"\"请输入姓名:\"",[67,153819,829],{"class":73},[67,153821,153822,153825,153827,153830,153833],{"class":69,"line":11725},[67,153823,153824],{"class":73},"    age ",[67,153826,85],{"class":84},[67,153828,153829],{"class":73}," input_int(",[67,153831,153832],{"class":114},"\"请输入年龄:\"",[67,153834,829],{"class":73},[67,153836,153837,153840,153842,153845,153848],{"class":69,"line":18401},[67,153838,153839],{"class":73},"    score ",[67,153841,85],{"class":84},[67,153843,153844],{"class":73}," input_float(",[67,153846,153847],{"class":114},"\"请输入成绩:\"",[67,153849,829],{"class":73},[67,153851,153852],{"class":69,"line":18407},[67,153853,631],{"emptyLinePlaceholder":630},[67,153855,153856],{"class":69,"line":18430},[67,153857,153858],{"class":73},"    students.append({\n",[67,153860,153861,153864],{"class":69,"line":18436},[67,153862,153863],{"class":114},"        \"student_id\"",[67,153865,153866],{"class":73},": student_id,\n",[67,153868,153869,153872],{"class":69,"line":18459},[67,153870,153871],{"class":114},"        \"name\"",[67,153873,153874],{"class":73},": name,\n",[67,153876,153877,153880],{"class":69,"line":18473},[67,153878,153879],{"class":114},"        \"age\"",[67,153881,153882],{"class":73},": age,\n",[67,153884,153885,153888],{"class":69,"line":18493},[67,153886,153887],{"class":114},"        \"score\"",[67,153889,153890],{"class":73},": score,\n",[67,153892,153893],{"class":69,"line":18499},[67,153894,35230],{"class":73},[67,153896,153897],{"class":69,"line":18510},[67,153898,153899],{"class":73},"    save_students(students)\n",[67,153901,153902,153904,153906,153909],{"class":69,"line":18533},[67,153903,851],{"class":77},[67,153905,854],{"class":73},[67,153907,153908],{"class":114},"\"添加成功\"",[67,153910,829],{"class":73},[67,153912,153913],{"class":69,"line":18555},[67,153914,631],{"emptyLinePlaceholder":630},[67,153916,153917],{"class":69,"line":18560},[67,153918,631],{"emptyLinePlaceholder":630},[67,153920,153921,153923,153926],{"class":69,"line":18566},[67,153922,801],{"class":84},[67,153924,153925],{"class":110}," delete_student",[67,153927,153399],{"class":73},[67,153929,153930,153932,153934,153936,153938,153941],{"class":69,"line":18580},[67,153931,153761],{"class":73},[67,153933,85],{"class":84},[67,153935,62366],{"class":77},[67,153937,854],{"class":73},[67,153939,153940],{"class":114},"\"请输入要删除的学号:\"",[67,153942,829],{"class":73},[67,153944,153945,153948,153950],{"class":69,"line":18593},[67,153946,153947],{"class":73},"    student ",[67,153949,85],{"class":84},[67,153951,153952],{"class":73}," find_student(students, student_id)\n",[67,153954,153955],{"class":69,"line":18598},[67,153956,631],{"emptyLinePlaceholder":630},[67,153958,153959,153961,153963,153965,153967],{"class":69,"line":18612},[67,153960,897],{"class":84},[67,153962,153575],{"class":73},[67,153964,40695],{"class":84},[67,153966,40701],{"class":77},[67,153968,813],{"class":73},[67,153970,153971,153973,153975,153978],{"class":69,"line":18617},[67,153972,34220],{"class":77},[67,153974,854],{"class":73},[67,153976,153977],{"class":114},"\"学生不存在\"",[67,153979,829],{"class":73},[67,153981,153982],{"class":69,"line":18623},[67,153983,153799],{"class":84},[67,153985,153986],{"class":69,"line":18628},[67,153987,631],{"emptyLinePlaceholder":630},[67,153989,153990],{"class":69,"line":18642},[67,153991,153992],{"class":73},"    students.remove(student)\n",[67,153994,153995],{"class":69,"line":18647},[67,153996,153899],{"class":73},[67,153998,153999,154001,154003,154006],{"class":69,"line":18652},[67,154000,851],{"class":77},[67,154002,854],{"class":73},[67,154004,154005],{"class":114},"\"删除成功\"",[67,154007,829],{"class":73},[67,154009,154010],{"class":69,"line":18666},[67,154011,631],{"emptyLinePlaceholder":630},[67,154013,154014],{"class":69,"line":18678},[67,154015,631],{"emptyLinePlaceholder":630},[67,154017,154018,154020,154023],{"class":69,"line":18683},[67,154019,801],{"class":84},[67,154021,154022],{"class":110}," update_student",[67,154024,153399],{"class":73},[67,154026,154027,154029,154031,154033,154035,154038],{"class":69,"line":18696},[67,154028,153761],{"class":73},[67,154030,85],{"class":84},[67,154032,62366],{"class":77},[67,154034,854],{"class":73},[67,154036,154037],{"class":114},"\"请输入要修改的学号:\"",[67,154039,829],{"class":73},[67,154041,154042,154044,154046],{"class":69,"line":18701},[67,154043,153947],{"class":73},[67,154045,85],{"class":84},[67,154047,153952],{"class":73},[67,154049,154050],{"class":69,"line":18706},[67,154051,631],{"emptyLinePlaceholder":630},[67,154053,154054,154056,154058,154060,154062],{"class":69,"line":18711},[67,154055,897],{"class":84},[67,154057,153575],{"class":73},[67,154059,40695],{"class":84},[67,154061,40701],{"class":77},[67,154063,813],{"class":73},[67,154065,154066,154068,154070,154072],{"class":69,"line":18724},[67,154067,34220],{"class":77},[67,154069,854],{"class":73},[67,154071,153977],{"class":114},[67,154073,829],{"class":73},[67,154075,154076],{"class":69,"line":18729},[67,154077,153799],{"class":84},[67,154079,154080],{"class":69,"line":34402},[67,154081,631],{"emptyLinePlaceholder":630},[67,154083,154084,154086,154088,154090,154092,154095],{"class":69,"line":34408},[67,154085,153808],{"class":73},[67,154087,85],{"class":84},[67,154089,62366],{"class":77},[67,154091,854],{"class":73},[67,154093,154094],{"class":114},"\"请输入新姓名:\"",[67,154096,829],{"class":73},[67,154098,154099,154101,154103,154105,154108],{"class":69,"line":34414},[67,154100,153824],{"class":73},[67,154102,85],{"class":84},[67,154104,153829],{"class":73},[67,154106,154107],{"class":114},"\"请输入新年龄:\"",[67,154109,829],{"class":73},[67,154111,154112,154114,154116,154118,154121],{"class":69,"line":34420},[67,154113,153839],{"class":73},[67,154115,85],{"class":84},[67,154117,153844],{"class":73},[67,154119,154120],{"class":114},"\"请输入新成绩:\"",[67,154122,829],{"class":73},[67,154124,154125],{"class":69,"line":34426},[67,154126,631],{"emptyLinePlaceholder":630},[67,154128,154129,154132,154134,154136,154138],{"class":69,"line":34437},[67,154130,154131],{"class":73},"    student[",[67,154133,64439],{"class":114},[67,154135,81],{"class":73},[67,154137,85],{"class":84},[67,154139,151233],{"class":73},[67,154141,154142,154144,154146,154148,154150],{"class":69,"line":34443},[67,154143,154131],{"class":73},[67,154145,70884],{"class":114},[67,154147,81],{"class":73},[67,154149,85],{"class":84},[67,154151,151245],{"class":73},[67,154153,154154,154156,154158,154160,154162],{"class":69,"line":34463},[67,154155,154131],{"class":73},[67,154157,152910],{"class":114},[67,154159,81],{"class":73},[67,154161,85],{"class":84},[67,154163,3433],{"class":73},[67,154165,154166],{"class":69,"line":34469},[67,154167,631],{"emptyLinePlaceholder":630},[67,154169,154170],{"class":69,"line":34480},[67,154171,153899],{"class":73},[67,154173,154174,154176,154178,154181],{"class":69,"line":34486},[67,154175,851],{"class":77},[67,154177,854],{"class":73},[67,154179,154180],{"class":114},"\"修改成功\"",[67,154182,829],{"class":73},[67,154184,154185],{"class":69,"line":34492},[67,154186,631],{"emptyLinePlaceholder":630},[67,154188,154189],{"class":69,"line":34498},[67,154190,631],{"emptyLinePlaceholder":630},[67,154192,154193,154195,154198],{"class":69,"line":34504},[67,154194,801],{"class":84},[67,154196,154197],{"class":110}," query_student",[67,154199,153399],{"class":73},[67,154201,154202,154204,154206,154208,154210,154213],{"class":69,"line":34510},[67,154203,153761],{"class":73},[67,154205,85],{"class":84},[67,154207,62366],{"class":77},[67,154209,854],{"class":73},[67,154211,154212],{"class":114},"\"请输入要查询的学号:\"",[67,154214,829],{"class":73},[67,154216,154217,154219,154221],{"class":69,"line":34516},[67,154218,153947],{"class":73},[67,154220,85],{"class":84},[67,154222,153952],{"class":73},[67,154224,154225],{"class":69,"line":34522},[67,154226,631],{"emptyLinePlaceholder":630},[67,154228,154229,154231,154233,154235,154237],{"class":69,"line":34542},[67,154230,897],{"class":84},[67,154232,153575],{"class":73},[67,154234,40695],{"class":84},[67,154236,40701],{"class":77},[67,154238,813],{"class":73},[67,154240,154241,154243,154245,154247],{"class":69,"line":34548},[67,154242,34220],{"class":77},[67,154244,854],{"class":73},[67,154246,153977],{"class":114},[67,154248,829],{"class":73},[67,154250,154251],{"class":69,"line":34564},[67,154252,153799],{"class":84},[67,154254,154255],{"class":69,"line":34570},[67,154256,631],{"emptyLinePlaceholder":630},[67,154258,154259],{"class":69,"line":34584},[67,154260,154261],{"class":73},"    print_student(student)\n",[67,154263,154264],{"class":69,"line":34590},[67,154265,631],{"emptyLinePlaceholder":630},[67,154267,154268],{"class":69,"line":34605},[67,154269,631],{"emptyLinePlaceholder":630},[67,154271,154272,154274,154277],{"class":69,"line":34611},[67,154273,801],{"class":84},[67,154275,154276],{"class":110}," print_student",[67,154278,154279],{"class":73},"(student):\n",[67,154281,154282,154284],{"class":69,"line":34620},[67,154283,851],{"class":77},[67,154285,152877],{"class":73},[67,154287,154288,154291,154293,154295,154298,154301,154303,154306],{"class":69,"line":34626},[67,154289,154290],{"class":84},"        f",[67,154292,2243],{"class":114},[67,154294,2885],{"class":77},[67,154296,154297],{"class":73},"student[",[67,154299,154300],{"class":114},"'student_id'",[67,154302,2928],{"class":73},[67,154304,154305],{"class":77},"}\\t",[67,154307,26923],{"class":114},[67,154309,154310,154312,154314,154316,154318,154321,154323,154325],{"class":69,"line":34635},[67,154311,154290],{"class":84},[67,154313,2243],{"class":114},[67,154315,2885],{"class":77},[67,154317,154297],{"class":73},[67,154319,154320],{"class":114},"'name'",[67,154322,2928],{"class":73},[67,154324,154305],{"class":77},[67,154326,26923],{"class":114},[67,154328,154329,154331,154333,154335,154337,154340,154342,154344],{"class":69,"line":34641},[67,154330,154290],{"class":84},[67,154332,2243],{"class":114},[67,154334,2885],{"class":77},[67,154336,154297],{"class":73},[67,154338,154339],{"class":114},"'age'",[67,154341,2928],{"class":73},[67,154343,154305],{"class":77},[67,154345,26923],{"class":114},[67,154347,154348,154350,154352,154354,154356,154359,154361,154363],{"class":69,"line":34647},[67,154349,154290],{"class":84},[67,154351,2243],{"class":114},[67,154353,2885],{"class":77},[67,154355,154297],{"class":73},[67,154357,154358],{"class":114},"'score'",[67,154360,2928],{"class":73},[67,154362,2934],{"class":77},[67,154364,26923],{"class":114},[67,154366,154367],{"class":69,"line":34656},[67,154368,154369],{"class":73},"    )\n",[67,154371,154372],{"class":69,"line":34662},[67,154373,631],{"emptyLinePlaceholder":630},[67,154375,154376],{"class":69,"line":34673},[67,154377,631],{"emptyLinePlaceholder":630},[67,154379,154380,154382,154385],{"class":69,"line":34679},[67,154381,801],{"class":84},[67,154383,154384],{"class":110}," show_all_students",[67,154386,153399],{"class":73},[67,154388,154389,154391,154393],{"class":69,"line":34698},[67,154390,897],{"class":84},[67,154392,40698],{"class":84},[67,154394,153580],{"class":73},[67,154396,154397,154399,154401,154404],{"class":69,"line":34704},[67,154398,34220],{"class":77},[67,154400,854],{"class":73},[67,154402,154403],{"class":114},"\"暂无学生\"",[67,154405,829],{"class":73},[67,154407,154408],{"class":69,"line":34715},[67,154409,153799],{"class":84},[67,154411,154412],{"class":69,"line":34721},[67,154413,631],{"emptyLinePlaceholder":630},[67,154415,154416,154418,154420,154423,154425,154428,154430,154433,154435,154438],{"class":69,"line":34741},[67,154417,851],{"class":77},[67,154419,854],{"class":73},[67,154421,154422],{"class":114},"\"学号",[67,154424,3088],{"class":77},[67,154426,154427],{"class":114},"姓名",[67,154429,3088],{"class":77},[67,154431,154432],{"class":114},"年龄",[67,154434,3088],{"class":77},[67,154436,154437],{"class":114},"成绩\"",[67,154439,829],{"class":73},[67,154441,154442,154444,154446,154448],{"class":69,"line":34757},[67,154443,935],{"class":84},[67,154445,153575],{"class":73},[67,154447,941],{"class":84},[67,154449,153580],{"class":73},[67,154451,154452],{"class":69,"line":34763},[67,154453,154454],{"class":73},"        print_student(student)\n",[67,154456,154457],{"class":69,"line":34777},[67,154458,631],{"emptyLinePlaceholder":630},[67,154460,154461],{"class":69,"line":34783},[67,154462,631],{"emptyLinePlaceholder":630},[67,154464,154465,154467,154469],{"class":69,"line":34789},[67,154466,801],{"class":84},[67,154468,804],{"class":110},[67,154470,33723],{"class":73},[67,154472,154473,154476,154478],{"class":69,"line":34800},[67,154474,154475],{"class":73},"    students ",[67,154477,85],{"class":84},[67,154479,154480],{"class":73}," load_students()\n",[67,154482,154483],{"class":69,"line":34806},[67,154484,631],{"emptyLinePlaceholder":630},[67,154486,154487,154489,154491],{"class":69,"line":34812},[67,154488,4084],{"class":84},[67,154490,97051],{"class":77},[67,154492,813],{"class":73},[67,154494,154495],{"class":69,"line":34822},[67,154496,154497],{"class":73},"        show_menu()\n",[67,154499,154500,154503,154505,154507,154509,154512],{"class":69,"line":34828},[67,154501,154502],{"class":73},"        choice ",[67,154504,85],{"class":84},[67,154506,62366],{"class":77},[67,154508,854],{"class":73},[67,154510,154511],{"class":114},"\"请输入操作:\"",[67,154513,829],{"class":73},[67,154515,154516],{"class":69,"line":34839},[67,154517,631],{"emptyLinePlaceholder":630},[67,154519,154520,154522,154525,154527,154530],{"class":69,"line":34845},[67,154521,4329],{"class":84},[67,154523,154524],{"class":73}," choice ",[67,154526,4774],{"class":84},[67,154528,154529],{"class":114}," \"1\"",[67,154531,813],{"class":73},[67,154533,154534],{"class":69,"line":34855},[67,154535,154536],{"class":73},"            add_student(students)\n",[67,154538,154539,154542,154544,154546,154549],{"class":69,"line":34860},[67,154540,154541],{"class":84},"        elif",[67,154543,154524],{"class":73},[67,154545,4774],{"class":84},[67,154547,154548],{"class":114}," \"2\"",[67,154550,813],{"class":73},[67,154552,154553],{"class":69,"line":34866},[67,154554,154555],{"class":73},"            delete_student(students)\n",[67,154557,154558,154560,154562,154564,154567],{"class":69,"line":34915},[67,154559,154541],{"class":84},[67,154561,154524],{"class":73},[67,154563,4774],{"class":84},[67,154565,154566],{"class":114}," \"3\"",[67,154568,813],{"class":73},[67,154570,154571],{"class":69,"line":34962},[67,154572,154573],{"class":73},"            update_student(students)\n",[67,154575,154576,154578,154580,154582,154585],{"class":69,"line":34967},[67,154577,154541],{"class":84},[67,154579,154524],{"class":73},[67,154581,4774],{"class":84},[67,154583,154584],{"class":114}," \"4\"",[67,154586,813],{"class":73},[67,154588,154589],{"class":69,"line":34973},[67,154590,154591],{"class":73},"            query_student(students)\n",[67,154593,154594,154596,154598,154600,154603],{"class":69,"line":34992},[67,154595,154541],{"class":84},[67,154597,154524],{"class":73},[67,154599,4774],{"class":84},[67,154601,154602],{"class":114}," \"5\"",[67,154604,813],{"class":73},[67,154606,154607],{"class":69,"line":34998},[67,154608,154609],{"class":73},"            show_all_students(students)\n",[67,154611,154612,154614,154616,154618,154621],{"class":69,"line":35018},[67,154613,154541],{"class":84},[67,154615,154524],{"class":73},[67,154617,4774],{"class":84},[67,154619,154620],{"class":114}," \"0\"",[67,154622,813],{"class":73},[67,154624,154625,154627,154629,154632],{"class":69,"line":35024},[67,154626,36419],{"class":77},[67,154628,854],{"class":73},[67,154630,154631],{"class":114},"\"退出系统\"",[67,154633,829],{"class":73},[67,154635,154636],{"class":69,"line":35030},[67,154637,116536],{"class":84},[67,154639,154640,154642],{"class":69,"line":35040},[67,154641,4366],{"class":84},[67,154643,813],{"class":73},[67,154645,154646,154648,154650,154653],{"class":69,"line":35045},[67,154647,36419],{"class":77},[67,154649,854],{"class":73},[67,154651,154652],{"class":114},"\"输入错误\"",[67,154654,829],{"class":73},[67,154656,154657],{"class":69,"line":35051},[67,154658,631],{"emptyLinePlaceholder":630},[67,154660,154661],{"class":69,"line":35067},[67,154662,631],{"emptyLinePlaceholder":630},[67,154664,154665,154667,154669,154671,154673],{"class":69,"line":35112},[67,154666,1096],{"class":84},[67,154668,1099],{"class":77},[67,154670,1102],{"class":84},[67,154672,1105],{"class":114},[67,154674,813],{"class":73},[67,154676,154677],{"class":69,"line":35118},[67,154678,1113],{"class":73},[19,154680,154681],{},"这个项目串联了：",[26,154683,154684,154687,154690,154693,154696,154698],{},[29,154685,154686],{},"菜单循环。",[29,154688,154689],{},"函数封装。",[29,154691,154692],{},"列表字典。",[29,154694,154695],{},"JSON 读写。",[29,154697,153165],{},[29,154699,154700,230],{},[32,154701,154702],{},"if __name__ == \"__main__\"",[14,154704,154706],{"id":154705},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154708,154709],{},"可以进一步拆成两个类：",[26,154711,154712,154717],{},[29,154713,154714,154716],{},[32,154715,151006],{},"：表示单个学生。",[29,154718,154719,154721],{},[32,154720,153032],{},"：负责学生增删改查和文件保存。",[19,154723,154724],{},"示意代码：",[58,154726,154728],{"className":60,"code":154727,"language":62,"meta":63,"style":63},"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",[32,154729,154730,154740,154744,154748,154752,154760,154767,154773,154779,154785,154789,154797,154803,154813,154823,154833,154843,154847,154851,154857,154865,154873,154881,154889,154897,154905],{"__ignoreMap":63},[67,154731,154732,154734,154736,154738],{"class":69,"line":70},[67,154733,32515],{"class":84},[67,154735,152590],{"class":73},[67,154737,622],{"class":84},[67,154739,152595],{"class":73},[67,154741,154742],{"class":69,"line":191},[67,154743,631],{"emptyLinePlaceholder":630},[67,154745,154746],{"class":69,"line":202},[67,154747,631],{"emptyLinePlaceholder":630},[67,154749,154750],{"class":69,"line":641},[67,154751,152608],{"class":110},[67,154753,154754,154756,154758],{"class":69,"line":655},[67,154755,16492],{"class":84},[67,154757,9714],{"class":110},[67,154759,813],{"class":73},[67,154761,154762,154765],{"class":69,"line":660},[67,154763,154764],{"class":73},"    student_id: ",[67,154766,152624],{"class":77},[67,154768,154769,154771],{"class":69,"line":665},[67,154770,152621],{"class":73},[67,154772,152624],{"class":77},[67,154774,154775,154777],{"class":69,"line":677},[67,154776,152629],{"class":73},[67,154778,152632],{"class":77},[67,154780,154781,154783],{"class":69,"line":683},[67,154782,152637],{"class":73},[67,154784,152640],{"class":77},[67,154786,154787],{"class":69,"line":689},[67,154788,631],{"emptyLinePlaceholder":630},[67,154790,154791,154793,154795],{"class":69,"line":694},[67,154792,32578],{"class":84},[67,154794,152788],{"class":110},[67,154796,32584],{"class":73},[67,154798,154799,154801],{"class":69,"line":700},[67,154800,16550],{"class":84},[67,154802,17369],{"class":73},[67,154804,154805,154807,154809,154811],{"class":69,"line":706},[67,154806,152801],{"class":114},[67,154808,53203],{"class":73},[67,154810,32600],{"class":77},[67,154812,152808],{"class":73},[67,154814,154815,154817,154819,154821],{"class":69,"line":712},[67,154816,152813],{"class":114},[67,154818,53203],{"class":73},[67,154820,32600],{"class":77},[67,154822,152820],{"class":73},[67,154824,154825,154827,154829,154831],{"class":69,"line":717},[67,154826,152825],{"class":114},[67,154828,53203],{"class":73},[67,154830,32600],{"class":77},[67,154832,152832],{"class":73},[67,154834,154835,154837,154839,154841],{"class":69,"line":723},[67,154836,152837],{"class":114},[67,154838,53203],{"class":73},[67,154840,32600],{"class":77},[67,154842,152844],{"class":73},[67,154844,154845],{"class":69,"line":729},[67,154846,4361],{"class":73},[67,154848,154849],{"class":69,"line":735},[67,154850,631],{"emptyLinePlaceholder":630},[67,154852,154853,154855],{"class":69,"line":741},[67,154854,152452],{"class":110},[67,154856,152455],{"class":77},[67,154858,154859,154861,154863],{"class":69,"line":747},[67,154860,32578],{"class":84},[67,154862,152865],{"class":110},[67,154864,152868],{"class":73},[67,154866,154867,154869,154871],{"class":69,"line":753},[67,154868,16550],{"class":84},[67,154870,152472],{"class":77},[67,154872,152877],{"class":73},[67,154874,154875,154877,154879],{"class":69,"line":758},[67,154876,152882],{"class":73},[67,154878,152885],{"class":114},[67,154880,89595],{"class":73},[67,154882,154883,154885,154887],{"class":69,"line":764},[67,154884,152882],{"class":73},[67,154886,64439],{"class":114},[67,154888,89595],{"class":73},[67,154890,154891,154893,154895],{"class":69,"line":770},[67,154892,152882],{"class":73},[67,154894,70884],{"class":114},[67,154896,89595],{"class":73},[67,154898,154899,154901,154903],{"class":69,"line":776},[67,154900,152882],{"class":73},[67,154902,152910],{"class":114},[67,154904,89595],{"class":73},[67,154906,154907],{"class":69,"line":782},[67,154908,39894],{"class":73},[19,154910,154911],{},"管理器示意：",[58,154913,154915],{"className":60,"code":154914,"language":62,"meta":63,"style":63},"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",[32,154916,154917,154926,154934,154945,154949,154959,154972,154983,154990,154996,155000,155009,155018,155024,155031],{"__ignoreMap":63},[67,154918,154919,154921,154924],{"class":69,"line":70},[67,154920,16492],{"class":84},[67,154922,154923],{"class":110}," StudentManager",[67,154925,813],{"class":73},[67,154927,154928,154930,154932],{"class":69,"line":191},[67,154929,32578],{"class":84},[67,154931,32581],{"class":77},[67,154933,32584],{"class":73},[67,154935,154936,154938,154941,154943],{"class":69,"line":202},[67,154937,32622],{"class":77},[67,154939,154940],{"class":73},".students ",[67,154942,85],{"class":84},[67,154944,53603],{"class":73},[67,154946,154947],{"class":69,"line":641},[67,154948,631],{"emptyLinePlaceholder":630},[67,154950,154951,154953,154956],{"class":69,"line":655},[67,154952,32578],{"class":84},[67,154954,154955],{"class":110}," find_by_id",[67,154957,154958],{"class":73},"(self, student_id):\n",[67,154960,154961,154963,154965,154967,154969],{"class":69,"line":660},[67,154962,5225],{"class":84},[67,154964,153575],{"class":73},[67,154966,941],{"class":84},[67,154968,40641],{"class":77},[67,154970,154971],{"class":73},".students:\n",[67,154973,154974,154976,154979,154981],{"class":69,"line":665},[67,154975,6461],{"class":84},[67,154977,154978],{"class":73}," student.student_id ",[67,154980,4774],{"class":84},[67,154982,153596],{"class":73},[67,154984,154985,154988],{"class":69,"line":677},[67,154986,154987],{"class":84},"                return",[67,154989,153603],{"class":73},[67,154991,154992,154994],{"class":69,"line":683},[67,154993,16550],{"class":84},[67,154995,153610],{"class":77},[67,154997,154998],{"class":69,"line":689},[67,154999,631],{"emptyLinePlaceholder":630},[67,155001,155002,155004,155006],{"class":69,"line":694},[67,155003,32578],{"class":84},[67,155005,7026],{"class":110},[67,155007,155008],{"class":73},"(self, student):\n",[67,155010,155011,155013,155015],{"class":69,"line":700},[67,155012,4329],{"class":84},[67,155014,40641],{"class":77},[67,155016,155017],{"class":73},".find_by_id(student.student_id):\n",[67,155019,155020,155022],{"class":69,"line":706},[67,155021,17529],{"class":84},[67,155023,127245],{"class":77},[67,155025,155026,155028],{"class":69,"line":712},[67,155027,32622],{"class":77},[67,155029,155030],{"class":73},".students.append(student)\n",[67,155032,155033,155035],{"class":69,"line":717},[67,155034,16550],{"class":84},[67,155036,155037],{"class":77}," True\n",[19,155039,155040],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155042,155044],{"id":155043},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[391,155046,155048],{"id":155047},"_1251-数据结构","12.5.1 数据结构",[58,155050,155052],{"className":60,"code":155051,"language":62,"meta":63,"style":63},"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",[32,155053,155054,155062,155093,155123,155152,155181],{"__ignoreMap":63},[67,155055,155056,155058,155060],{"class":69,"line":70},[67,155057,149903],{"class":73},[67,155059,85],{"class":84},[67,155061,57208],{"class":73},[67,155063,155064,155066,155068,155070,155072,155074,155077,155079,155082,155084,155086,155088,155091],{"class":69,"line":191},[67,155065,149823],{"class":73},[67,155067,149435],{"class":114},[67,155069,53203],{"class":73},[67,155071,150046],{"class":114},[67,155073,1868],{"class":73},[67,155075,155076],{"class":114},"\"category\"",[67,155078,53203],{"class":73},[67,155080,155081],{"class":114},"\"手机\"",[67,155083,1868],{"class":73},[67,155085,85843],{"class":114},[67,155087,53203],{"class":73},[67,155089,155090],{"class":77},"12000",[67,155092,6749],{"class":73},[67,155094,155095,155097,155099,155101,155103,155105,155107,155109,155112,155114,155116,155118,155121],{"class":69,"line":202},[67,155096,149823],{"class":73},[67,155098,149435],{"class":114},[67,155100,53203],{"class":73},[67,155102,150046],{"class":114},[67,155104,1868],{"class":73},[67,155106,155076],{"class":114},[67,155108,53203],{"class":73},[67,155110,155111],{"class":114},"\"电脑\"",[67,155113,1868],{"class":73},[67,155115,85843],{"class":114},[67,155117,53203],{"class":73},[67,155119,155120],{"class":77},"18000",[67,155122,6749],{"class":73},[67,155124,155125,155127,155129,155131,155133,155135,155137,155139,155141,155143,155145,155147,155150],{"class":69,"line":641},[67,155126,149823],{"class":73},[67,155128,149435],{"class":114},[67,155130,53203],{"class":73},[67,155132,150067],{"class":114},[67,155134,1868],{"class":73},[67,155136,155076],{"class":114},[67,155138,53203],{"class":73},[67,155140,155081],{"class":114},[67,155142,1868],{"class":73},[67,155144,85843],{"class":114},[67,155146,53203],{"class":73},[67,155148,155149],{"class":77},"15000",[67,155151,6749],{"class":73},[67,155153,155154,155156,155158,155160,155162,155164,155166,155168,155170,155172,155174,155176,155179],{"class":69,"line":655},[67,155155,149823],{"class":73},[67,155157,149435],{"class":114},[67,155159,53203],{"class":73},[67,155161,150067],{"class":114},[67,155163,1868],{"class":73},[67,155165,155076],{"class":114},[67,155167,53203],{"class":73},[67,155169,155111],{"class":114},[67,155171,1868],{"class":73},[67,155173,85843],{"class":114},[67,155175,53203],{"class":73},[67,155177,155178],{"class":77},"16000",[67,155180,6749],{"class":73},[67,155182,155183],{"class":69,"line":660},[67,155184,35015],{"class":73},[391,155186,155188],{"id":155187},"_1252-按日期统计","12.5.2 按日期统计",[58,155190,155192],{"className":60,"code":155191,"language":62,"meta":63,"style":63},"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",[32,155193,155194,155203,155207,155218,155232,155245,155264,155268],{"__ignoreMap":63},[67,155195,155196,155199,155201],{"class":69,"line":70},[67,155197,155198],{"class":73},"daily_total ",[67,155200,85],{"class":84},[67,155202,89627],{"class":73},[67,155204,155205],{"class":69,"line":191},[67,155206,631],{"emptyLinePlaceholder":630},[67,155208,155209,155211,155213,155215],{"class":69,"line":202},[67,155210,1512],{"class":84},[67,155212,149647],{"class":73},[67,155214,941],{"class":84},[67,155216,155217],{"class":73}," sales:\n",[67,155219,155220,155223,155225,155228,155230],{"class":69,"line":641},[67,155221,155222],{"class":73},"    date ",[67,155224,85],{"class":84},[67,155226,155227],{"class":73}," item[",[67,155229,149435],{"class":114},[67,155231,35015],{"class":73},[67,155233,155234,155237,155239,155241,155243],{"class":69,"line":655},[67,155235,155236],{"class":73},"    amount ",[67,155238,85],{"class":84},[67,155240,155227],{"class":73},[67,155242,85843],{"class":114},[67,155244,35015],{"class":73},[67,155246,155247,155250,155252,155255,155257,155259,155261],{"class":69,"line":660},[67,155248,155249],{"class":73},"    daily_total[date] ",[67,155251,85],{"class":84},[67,155253,155254],{"class":73}," daily_total.get(date, ",[67,155256,78],{"class":77},[67,155258,15512],{"class":73},[67,155260,2471],{"class":84},[67,155262,155263],{"class":73}," amount\n",[67,155265,155266],{"class":69,"line":665},[67,155267,631],{"emptyLinePlaceholder":630},[67,155269,155270,155272],{"class":69,"line":677},[67,155271,1626],{"class":77},[67,155273,155274],{"class":73},"(daily_total)\n",[391,155276,155278],{"id":155277},"_1253-按类别统计","12.5.3 按类别统计",[58,155280,155282],{"className":60,"code":155281,"language":62,"meta":63,"style":63},"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",[32,155283,155284,155293,155297,155307,155320,155332,155350,155354],{"__ignoreMap":63},[67,155285,155286,155289,155291],{"class":69,"line":70},[67,155287,155288],{"class":73},"category_total ",[67,155290,85],{"class":84},[67,155292,89627],{"class":73},[67,155294,155295],{"class":69,"line":191},[67,155296,631],{"emptyLinePlaceholder":630},[67,155298,155299,155301,155303,155305],{"class":69,"line":202},[67,155300,1512],{"class":84},[67,155302,149647],{"class":73},[67,155304,941],{"class":84},[67,155306,155217],{"class":73},[67,155308,155309,155312,155314,155316,155318],{"class":69,"line":641},[67,155310,155311],{"class":73},"    category ",[67,155313,85],{"class":84},[67,155315,155227],{"class":73},[67,155317,155076],{"class":114},[67,155319,35015],{"class":73},[67,155321,155322,155324,155326,155328,155330],{"class":69,"line":655},[67,155323,155236],{"class":73},[67,155325,85],{"class":84},[67,155327,155227],{"class":73},[67,155329,85843],{"class":114},[67,155331,35015],{"class":73},[67,155333,155334,155337,155339,155342,155344,155346,155348],{"class":69,"line":660},[67,155335,155336],{"class":73},"    category_total[category] ",[67,155338,85],{"class":84},[67,155340,155341],{"class":73}," category_total.get(category, ",[67,155343,78],{"class":77},[67,155345,15512],{"class":73},[67,155347,2471],{"class":84},[67,155349,155263],{"class":73},[67,155351,155352],{"class":69,"line":665},[67,155353,631],{"emptyLinePlaceholder":630},[67,155355,155356,155358],{"class":69,"line":677},[67,155357,1626],{"class":77},[67,155359,155360],{"class":73},"(category_total)\n",[391,155362,155364],{"id":155363},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[58,155366,155368],{"className":60,"code":155367,"language":62,"meta":63,"style":63},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[32,155369,155370,155395],{"__ignoreMap":63},[67,155371,155372,155375,155377,155379,155382,155385,155388,155391,155393],{"class":69,"line":70},[67,155373,155374],{"class":73},"top_date, top_amount ",[67,155376,85],{"class":84},[67,155378,7768],{"class":77},[67,155380,155381],{"class":73},"(daily_total.items(), ",[67,155383,155384],{"class":7033},"key",[67,155386,155387],{"class":84},"=lambda",[67,155389,155390],{"class":73}," item: item[",[67,155392,2209],{"class":77},[67,155394,6476],{"class":73},[67,155396,155397,155399],{"class":69,"line":191},[67,155398,1626],{"class":77},[67,155400,155401],{"class":73},"(top_date, top_amount)\n",[14,155403,155405],{"id":155404},"_126-绘制柱状图","12.6 绘制柱状图",[58,155407,155409],{"className":60,"code":155408,"language":62,"meta":63,"style":63},"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",[32,155410,155411,155425,155436,155440,155448,155460,155472,155483,155487,155491,155501,155512,155526,155531,155548,155565,155581,155585],{"__ignoreMap":63},[67,155412,155413,155415,155417,155419,155421,155423],{"class":69,"line":70},[67,155414,32515],{"class":84},[67,155416,148817],{"class":73},[67,155418,622],{"class":84},[67,155420,148822],{"class":73},[67,155422,649],{"class":84},[67,155424,148827],{"class":73},[67,155426,155427,155429,155431,155433],{"class":69,"line":191},[67,155428,32515],{"class":84},[67,155430,148676],{"class":73},[67,155432,622],{"class":84},[67,155434,155435],{"class":73}," Bar\n",[67,155437,155438],{"class":69,"line":202},[67,155439,631],{"emptyLinePlaceholder":630},[67,155441,155442,155444,155446],{"class":69,"line":641},[67,155443,155288],{"class":73},[67,155445,85],{"class":84},[67,155447,17369],{"class":73},[67,155449,155450,155453,155455,155458],{"class":69,"line":655},[67,155451,155452],{"class":114},"    \"手机\"",[67,155454,53203],{"class":73},[67,155456,155457],{"class":77},"27000",[67,155459,33238],{"class":73},[67,155461,155462,155465,155467,155470],{"class":69,"line":660},[67,155463,155464],{"class":114},"    \"电脑\"",[67,155466,53203],{"class":73},[67,155468,155469],{"class":77},"34000",[67,155471,33238],{"class":73},[67,155473,155474,155477,155479,155481],{"class":69,"line":665},[67,155475,155476],{"class":114},"    \"耳机\"",[67,155478,53203],{"class":73},[67,155480,125837],{"class":77},[67,155482,33238],{"class":73},[67,155484,155485],{"class":69,"line":677},[67,155486,3419],{"class":73},[67,155488,155489],{"class":69,"line":683},[67,155490,631],{"emptyLinePlaceholder":630},[67,155492,155493,155496,155498],{"class":69,"line":689},[67,155494,155495],{"class":73},"bar ",[67,155497,85],{"class":84},[67,155499,155500],{"class":73}," Bar()\n",[67,155502,155503,155506,155509],{"class":69,"line":694},[67,155504,155505],{"class":73},"bar.add_xaxis(",[67,155507,155508],{"class":77},"list",[67,155510,155511],{"class":73},"(category_total.keys()))\n",[67,155513,155514,155517,155519,155521,155523],{"class":69,"line":700},[67,155515,155516],{"class":73},"bar.add_yaxis(",[67,155518,148733],{"class":114},[67,155520,1868],{"class":73},[67,155522,155508],{"class":77},[67,155524,155525],{"class":73},"(category_total.values()))\n",[67,155527,155528],{"class":69,"line":706},[67,155529,155530],{"class":73},"bar.set_global_opts(\n",[67,155532,155533,155535,155537,155539,155541,155543,155546],{"class":69,"line":712},[67,155534,148911],{"class":7033},[67,155536,85],{"class":84},[67,155538,148916],{"class":73},[67,155540,53173],{"class":7033},[67,155542,85],{"class":84},[67,155544,155545],{"class":114},"\"品类销售额\"",[67,155547,39815],{"class":73},[67,155549,155550,155552,155554,155556,155558,155560,155563],{"class":69,"line":717},[67,155551,148930],{"class":7033},[67,155553,85],{"class":84},[67,155555,148935],{"class":73},[67,155557,81570],{"class":7033},[67,155559,85],{"class":84},[67,155561,155562],{"class":114},"\"品类\"",[67,155564,39815],{"class":73},[67,155566,155567,155569,155571,155573,155575,155577,155579],{"class":69,"line":723},[67,155568,148949],{"class":7033},[67,155570,85],{"class":84},[67,155572,148935],{"class":73},[67,155574,81570],{"class":7033},[67,155576,85],{"class":84},[67,155578,148733],{"class":114},[67,155580,39815],{"class":73},[67,155582,155583],{"class":69,"line":729},[67,155584,829],{"class":73},[67,155586,155587,155590,155593],{"class":69,"line":735},[67,155588,155589],{"class":73},"bar.render(",[67,155591,155592],{"class":114},"\"category_sales.html\"",[67,155594,829],{"class":73},[14,155596,155598],{"id":155597},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155600,155601],{},"时间线适合展示不同日期、月份、年份的数据变化。",[58,155603,155605],{"className":60,"code":155604,"language":62,"meta":63,"style":63},"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",[32,155606,155607,155621,155632,155636,155644,155668,155691,155716,155720,155724,155734,155738,155749,155758,155768,155782,155813,155818,155822],{"__ignoreMap":63},[67,155608,155609,155611,155613,155615,155617,155619],{"class":69,"line":70},[67,155610,32515],{"class":84},[67,155612,148817],{"class":73},[67,155614,622],{"class":84},[67,155616,148822],{"class":73},[67,155618,649],{"class":84},[67,155620,148827],{"class":73},[67,155622,155623,155625,155627,155629],{"class":69,"line":191},[67,155624,32515],{"class":84},[67,155626,148676],{"class":73},[67,155628,622],{"class":84},[67,155630,155631],{"class":73}," Bar, Timeline\n",[67,155633,155634],{"class":69,"line":202},[67,155635,631],{"emptyLinePlaceholder":630},[67,155637,155638,155640,155642],{"class":69,"line":641},[67,155639,103364],{"class":73},[67,155641,85],{"class":84},[67,155643,17369],{"class":73},[67,155645,155646,155649,155652,155654,155656,155658,155660,155662,155664,155666],{"class":69,"line":655},[67,155647,155648],{"class":114},"    \"2024-10-01\"",[67,155650,155651],{"class":73},": {",[67,155653,155081],{"class":114},[67,155655,53203],{"class":73},[67,155657,155090],{"class":77},[67,155659,1868],{"class":73},[67,155661,155111],{"class":114},[67,155663,53203],{"class":73},[67,155665,155120],{"class":77},[67,155667,6749],{"class":73},[67,155669,155670,155673,155675,155677,155679,155681,155683,155685,155687,155689],{"class":69,"line":660},[67,155671,155672],{"class":114},"    \"2024-10-02\"",[67,155674,155651],{"class":73},[67,155676,155081],{"class":114},[67,155678,53203],{"class":73},[67,155680,155149],{"class":77},[67,155682,1868],{"class":73},[67,155684,155111],{"class":114},[67,155686,53203],{"class":73},[67,155688,155178],{"class":77},[67,155690,6749],{"class":73},[67,155692,155693,155696,155698,155700,155702,155705,155707,155709,155711,155714],{"class":69,"line":665},[67,155694,155695],{"class":114},"    \"2024-10-03\"",[67,155697,155651],{"class":73},[67,155699,155081],{"class":114},[67,155701,53203],{"class":73},[67,155703,155704],{"class":77},"17000",[67,155706,1868],{"class":73},[67,155708,155111],{"class":114},[67,155710,53203],{"class":73},[67,155712,155713],{"class":77},"19000",[67,155715,6749],{"class":73},[67,155717,155718],{"class":69,"line":677},[67,155719,3419],{"class":73},[67,155721,155722],{"class":69,"line":683},[67,155723,631],{"emptyLinePlaceholder":630},[67,155725,155726,155729,155731],{"class":69,"line":689},[67,155727,155728],{"class":73},"timeline ",[67,155730,85],{"class":84},[67,155732,155733],{"class":73}," Timeline()\n",[67,155735,155736],{"class":69,"line":694},[67,155737,631],{"emptyLinePlaceholder":630},[67,155739,155740,155742,155745,155747],{"class":69,"line":700},[67,155741,1512],{"class":84},[67,155743,155744],{"class":73}," date, category_data ",[67,155746,941],{"class":84},[67,155748,150586],{"class":73},[67,155750,155751,155754,155756],{"class":69,"line":706},[67,155752,155753],{"class":73},"    bar ",[67,155755,85],{"class":84},[67,155757,155500],{"class":73},[67,155759,155760,155763,155765],{"class":69,"line":712},[67,155761,155762],{"class":73},"    bar.add_xaxis(",[67,155764,155508],{"class":77},[67,155766,155767],{"class":73},"(category_data.keys()))\n",[67,155769,155770,155773,155775,155777,155779],{"class":69,"line":717},[67,155771,155772],{"class":73},"    bar.add_yaxis(",[67,155774,148733],{"class":114},[67,155776,1868],{"class":73},[67,155778,155508],{"class":77},[67,155780,155781],{"class":73},"(category_data.values()))\n",[67,155783,155784,155787,155790,155792,155794,155796,155798,155800,155802,155804,155806,155808,155811],{"class":69,"line":723},[67,155785,155786],{"class":73},"    bar.set_global_opts(",[67,155788,155789],{"class":7033},"title_opts",[67,155791,85],{"class":84},[67,155793,148916],{"class":73},[67,155795,53173],{"class":7033},[67,155797,85],{"class":84},[67,155799,2052],{"class":84},[67,155801,2243],{"class":114},[67,155803,2885],{"class":77},[67,155805,75686],{"class":73},[67,155807,2934],{"class":77},[67,155809,155810],{"class":114},"销售额\"",[67,155812,1050],{"class":73},[67,155814,155815],{"class":69,"line":729},[67,155816,155817],{"class":73},"    timeline.add(bar, date)\n",[67,155819,155820],{"class":69,"line":735},[67,155821,631],{"emptyLinePlaceholder":630},[67,155823,155824,155827,155830],{"class":69,"line":741},[67,155825,155826],{"class":73},"timeline.render(",[67,155828,155829],{"class":114},"\"timeline_sales.html\"",[67,155831,829],{"class":73},[14,155833,155835],{"id":155834},"_128-绘制地图","12.8 绘制地图",[19,155837,155838],{},"地图适合展示地区数据。",[58,155840,155842],{"className":60,"code":155841,"language":62,"meta":63,"style":63},"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",[32,155843,155844,155858,155869,155873,155881,155894,155906,155919,155932,155936,155940,155950,155965,155970,155987,156006,156010],{"__ignoreMap":63},[67,155845,155846,155848,155850,155852,155854,155856],{"class":69,"line":70},[67,155847,32515],{"class":84},[67,155849,148817],{"class":73},[67,155851,622],{"class":84},[67,155853,148822],{"class":73},[67,155855,649],{"class":84},[67,155857,148827],{"class":73},[67,155859,155860,155862,155864,155866],{"class":69,"line":191},[67,155861,32515],{"class":84},[67,155863,148676],{"class":73},[67,155865,622],{"class":84},[67,155867,155868],{"class":73}," Map\n",[67,155870,155871],{"class":69,"line":202},[67,155872,631],{"emptyLinePlaceholder":630},[67,155874,155875,155877,155879],{"class":69,"line":641},[67,155876,103364],{"class":73},[67,155878,85],{"class":84},[67,155880,57208],{"class":73},[67,155882,155883,155886,155888,155890,155892],{"class":69,"line":655},[67,155884,155885],{"class":73},"    (",[67,155887,71029],{"class":114},[67,155889,1868],{"class":73},[67,155891,2806],{"class":77},[67,155893,39815],{"class":73},[67,155895,155896,155898,155900,155902,155904],{"class":69,"line":660},[67,155897,155885],{"class":73},[67,155899,71049],{"class":114},[67,155901,1868],{"class":73},[67,155903,148750],{"class":77},[67,155905,39815],{"class":73},[67,155907,155908,155910,155913,155915,155917],{"class":69,"line":665},[67,155909,155885],{"class":73},[67,155911,155912],{"class":114},"\"广东\"",[67,155914,1868],{"class":73},[67,155916,3565],{"class":77},[67,155918,39815],{"class":73},[67,155920,155921,155923,155926,155928,155930],{"class":69,"line":677},[67,155922,155885],{"class":73},[67,155924,155925],{"class":114},"\"浙江\"",[67,155927,1868],{"class":73},[67,155929,148755],{"class":77},[67,155931,39815],{"class":73},[67,155933,155934],{"class":69,"line":683},[67,155935,35015],{"class":73},[67,155937,155938],{"class":69,"line":689},[67,155939,631],{"emptyLinePlaceholder":630},[67,155941,155942,155945,155947],{"class":69,"line":694},[67,155943,155944],{"class":73},"map_chart ",[67,155946,85],{"class":84},[67,155948,155949],{"class":73}," Map()\n",[67,155951,155952,155955,155957,155960,155963],{"class":69,"line":700},[67,155953,155954],{"class":73},"map_chart.add(",[67,155956,148733],{"class":114},[67,155958,155959],{"class":73},", data, ",[67,155961,155962],{"class":114},"\"china\"",[67,155964,829],{"class":73},[67,155966,155967],{"class":69,"line":706},[67,155968,155969],{"class":73},"map_chart.set_global_opts(\n",[67,155971,155972,155974,155976,155978,155980,155982,155985],{"class":69,"line":712},[67,155973,148911],{"class":7033},[67,155975,85],{"class":84},[67,155977,148916],{"class":73},[67,155979,53173],{"class":7033},[67,155981,85],{"class":84},[67,155983,155984],{"class":114},"\"地区销售额\"",[67,155986,39815],{"class":73},[67,155988,155989,155992,155994,155997,156000,156002,156004],{"class":69,"line":717},[67,155990,155991],{"class":7033},"    visualmap_opts",[67,155993,85],{"class":84},[67,155995,155996],{"class":73},"opts.VisualMapOpts(",[67,155998,155999],{"class":7033},"max_",[67,156001,85],{"class":84},[67,156003,3565],{"class":77},[67,156005,39815],{"class":73},[67,156007,156008],{"class":69,"line":723},[67,156009,829],{"class":73},[67,156011,156012,156015,156018],{"class":69,"line":729},[67,156013,156014],{"class":73},"map_chart.render(",[67,156016,156017],{"class":114},"\"map_sales.html\"",[67,156019,829],{"class":73},[19,156021,156022],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156024,156026],{"id":156025},"_129-项目拆分建议","12.9 项目拆分建议",[19,156028,156029],{},"当代码超过一个文件时，可以这样组织：",[58,156031,156034],{"className":156032,"code":156033,"language":603,"meta":63},[601],"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",[32,156035,156033],{"__ignoreMap":63},[19,156037,156038],{},"职责：",[26,156040,156041,156047,156053,156059],{},[29,156042,156043,156046],{},[32,156044,156045],{},"main.py","：程序入口。",[29,156048,156049,156052],{},[32,156050,156051],{},"file_utils.py","：读写 JSON。",[29,156054,156055,156058],{},[32,156056,156057],{},"sales_service.py","：统计销售数据。",[29,156060,156061,156064],{},[32,156062,156063],{},"chart_builder.py","：生成图表。",[14,156066,156068],{"id":156067},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156070,156071],{},"语法基础：",[26,156073,156074,156077,156080,156083],{},[29,156075,156076],{},"会写变量、注释、输入输出。",[29,156078,156079],{},"会使用 int、float、str、bool。",[29,156081,156082],{},"会做类型转换。",[29,156084,156085],{},"会使用 f-string 格式化输出。",[19,156087,156088],{},"流程控制：",[26,156090,156091,156097,156103,156111],{},[29,156092,156093,156094,230],{},"会写 ",[32,156095,156096],{},"if elif else",[29,156098,156093,156099,1264,156101,230],{},[32,156100,110101],{},[32,156102,1512],{},[29,156104,156105,156106,1264,156108,230],{},"理解 ",[32,156107,3886],{},[32,156109,156110],{},"continue",[29,156112,156113],{},"能写嵌套循环。",[19,156115,156116],{},"函数：",[26,156118,156119,156122,156125,156128],{},[29,156120,156121],{},"会定义和调用函数。",[29,156123,156124],{},"理解参数和返回值。",[29,156126,156127],{},"知道局部变量和全局变量。",[29,156129,156130],{},"会使用默认参数、关键字参数、不定长参数。",[19,156132,156133],{},"容器：",[26,156135,156136,156139,156142,156145,156148],{},[29,156137,156138],{},"会使用列表增删改查。",[29,156140,156141],{},"会遍历列表、字典。",[29,156143,156144],{},"会使用切片。",[29,156146,156147],{},"会用集合去重。",[29,156149,156150],{},"会处理列表嵌套字典。",[19,156152,156153],{},"文件和模块：",[26,156155,156156,156159,156162,156165,156168],{},[29,156157,156158],{},"会读写文本文件。",[29,156160,156161],{},"会读写 JSON。",[29,156163,156164],{},"会捕获常见异常。",[29,156166,156167],{},"会导入模块和第三方包。",[29,156169,156170],{},"会创建简单包结构。",[19,156172,156173],{},"项目能力：",[26,156175,156176,156179,156182,156185,156188],{},[29,156177,156178],{},"能把代码拆成函数。",[29,156180,156181],{},"能把数据保存到文件。",[29,156183,156184],{},"能处理用户输入错误。",[29,156186,156187],{},"能写一个完整菜单程序。",[29,156189,156190],{},"能用 pyecharts 生成图表。",[14,156192,156194],{"id":156193},"_1211-推荐练习顺序","12.11 推荐练习顺序",[26,156196,156197,156200,156203,156206,156209,156212,156215,156218],{},[29,156198,156199],{},"猜数字游戏。",[29,156201,156202],{},"ATM 菜单程序。",[29,156204,156205],{},"学生成绩统计。",[29,156207,156208],{},"学生管理系统函数版。",[29,156210,156211],{},"学生管理系统文件持久化版。",[29,156213,156214],{},"学生管理系统面向对象版。",[29,156216,156217],{},"销售数据统计。",[29,156219,156220],{},"销售数据可视化。",[14,156222,156224],{"id":156223},"_1212-常见学习误区","12.12 常见学习误区",[26,156226,156227,156230,156233,156236,156239,156242,156245],{},[29,156228,156229],{},"只看视频不敲代码。",[29,156231,156232],{},"一报错就复制错误去搜，不先读报错位置。",[29,156234,156235],{},"变量名随便写，后续自己看不懂。",[29,156237,156238],{},"所有代码都写在一个文件一个函数里。",[29,156240,156241],{},"不保存练习代码，复习时没有材料。",[29,156243,156244],{},"还没掌握列表字典就急着学框架。",[29,156246,156247],{},"不会读官方文档，只依赖教程。",[14,156249,156251],{"id":156250},"_1213-如何读报错","12.13 如何读报错",[19,156253,156254],{},"报错通常从下往上看最后几行。",[19,156256,16932],{},[58,156258,156261],{"className":156259,"code":156260,"language":603,"meta":63},[601],"ValueError: invalid literal for int() with base 10: 'abc'\n",[32,156262,156260],{"__ignoreMap":63},[19,156264,26391],{},[26,156266,156267,156273,156283],{},[29,156268,156269,156270,230],{},"异常类型是 ",[32,156271,156272],{},"ValueError",[29,156274,1757,156275,156278,156279,156282],{},[32,156276,156277],{},"int()"," 无法把 ",[32,156280,156281],{},"'abc'"," 转成整数。",[29,156284,156285],{},"应该检查输入内容或增加异常处理。",[19,156287,156288],{},"再看文件名和行号：",[58,156290,156293],{"className":156291,"code":156292,"language":603,"meta":63},[601],"File \"main.py\", line 10, in \u003Cmodule>\n",[32,156294,156292],{"__ignoreMap":63},[19,156296,156297,156298,156300],{},"表示错误发生在 ",[32,156299,156045],{}," 第 10 行。",[14,156302,156304],{"id":156303},"_1214-后续学习方向","12.14 后续学习方向",[19,156306,156307],{},"Python 基础完成后，可以按兴趣选择方向：",[26,156309,156310,156322,156331,156343,156354,156363,156373],{},[29,156311,156312,156313,2204,156316,2204,156319,230],{},"自动化办公：",[32,156314,156315],{},"openpyxl",[32,156317,156318],{},"python-docx",[32,156320,156321],{},"pdfplumber",[29,156323,156324,156325,2204,156327,2204,156329,230],{},"数据分析：",[32,156326,102383],{},[32,156328,147623],{},[32,156330,147631],{},[29,156332,156333,156334,2204,156337,2204,156340,230],{},"Web 后端：",[32,156335,156336],{},"Flask",[32,156338,156339],{},"FastAPI",[32,156341,156342],{},"Django",[29,156344,156345,156346,2204,156348,2204,156351,230],{},"爬虫：",[32,156347,147608],{},[32,156349,156350],{},"BeautifulSoup",[32,156352,156353],{},"Scrapy",[29,156355,156356,156357,2204,156359,156362],{},"测试开发：",[32,156358,147655],{},[32,156360,156361],{},"selenium","、接口测试。",[29,156364,156365,156366,2204,156368,2204,156370,230],{},"人工智能：",[32,156367,102383],{},[32,156369,147623],{},[32,156371,156372],{},"pytorch",[29,156374,156375,156376,2204,156378,2204,156381,230],{},"运维脚本：",[32,156377,147224],{},[32,156379,156380],{},"subprocess",[32,156382,156383],{},"paramiko",[19,156385,156386],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156388,156390],{"id":156389},"_1215-结课练习","12.15 结课练习",[26,156392,156393,156396,156399,156402,156405,156408,156411,156414],{},[29,156394,156395],{},"完成函数版学生管理系统。",[29,156397,156398],{},"给学生管理系统增加 JSON 持久化。",[29,156400,156401],{},"给学生管理系统增加异常处理。",[29,156403,156404],{},"把学生管理系统改成面向对象版。",[29,156406,156407],{},"使用 pyecharts 绘制学生成绩柱状图。",[29,156409,156410],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[29,156412,156413],{},"按品类统计销售额并绘制柱状图。",[29,156415,156416],{},"写一份自己的 Python 学习路线图。",[1903,156418,156419],{},"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":63,"searchDepth":191,"depth":191,"links":156421},[156422,156423,156426,156427,156428,156434,156435,156436,156437,156438,156439,156440,156441,156442,156443],{"id":153138,"depth":191,"text":153139},{"id":153188,"depth":191,"text":153189,"children":156424},[156425],{"id":153192,"depth":202,"text":153193},{"id":153231,"depth":191,"text":153232},{"id":154705,"depth":191,"text":154706},{"id":155043,"depth":191,"text":155044,"children":156429},[156430,156431,156432,156433],{"id":155047,"depth":202,"text":155048},{"id":155187,"depth":202,"text":155188},{"id":155277,"depth":202,"text":155278},{"id":155363,"depth":202,"text":155364},{"id":155404,"depth":191,"text":155405},{"id":155597,"depth":191,"text":155598},{"id":155834,"depth":191,"text":155835},{"id":156025,"depth":191,"text":156026},{"id":156067,"depth":191,"text":156068},{"id":156193,"depth":191,"text":156194},{"id":156223,"depth":191,"text":156224},{"id":156250,"depth":191,"text":156251},{"id":156303,"depth":191,"text":156304},{"id":156389,"depth":191,"text":156390},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153130,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156450,"title":156451,"body":156452,"description":25173,"extension":1930,"meta":158921,"navigation":630,"path":158922,"seo":158923,"stem":158924,"__hash__":158925},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156453,"toc":158896},[156454,156457,156461,156464,156467,156487,156490,156513,156516,156519,156541,156544,156566,156570,156573,156613,156616,156737,156741,156744,156784,156787,156811,156814,156818,156821,156835,156868,156871,156906,156909,156932,156935,156968,156971,156973,156979,157054,157057,157063,157080,157120,157124,157127,157173,157175,157213,157216,157251,157254,157289,157292,157324,157327,157346,157350,157354,157467,157469,157544,157548,157594,157597,157623,157632,157636,157639,157702,157710,157738,157742,157782,157847,157851,157854,157893,157896,157941,157944,158005,158009,158036,158039,158067,158070,158074,158078,158143,158146,158184,158187,158219,158223,158322,158326,158329,158402,158405,158453,158457,158463,158503,158506,158553,158556,158605,158609,158611,158625,158627,158808,158812,158839,158859,158866,158870,158887,158893],[10,156455,156451],{"id":156456},"_2-基础语法变量与字符串",[14,156458,156460],{"id":156459},"_21-注释","2.1 注释",[19,156462,156463],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156465,156466],{},"单行注释：",[58,156468,156470],{"className":60,"code":156469,"language":62,"meta":63,"style":63},"# 这是单行注释\nprint(\"hello\")\n",[32,156471,156472,156477],{"__ignoreMap":63},[67,156473,156474],{"class":69,"line":70},[67,156475,156476],{"class":2058},"# 这是单行注释\n",[67,156478,156479,156481,156483,156485],{"class":69,"line":191},[67,156480,1626],{"class":77},[67,156482,854],{"class":73},[67,156484,7661],{"class":114},[67,156486,829],{"class":73},[19,156488,156489],{},"多行说明常用三引号：",[58,156491,156493],{"className":60,"code":156492,"language":62,"meta":63,"style":63},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[32,156494,156495,156499,156504,156509],{"__ignoreMap":63},[67,156496,156497],{"class":69,"line":70},[67,156498,785],{"class":114},[67,156500,156501],{"class":69,"line":191},[67,156502,156503],{"class":114},"这是多行说明。\n",[67,156505,156506],{"class":69,"line":202},[67,156507,156508],{"class":114},"常用于文件顶部说明、函数说明等。\n",[67,156510,156511],{"class":69,"line":641},[67,156512,785],{"class":114},[19,156514,156515],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156517,156518],{},"不好：",[58,156520,156522],{"className":60,"code":156521,"language":62,"meta":63,"style":63},"# age 加 1\nage = age + 1\n",[32,156523,156524,156529],{"__ignoreMap":63},[67,156525,156526],{"class":69,"line":70},[67,156527,156528],{"class":2058},"# age 加 1\n",[67,156530,156531,156533,156535,156537,156539],{"class":69,"line":191},[67,156532,147984],{"class":73},[67,156534,85],{"class":84},[67,156536,17504],{"class":73},[67,156538,2471],{"class":84},[67,156540,57460],{"class":77},[19,156542,156543],{},"较好：",[58,156545,156547],{"className":60,"code":156546,"language":62,"meta":63,"style":63},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[32,156548,156549,156554],{"__ignoreMap":63},[67,156550,156551],{"class":69,"line":70},[67,156552,156553],{"class":2058},"# 用户过完生日后，年龄增加一岁\n",[67,156555,156556,156558,156560,156562,156564],{"class":69,"line":191},[67,156557,147984],{"class":73},[67,156559,85],{"class":84},[67,156561,17504],{"class":73},[67,156563,2471],{"class":84},[67,156565,57460],{"class":77},[14,156567,156569],{"id":156568},"_22-字面量","2.2 字面量",[19,156571,156572],{},"字面量就是代码中直接写出来的数据。",[58,156574,156576],{"className":60,"code":156575,"language":62,"meta":63,"style":63},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[32,156577,156578,156585,156592,156599,156606],{"__ignoreMap":63},[67,156579,156580,156582],{"class":69,"line":70},[67,156581,2302],{"class":77},[67,156583,156584],{"class":2058},"          # 整数\n",[67,156586,156587,156589],{"class":69,"line":191},[67,156588,2049],{"class":77},[67,156590,156591],{"class":2058},"         # 小数\n",[67,156593,156594,156596],{"class":69,"line":202},[67,156595,7661],{"class":114},[67,156597,156598],{"class":2058},"      # 字符串\n",[67,156600,156601,156603],{"class":69,"line":641},[67,156602,33248],{"class":77},[67,156604,156605],{"class":2058},"         # 布尔值\n",[67,156607,156608,156610],{"class":69,"line":655},[67,156609,810],{"class":77},[67,156611,156612],{"class":2058},"         # 空值\n",[19,156614,156615],{},"常见字面量类型：",[399,156617,156618,156628],{},[402,156619,156620],{},[405,156621,156622,156624,156626],{},[408,156623,25533],{},[408,156625,29278],{},[408,156627,27658],{},[419,156629,156630,156641,156652,156663,156675,156687,156699,156712,156724],{},[405,156631,156632,156634,156638],{},[424,156633,2006],{},[424,156635,156636],{},[32,156637,2302],{},[424,156639,156640],{},"整数",[405,156642,156643,156645,156649],{},[424,156644,2041],{},[424,156646,156647],{},[32,156648,2049],{},[424,156650,156651],{},"浮点数",[405,156653,156654,156656,156660],{},[424,156655,3157],{},[424,156657,156658],{},[32,156659,7661],{},[424,156661,156662],{},"字符串",[405,156664,156665,156667,156673],{},[424,156666,3209],{},[424,156668,156669,2204,156671],{},[32,156670,33248],{},[32,156672,35756],{},[424,156674,67775],{},[405,156676,156677,156680,156684],{},[424,156678,156679],{},"NoneType",[424,156681,156682],{},[32,156683,810],{},[424,156685,156686],{},"空值",[405,156688,156689,156691,156696],{},[424,156690,155508],{},[424,156692,156693],{},[32,156694,156695],{},"[1, 2, 3]",[424,156697,156698],{},"列表",[405,156700,156701,156704,156709],{},[424,156702,156703],{},"tuple",[424,156705,156706],{},[32,156707,156708],{},"(1, 2, 3)",[424,156710,156711],{},"元组",[405,156713,156714,156716,156721],{},[424,156715,115984],{},[424,156717,156718],{},[32,156719,156720],{},"{\"name\": \"张三\"}",[424,156722,156723],{},"字典",[405,156725,156726,156729,156734],{},[424,156727,156728],{},"set",[424,156730,156731],{},[32,156732,156733],{},"{1, 2, 3}",[424,156735,156736],{},"集合",[14,156738,156740],{"id":156739},"_23-变量","2.3 变量",[19,156742,156743],{},"变量是保存数据的名字。",[58,156745,156747],{"className":60,"code":156746,"language":62,"meta":63,"style":63},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[32,156748,156749,156757,156765,156775],{"__ignoreMap":63},[67,156750,156751,156753,156755],{"class":69,"line":70},[67,156752,147974],{"class":73},[67,156754,85],{"class":84},[67,156756,150791],{"class":114},[67,156758,156759,156761,156763],{"class":69,"line":191},[67,156760,147984],{"class":73},[67,156762,85],{"class":84},[67,156764,147989],{"class":77},[67,156766,156767,156770,156772],{"class":69,"line":202},[67,156768,156769],{"class":73},"height ",[67,156771,85],{"class":84},[67,156773,156774],{"class":77}," 1.75\n",[67,156776,156777,156780,156782],{"class":69,"line":641},[67,156778,156779],{"class":73},"is_student ",[67,156781,85],{"class":84},[67,156783,155037],{"class":77},[19,156785,156786],{},"Python 的变量不需要提前声明类型：",[58,156788,156790],{"className":60,"code":156789,"language":62,"meta":63,"style":63},"score = 100\nscore = \"满分\"\n",[32,156791,156792,156802],{"__ignoreMap":63},[67,156793,156794,156797,156799],{"class":69,"line":70},[67,156795,156796],{"class":73},"score ",[67,156798,85],{"class":84},[67,156800,156801],{"class":77}," 100\n",[67,156803,156804,156806,156808],{"class":69,"line":191},[67,156805,156796],{"class":73},[67,156807,85],{"class":84},[67,156809,156810],{"class":114}," \"满分\"\n",[19,156812,156813],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156815,156817],{"id":156816},"_24-变量命名规则","2.4 变量命名规则",[19,156819,156820],{},"硬性规则：",[26,156822,156823,156826,156829,156832],{},[29,156824,156825],{},"只能由字母、数字、下划线组成。",[29,156827,156828],{},"不能以数字开头。",[29,156830,156831],{},"不能使用 Python 关键字。",[29,156833,156834],{},"区分大小写。",[58,156836,156838],{"className":60,"code":156837,"language":62,"meta":63,"style":63},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[32,156839,156840,156849,156858],{"__ignoreMap":63},[67,156841,156842,156845,156847],{"class":69,"line":70},[67,156843,156844],{"class":73},"user_name ",[67,156846,85],{"class":84},[67,156848,147979],{"class":114},[67,156850,156851,156854,156856],{"class":69,"line":191},[67,156852,156853],{"class":73},"age2 ",[67,156855,85],{"class":84},[67,156857,147989],{"class":77},[67,156859,156860,156863,156865],{"class":69,"line":202},[67,156861,156862],{"class":73},"_token ",[67,156864,85],{"class":84},[67,156866,156867],{"class":114}," \"abc\"\n",[19,156869,156870],{},"错误写法：",[58,156872,156874],{"className":60,"code":156873,"language":62,"meta":63,"style":63},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[32,156875,156876,156885,156897],{"__ignoreMap":63},[67,156877,156878,156881,156883],{"class":69,"line":70},[67,156879,156880],{"class":79163},"2age",[67,156882,671],{"class":84},[67,156884,147989],{"class":77},[67,156886,156887,156889,156891,156893,156895],{"class":69,"line":191},[67,156888,133022],{"class":73},[67,156890,1863],{"class":84},[67,156892,147974],{"class":73},[67,156894,85],{"class":84},[67,156896,147979],{"class":114},[67,156898,156899,156901,156903],{"class":69,"line":202},[67,156900,16492],{"class":84},[67,156902,671],{"class":84},[67,156904,156905],{"class":114}," \"一班\"\n",[19,156907,156908],{},"查看关键字：",[58,156910,156912],{"className":60,"code":156911,"language":62,"meta":63,"style":63},"import keyword\n\nprint(keyword.kwlist)\n",[32,156913,156914,156921,156925],{"__ignoreMap":63},[67,156915,156916,156918],{"class":69,"line":70},[67,156917,622],{"class":84},[67,156919,156920],{"class":73}," keyword\n",[67,156922,156923],{"class":69,"line":191},[67,156924,631],{"emptyLinePlaceholder":630},[67,156926,156927,156929],{"class":69,"line":202},[67,156928,1626],{"class":77},[67,156930,156931],{"class":73},"(keyword.kwlist)\n",[19,156933,156934],{},"推荐命名风格：",[58,156936,156938],{"className":60,"code":156937,"language":62,"meta":63,"style":63},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[32,156939,156940,156949,156959],{"__ignoreMap":63},[67,156941,156942,156945,156947],{"class":69,"line":70},[67,156943,156944],{"class":73},"student_name ",[67,156946,85],{"class":84},[67,156948,150791],{"class":114},[67,156950,156951,156954,156956],{"class":69,"line":191},[67,156952,156953],{"class":73},"total_price ",[67,156955,85],{"class":84},[67,156957,156958],{"class":77}," 99.8\n",[67,156960,156961,156964,156966],{"class":69,"line":202},[67,156962,156963],{"class":73},"is_finished ",[67,156965,85],{"class":84},[67,156967,127245],{"class":77},[19,156969,156970],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156972,52500],{"id":52499},[19,156974,106039,156975,156978],{},[32,156976,156977],{},"type()"," 查看数据类型：",[58,156980,156982],{"className":60,"code":156981,"language":62,"meta":63,"style":63},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[32,156983,156984,156998,157012,157026,157040],{"__ignoreMap":63},[67,156985,156986,156988,156990,156992,156994,156996],{"class":69,"line":70},[67,156987,1626],{"class":77},[67,156989,854],{"class":73},[67,156991,104791],{"class":77},[67,156993,854],{"class":73},[67,156995,2302],{"class":77},[67,156997,1050],{"class":73},[67,156999,157000,157002,157004,157006,157008,157010],{"class":69,"line":191},[67,157001,1626],{"class":77},[67,157003,854],{"class":73},[67,157005,104791],{"class":77},[67,157007,854],{"class":73},[67,157009,2049],{"class":77},[67,157011,1050],{"class":73},[67,157013,157014,157016,157018,157020,157022,157024],{"class":69,"line":202},[67,157015,1626],{"class":77},[67,157017,854],{"class":73},[67,157019,104791],{"class":77},[67,157021,854],{"class":73},[67,157023,7661],{"class":114},[67,157025,1050],{"class":73},[67,157027,157028,157030,157032,157034,157036,157038],{"class":69,"line":641},[67,157029,1626],{"class":77},[67,157031,854],{"class":73},[67,157033,104791],{"class":77},[67,157035,854],{"class":73},[67,157037,33248],{"class":77},[67,157039,1050],{"class":73},[67,157041,157042,157044,157046,157048,157050,157052],{"class":69,"line":655},[67,157043,1626],{"class":77},[67,157045,854],{"class":73},[67,157047,104791],{"class":77},[67,157049,854],{"class":73},[67,157051,810],{"class":77},[67,157053,1050],{"class":73},[19,157055,157056],{},"输出类似：",[58,157058,157061],{"className":157059,"code":157060,"language":603,"meta":63},[601],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[32,157062,157060],{"__ignoreMap":63},[19,157064,10831,157065,1688,157067,157069,157070,157072,157073,23296,157075,157072,157077,157079],{},[32,157066,3209],{},[32,157068,2006],{}," 的子类，",[32,157071,33248],{}," 可以当作 ",[32,157074,2209],{},[32,157076,35756],{},[32,157078,78],{},"，但业务代码中不要滥用。",[58,157081,157083],{"className":60,"code":157082,"language":62,"meta":63,"style":63},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[32,157084,157085,157103],{"__ignoreMap":63},[67,157086,157087,157089,157091,157093,157095,157097,157100],{"class":69,"line":70},[67,157088,1626],{"class":77},[67,157090,854],{"class":73},[67,157092,33248],{"class":77},[67,157094,47334],{"class":84},[67,157096,906],{"class":77},[67,157098,157099],{"class":73},")   ",[67,157101,157102],{"class":2058},"# 2\n",[67,157104,157105,157107,157109,157111,157113,157115,157117],{"class":69,"line":191},[67,157106,1626],{"class":77},[67,157108,854],{"class":73},[67,157110,35756],{"class":77},[67,157112,47334],{"class":84},[67,157114,906],{"class":77},[67,157116,47576],{"class":73},[67,157118,157119],{"class":2058},"# 1\n",[14,157121,157123],{"id":157122},"_26-类型转换","2.6 类型转换",[19,157125,157126],{},"常用转换函数：",[58,157128,157130],{"className":60,"code":157129,"language":62,"meta":63,"style":63},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[32,157131,157132,157142,157153,157163],{"__ignoreMap":63},[67,157133,157134,157136,157138,157140],{"class":69,"line":70},[67,157135,2006],{"class":77},[67,157137,854],{"class":73},[67,157139,56077],{"class":114},[67,157141,829],{"class":73},[67,157143,157144,157146,157148,157151],{"class":69,"line":191},[67,157145,2041],{"class":77},[67,157147,854],{"class":73},[67,157149,157150],{"class":114},"\"3.14\"",[67,157152,829],{"class":73},[67,157154,157155,157157,157159,157161],{"class":69,"line":202},[67,157156,3157],{"class":77},[67,157158,854],{"class":73},[67,157160,2302],{"class":77},[67,157162,829],{"class":73},[67,157164,157165,157167,157169,157171],{"class":69,"line":641},[67,157166,3209],{"class":77},[67,157168,854],{"class":73},[67,157170,2209],{"class":77},[67,157172,829],{"class":73},[19,157174,16932],{},[58,157176,157178],{"className":60,"code":157177,"language":62,"meta":63,"style":63},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[32,157179,157180,157189,157200],{"__ignoreMap":63},[67,157181,157182,157184,157186],{"class":69,"line":70},[67,157183,147984],{"class":73},[67,157185,85],{"class":84},[67,157187,157188],{"class":114}," \"18\"\n",[67,157190,157191,157193,157195,157197],{"class":69,"line":191},[67,157192,147984],{"class":73},[67,157194,85],{"class":84},[67,157196,4215],{"class":77},[67,157198,157199],{"class":73},"(age)\n",[67,157201,157202,157204,157207,157209,157211],{"class":69,"line":202},[67,157203,1626],{"class":77},[67,157205,157206],{"class":73},"(age ",[67,157208,2471],{"class":84},[67,157210,906],{"class":77},[67,157212,829],{"class":73},[19,157214,157215],{},"输入得到的内容永远是字符串：",[58,157217,157219],{"className":60,"code":157218,"language":62,"meta":63,"style":63},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[32,157220,157221,157237],{"__ignoreMap":63},[67,157222,157223,157226,157228,157230,157232,157235],{"class":69,"line":70},[67,157224,157225],{"class":73},"num ",[67,157227,85],{"class":84},[67,157229,62366],{"class":77},[67,157231,854],{"class":73},[67,157233,157234],{"class":114},"\"请输入数字:\"",[67,157236,829],{"class":73},[67,157238,157239,157241,157243,157245,157248],{"class":69,"line":191},[67,157240,1626],{"class":77},[67,157242,854],{"class":73},[67,157244,104791],{"class":77},[67,157246,157247],{"class":73},"(num))  ",[67,157249,157250],{"class":2058},"# str\n",[19,157252,157253],{},"如果要做数学运算，必须转换：",[58,157255,157257],{"className":60,"code":157256,"language":62,"meta":63,"style":63},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[32,157258,157259,157277],{"__ignoreMap":63},[67,157260,157261,157263,157265,157267,157269,157271,157273,157275],{"class":69,"line":70},[67,157262,157225],{"class":73},[67,157264,85],{"class":84},[67,157266,4215],{"class":77},[67,157268,854],{"class":73},[67,157270,55583],{"class":77},[67,157272,854],{"class":73},[67,157274,157234],{"class":114},[67,157276,1050],{"class":73},[67,157278,157279,157281,157283,157285,157287],{"class":69,"line":191},[67,157280,1626],{"class":77},[67,157282,47387],{"class":73},[67,157284,2471],{"class":84},[67,157286,3871],{"class":77},[67,157288,829],{"class":73},[19,157290,157291],{},"常见错误：",[58,157293,157295],{"className":60,"code":157294,"language":62,"meta":63,"style":63},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[32,157296,157297,157310],{"__ignoreMap":63},[67,157298,157299,157301,157303,157305,157307],{"class":69,"line":70},[67,157300,2006],{"class":77},[67,157302,854],{"class":73},[67,157304,157150],{"class":114},[67,157306,157099],{"class":73},[67,157308,157309],{"class":2058},"# 错误\n",[67,157311,157312,157314,157316,157319,157322],{"class":69,"line":191},[67,157313,2006],{"class":77},[67,157315,854],{"class":73},[67,157317,157318],{"class":114},"\"abc\"",[67,157320,157321],{"class":73},")    ",[67,157323,157309],{"class":2058},[19,157325,157326],{},"正确写法：",[58,157328,157330],{"className":60,"code":157329,"language":62,"meta":63,"style":63},"num = float(\"3.14\")\n",[32,157331,157332],{"__ignoreMap":63},[67,157333,157334,157336,157338,157340,157342,157344],{"class":69,"line":70},[67,157335,157225],{"class":73},[67,157337,85],{"class":84},[67,157339,111235],{"class":77},[67,157341,854],{"class":73},[67,157343,157150],{"class":114},[67,157345,829],{"class":73},[14,157347,157349],{"id":157348},"_27-运算符","2.7 运算符",[391,157351,157353],{"id":157352},"_271-算术运算符","2.7.1 算术运算符",[399,157355,157356,157367],{},[402,157357,157358],{},[405,157359,157360,157363,157365],{},[408,157361,157362],{},"运算符",[408,157364,27658],{},[408,157366,29278],{},[419,157368,157369,157383,157397,157411,157425,157439,157453],{},[405,157370,157371,157375,157378],{},[424,157372,157373],{},[32,157374,2471],{},[424,157376,157377],{},"加法",[424,157379,157380],{},[32,157381,157382],{},"1 + 2",[405,157384,157385,157389,157392],{},[424,157386,157387],{},[32,157388,1863],{},[424,157390,157391],{},"减法",[424,157393,157394],{},[32,157395,157396],{},"5 - 3",[405,157398,157399,157403,157406],{},[424,157400,157401],{},[32,157402,965],{},[424,157404,157405],{},"乘法",[424,157407,157408],{},[32,157409,157410],{},"2 * 3",[405,157412,157413,157417,157420],{},[424,157414,157415],{},[32,157416,2573],{},[424,157418,157419],{},"除法，结果是浮点数",[424,157421,157422],{},[32,157423,157424],{},"5 \u002F 2",[405,157426,157427,157431,157434],{},[424,157428,157429],{},[32,157430,35098],{},[424,157432,157433],{},"整除",[424,157435,157436],{},[32,157437,157438],{},"5 \u002F\u002F 2",[405,157440,157441,157445,157448],{},[424,157442,157443],{},[32,157444,2319],{},[424,157446,157447],{},"取余",[424,157449,157450],{},[32,157451,157452],{},"5 % 2",[405,157454,157455,157459,157462],{},[424,157456,157457],{},[32,157458,12461],{},[424,157460,157461],{},"幂运算",[424,157463,157464],{},[32,157465,157466],{},"2 ** 3",[19,157468,16932],{},[58,157470,157472],{"className":60,"code":157471,"language":62,"meta":63,"style":63},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[32,157473,157474,157492,157509,157526],{"__ignoreMap":63},[67,157475,157476,157478,157480,157482,157485,157487,157489],{"class":69,"line":70},[67,157477,1626],{"class":77},[67,157479,854],{"class":73},[67,157481,2310],{"class":77},[67,157483,157484],{"class":84}," \u002F",[67,157486,16553],{"class":77},[67,157488,157099],{"class":73},[67,157490,157491],{"class":2058},"# 2.5\n",[67,157493,157494,157496,157498,157500,157503,157505,157507],{"class":69,"line":191},[67,157495,1626],{"class":77},[67,157497,854],{"class":73},[67,157499,2310],{"class":77},[67,157501,157502],{"class":84}," \u002F\u002F",[67,157504,16553],{"class":77},[67,157506,47576],{"class":73},[67,157508,157102],{"class":2058},[67,157510,157511,157513,157515,157517,157520,157522,157524],{"class":69,"line":202},[67,157512,1626],{"class":77},[67,157514,854],{"class":73},[67,157516,2310],{"class":77},[67,157518,157519],{"class":84}," %",[67,157521,16553],{"class":77},[67,157523,157099],{"class":73},[67,157525,157119],{"class":2058},[67,157527,157528,157530,157532,157534,157537,157539,157541],{"class":69,"line":641},[67,157529,1626],{"class":77},[67,157531,854],{"class":73},[67,157533,2077],{"class":77},[67,157535,157536],{"class":84}," **",[67,157538,79830],{"class":77},[67,157540,47576],{"class":73},[67,157542,157543],{"class":2058},"# 8\n",[391,157545,157547],{"id":157546},"_272-赋值运算符","2.7.2 赋值运算符",[58,157549,157551],{"className":60,"code":157550,"language":62,"meta":63,"style":63},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[32,157552,157553,157561,157569,157577,157585],{"__ignoreMap":63},[67,157554,157555,157557,157559],{"class":69,"line":70},[67,157556,157225],{"class":73},[67,157558,85],{"class":84},[67,157560,60189],{"class":77},[67,157562,157563,157565,157567],{"class":69,"line":191},[67,157564,157225],{"class":73},[67,157566,11283],{"class":84},[67,157568,56188],{"class":77},[67,157570,157571,157573,157575],{"class":69,"line":202},[67,157572,157225],{"class":73},[67,157574,151690],{"class":84},[67,157576,49491],{"class":77},[67,157578,157579,157581,157583],{"class":69,"line":641},[67,157580,157225],{"class":73},[67,157582,138586],{"class":84},[67,157584,121474],{"class":77},[67,157586,157587,157589,157592],{"class":69,"line":655},[67,157588,157225],{"class":73},[67,157590,157591],{"class":84},"\u002F=",[67,157593,49491],{"class":77},[19,157595,157596],{},"等价关系：",[58,157598,157600],{"className":60,"code":157599,"language":62,"meta":63,"style":63},"num += 1\nnum = num + 1\n",[32,157601,157602,157610],{"__ignoreMap":63},[67,157603,157604,157606,157608],{"class":69,"line":70},[67,157605,157225],{"class":73},[67,157607,11283],{"class":84},[67,157609,57460],{"class":77},[67,157611,157612,157614,157616,157619,157621],{"class":69,"line":191},[67,157613,157225],{"class":73},[67,157615,85],{"class":84},[67,157617,157618],{"class":73}," num ",[67,157620,2471],{"class":84},[67,157622,57460],{"class":77},[19,157624,157625,157626,1264,157629,230],{},"Python 没有 ",[32,157627,157628],{},"num++",[32,157630,157631],{},"num--",[391,157633,157635],{"id":157634},"_273-比较运算符","2.7.3 比较运算符",[19,157637,157638],{},"比较运算结果是布尔值。",[58,157640,157642],{"className":60,"code":157641,"language":62,"meta":63,"style":63},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[32,157643,157644,157658,157673,157687],{"__ignoreMap":63},[67,157645,157646,157648,157650,157652,157654,157656],{"class":69,"line":70},[67,157647,1626],{"class":77},[67,157649,854],{"class":73},[67,157651,2437],{"class":77},[67,157653,28010],{"class":84},[67,157655,3981],{"class":77},[67,157657,829],{"class":73},[67,157659,157660,157662,157664,157666,157669,157671],{"class":69,"line":191},[67,157661,1626],{"class":77},[67,157663,854],{"class":73},[67,157665,2437],{"class":77},[67,157667,157668],{"class":84}," >=",[67,157670,3871],{"class":77},[67,157672,829],{"class":73},[67,157674,157675,157677,157679,157681,157683,157685],{"class":69,"line":202},[67,157676,1626],{"class":77},[67,157678,854],{"class":73},[67,157680,2437],{"class":77},[67,157682,1102],{"class":84},[67,157684,3916],{"class":77},[67,157686,829],{"class":73},[67,157688,157689,157691,157693,157695,157698,157700],{"class":69,"line":641},[67,157690,1626],{"class":77},[67,157692,854],{"class":73},[67,157694,2437],{"class":77},[67,157696,157697],{"class":84}," !=",[67,157699,3916],{"class":77},[67,157701,829],{"class":73},[19,157703,157704,157705,157707,157708,230],{},"注意：判断相等用 ",[32,157706,4774],{},"，赋值用 ",[32,157709,85],{},[58,157711,157713],{"className":60,"code":157712,"language":62,"meta":63,"style":63},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[32,157714,157715,157727],{"__ignoreMap":63},[67,157716,157717,157719,157721,157724],{"class":69,"line":70},[67,157718,147984],{"class":73},[67,157720,85],{"class":84},[67,157722,157723],{"class":77}," 18",[67,157725,157726],{"class":2058},"       # 赋值\n",[67,157728,157729,157731,157733,157735],{"class":69,"line":191},[67,157730,147984],{"class":73},[67,157732,4774],{"class":84},[67,157734,157723],{"class":77},[67,157736,157737],{"class":2058},"      # 判断是否相等\n",[391,157739,157741],{"id":157740},"_274-逻辑运算符","2.7.4 逻辑运算符",[399,157743,157744,157752],{},[402,157745,157746],{},[405,157747,157748,157750],{},[408,157749,157362],{},[408,157751,27658],{},[419,157753,157754,157763,157772],{},[405,157755,157756,157760],{},[424,157757,157758],{},[32,157759,32241],{},[424,157761,157762],{},"并且",[405,157764,157765,157769],{},[424,157766,157767],{},[32,157768,116528],{},[424,157770,157771],{},"或者",[405,157773,157774,157779],{},[424,157775,157776],{},[32,157777,157778],{},"not",[424,157780,157781],{},"取反",[58,157783,157785],{"className":60,"code":157784,"language":62,"meta":63,"style":63},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[32,157786,157787,157795,157804,157808,157823,157837],{"__ignoreMap":63},[67,157788,157789,157791,157793],{"class":69,"line":70},[67,157790,147984],{"class":73},[67,157792,85],{"class":84},[67,157794,89824],{"class":77},[67,157796,157797,157800,157802],{"class":69,"line":191},[67,157798,157799],{"class":73},"has_ticket ",[67,157801,85],{"class":84},[67,157803,155037],{"class":77},[67,157805,157806],{"class":69,"line":202},[67,157807,631],{"emptyLinePlaceholder":630},[67,157809,157810,157812,157814,157816,157818,157820],{"class":69,"line":641},[67,157811,1626],{"class":77},[67,157813,157206],{"class":73},[67,157815,3553],{"class":84},[67,157817,157723],{"class":77},[67,157819,121867],{"class":84},[67,157821,157822],{"class":73}," has_ticket)\n",[67,157824,157825,157827,157829,157831,157833,157835],{"class":69,"line":655},[67,157826,1626],{"class":77},[67,157828,157206],{"class":73},[67,157830,259],{"class":84},[67,157832,157723],{"class":77},[67,157834,115639],{"class":84},[67,157836,157822],{"class":73},[67,157838,157839,157841,157843,157845],{"class":69,"line":660},[67,157840,1626],{"class":77},[67,157842,854],{"class":73},[67,157844,157778],{"class":84},[67,157846,157822],{"class":73},[14,157848,157850],{"id":157849},"_28-字符串定义","2.8 字符串定义",[19,157852,157853],{},"三种常见写法：",[58,157855,157857],{"className":60,"code":157856,"language":62,"meta":63,"style":63},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[32,157858,157859,157869,157878,157888],{"__ignoreMap":63},[67,157860,157861,157864,157866],{"class":69,"line":70},[67,157862,157863],{"class":73},"name1 ",[67,157865,85],{"class":84},[67,157867,157868],{"class":114}," '小明'\n",[67,157870,157871,157874,157876],{"class":69,"line":191},[67,157872,157873],{"class":73},"name2 ",[67,157875,85],{"class":84},[67,157877,150791],{"class":114},[67,157879,157880,157883,157885],{"class":69,"line":202},[67,157881,157882],{"class":73},"text ",[67,157884,85],{"class":84},[67,157886,157887],{"class":114}," \"\"\"这是多行字符串\n",[67,157889,157890],{"class":69,"line":641},[67,157891,157892],{"class":114},"可以换行\"\"\"\n",[19,157894,157895],{},"字符串中包含引号：",[58,157897,157899],{"className":60,"code":157898,"language":62,"meta":63,"style":63},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[32,157900,157901,157911,157921],{"__ignoreMap":63},[67,157902,157903,157906,157908],{"class":69,"line":70},[67,157904,157905],{"class":73},"msg ",[67,157907,85],{"class":84},[67,157909,157910],{"class":114}," \"他说:'你好'\"\n",[67,157912,157913,157916,157918],{"class":69,"line":191},[67,157914,157915],{"class":73},"msg2 ",[67,157917,85],{"class":84},[67,157919,157920],{"class":114}," '他说:\"你好\"'\n",[67,157922,157923,157926,157928,157931,157934,157937,157939],{"class":69,"line":202},[67,157924,157925],{"class":73},"msg3 ",[67,157927,85],{"class":84},[67,157929,157930],{"class":114}," \"他说:",[67,157932,157933],{"class":77},"\\\"",[67,157935,157936],{"class":114},"你好",[67,157938,157933],{"class":77},[67,157940,26923],{"class":114},[19,157942,157943],{},"常见转义字符：",[399,157945,157946,157955],{},[402,157947,157948],{},[405,157949,157950,157953],{},[408,157951,157952],{},"写法",[408,157954,102455],{},[419,157956,157957,157967,157976,157986,157995],{},[405,157958,157959,157964],{},[424,157960,157961],{},[32,157962,157963],{},"\\n",[424,157965,157966],{},"换行",[405,157968,157969,157973],{},[424,157970,157971],{},[32,157972,3088],{},[424,157974,157975],{},"制表符",[405,157977,157978,157983],{},[424,157979,157980],{},[32,157981,157982],{},"\\\\",[424,157984,157985],{},"反斜杠",[405,157987,157988,157992],{},[424,157989,157990],{},[32,157991,157933],{},[424,157993,157994],{},"双引号",[405,157996,157997,158002],{},[424,157998,157999],{},[32,158000,158001],{},"\\'",[424,158003,158004],{},"单引号",[14,158006,158008],{"id":158007},"_29-字符串拼接","2.9 字符串拼接",[58,158010,158012],{"className":60,"code":158011,"language":62,"meta":63,"style":63},"name = \"小明\"\nprint(\"你好，\" + name)\n",[32,158013,158014,158022],{"__ignoreMap":63},[67,158015,158016,158018,158020],{"class":69,"line":70},[67,158017,147974],{"class":73},[67,158019,85],{"class":84},[67,158021,150791],{"class":114},[67,158023,158024,158026,158028,158031,158033],{"class":69,"line":191},[67,158025,1626],{"class":77},[67,158027,854],{"class":73},[67,158029,158030],{"class":114},"\"你好，\"",[67,158032,47334],{"class":84},[67,158034,158035],{"class":73}," name)\n",[19,158037,158038],{},"字符串只能和字符串拼接：",[58,158040,158042],{"className":60,"code":158041,"language":62,"meta":63,"style":63},"age = 18\nprint(\"年龄:\" + str(age))\n",[32,158043,158044,158052],{"__ignoreMap":63},[67,158045,158046,158048,158050],{"class":69,"line":70},[67,158047,147984],{"class":73},[67,158049,85],{"class":84},[67,158051,147989],{"class":77},[67,158053,158054,158056,158058,158060,158062,158064],{"class":69,"line":191},[67,158055,1626],{"class":77},[67,158057,854],{"class":73},[67,158059,147955],{"class":114},[67,158061,47334],{"class":84},[67,158063,75679],{"class":77},[67,158065,158066],{"class":73},"(age))\n",[19,158068,158069],{},"更推荐使用格式化字符串。",[14,158071,158073],{"id":158072},"_210-字符串格式化","2.10 字符串格式化",[391,158075,158077],{"id":158076},"_2101-百分号格式化","2.10.1 百分号格式化",[58,158079,158081],{"className":60,"code":158080,"language":62,"meta":63,"style":63},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[32,158082,158083,158091,158099,158108,158112],{"__ignoreMap":63},[67,158084,158085,158087,158089],{"class":69,"line":70},[67,158086,147974],{"class":73},[67,158088,85],{"class":84},[67,158090,150791],{"class":114},[67,158092,158093,158095,158097],{"class":69,"line":191},[67,158094,147984],{"class":73},[67,158096,85],{"class":84},[67,158098,147989],{"class":77},[67,158100,158101,158103,158105],{"class":69,"line":202},[67,158102,156796],{"class":73},[67,158104,85],{"class":84},[67,158106,158107],{"class":77}," 95.5\n",[67,158109,158110],{"class":69,"line":641},[67,158111,631],{"emptyLinePlaceholder":630},[67,158113,158114,158116,158118,158121,158124,158127,158130,158133,158136,158138,158140],{"class":69,"line":655},[67,158115,1626],{"class":77},[67,158117,854],{"class":73},[67,158119,158120],{"class":114},"\"姓名:",[67,158122,158123],{"class":77},"%s",[67,158125,158126],{"class":114}," 年龄:",[67,158128,158129],{"class":77},"%d",[67,158131,158132],{"class":114}," 分数:",[67,158134,158135],{"class":77},"%.1f",[67,158137,2243],{"class":114},[67,158139,157519],{"class":84},[67,158141,158142],{"class":73}," (name, age, score))\n",[19,158144,158145],{},"常用占位符：",[399,158147,158148,158157],{},[402,158149,158150],{},[405,158151,158152,158155],{},[408,158153,158154],{},"占位符",[408,158156,27658],{},[419,158158,158159,158167,158175],{},[405,158160,158161,158165],{},[424,158162,158163],{},[32,158164,158123],{},[424,158166,156662],{},[405,158168,158169,158173],{},[424,158170,158171],{},[32,158172,158129],{},[424,158174,156640],{},[405,158176,158177,158182],{},[424,158178,158179],{},[32,158180,158181],{},"%f",[424,158183,156651],{},[19,158185,158186],{},"精度控制：",[58,158188,158190],{"className":60,"code":158189,"language":62,"meta":63,"style":63},"price = 12.3456\nprint(\"%.2f\" % price)\n",[32,158191,158192,158201],{"__ignoreMap":63},[67,158193,158194,158196,158198],{"class":69,"line":70},[67,158195,148119],{"class":73},[67,158197,85],{"class":84},[67,158199,158200],{"class":77}," 12.3456\n",[67,158202,158203,158205,158207,158209,158212,158214,158216],{"class":69,"line":191},[67,158204,1626],{"class":77},[67,158206,854],{"class":73},[67,158208,2243],{"class":114},[67,158210,158211],{"class":77},"%.2f",[67,158213,2243],{"class":114},[67,158215,157519],{"class":84},[67,158217,158218],{"class":73}," price)\n",[391,158220,158222],{"id":158221},"_2102-format方法","2.10.2 format方法",[58,158224,158226],{"className":60,"code":158225,"language":62,"meta":63,"style":63},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[32,158227,158228,158236,158244,158248,158267,158287],{"__ignoreMap":63},[67,158229,158230,158232,158234],{"class":69,"line":70},[67,158231,147974],{"class":73},[67,158233,85],{"class":84},[67,158235,150791],{"class":114},[67,158237,158238,158240,158242],{"class":69,"line":191},[67,158239,147984],{"class":73},[67,158241,85],{"class":84},[67,158243,147989],{"class":77},[67,158245,158246],{"class":69,"line":202},[67,158247,631],{"emptyLinePlaceholder":630},[67,158249,158250,158252,158254,158256,158258,158260,158262,158264],{"class":69,"line":641},[67,158251,1626],{"class":77},[67,158253,854],{"class":73},[67,158255,158120],{"class":114},[67,158257,34228],{"class":77},[67,158259,158126],{"class":114},[67,158261,34228],{"class":77},[67,158263,2243],{"class":114},[67,158265,158266],{"class":73},".format(name, age))\n",[67,158268,158269,158271,158273,158275,158278,158280,158283,158285],{"class":69,"line":655},[67,158270,1626],{"class":77},[67,158272,854],{"class":73},[67,158274,158120],{"class":114},[67,158276,158277],{"class":77},"{0}",[67,158279,158126],{"class":114},[67,158281,158282],{"class":77},"{1}",[67,158284,2243],{"class":114},[67,158286,158266],{"class":73},[67,158288,158289,158291,158293,158295,158298,158300,158303,158305,158308,158310,158312,158315,158317,158319],{"class":69,"line":660},[67,158290,1626],{"class":77},[67,158292,854],{"class":73},[67,158294,158120],{"class":114},[67,158296,158297],{"class":77},"{name}",[67,158299,158126],{"class":114},[67,158301,158302],{"class":77},"{age}",[67,158304,2243],{"class":114},[67,158306,158307],{"class":73},".format(",[67,158309,81570],{"class":7033},[67,158311,85],{"class":84},[67,158313,158314],{"class":73},"name, ",[67,158316,71981],{"class":7033},[67,158318,85],{"class":84},[67,158320,158321],{"class":73},"age))\n",[391,158323,158325],{"id":158324},"_2103-f-string","2.10.3 f-string",[19,158327,158328],{},"推荐写法：",[58,158330,158332],{"className":60,"code":158331,"language":62,"meta":63,"style":63},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[32,158333,158334,158342,158350,158358,158362],{"__ignoreMap":63},[67,158335,158336,158338,158340],{"class":69,"line":70},[67,158337,147974],{"class":73},[67,158339,85],{"class":84},[67,158341,150791],{"class":114},[67,158343,158344,158346,158348],{"class":69,"line":191},[67,158345,147984],{"class":73},[67,158347,85],{"class":84},[67,158349,147989],{"class":77},[67,158351,158352,158354,158356],{"class":69,"line":202},[67,158353,156796],{"class":73},[67,158355,85],{"class":84},[67,158357,158107],{"class":77},[67,158359,158360],{"class":69,"line":641},[67,158361,631],{"emptyLinePlaceholder":630},[67,158363,158364,158366,158368,158370,158372,158374,158376,158378,158380,158382,158384,158386,158388,158390,158393,158396,158398,158400],{"class":69,"line":655},[67,158365,1626],{"class":77},[67,158367,854],{"class":73},[67,158369,2052],{"class":84},[67,158371,158120],{"class":114},[67,158373,2885],{"class":77},[67,158375,81570],{"class":73},[67,158377,2934],{"class":77},[67,158379,158126],{"class":114},[67,158381,2885],{"class":77},[67,158383,71981],{"class":73},[67,158385,2934],{"class":77},[67,158387,158132],{"class":114},[67,158389,2885],{"class":77},[67,158391,158392],{"class":73},"score",[67,158394,158395],{"class":84},":.1f",[67,158397,2934],{"class":77},[67,158399,2243],{"class":114},[67,158401,829],{"class":73},[19,158403,158404],{},"表达式也可以放进去：",[58,158406,158408],{"className":60,"code":158407,"language":62,"meta":63,"style":63},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[32,158409,158410,158418,158426],{"__ignoreMap":63},[67,158411,158412,158414,158416],{"class":69,"line":70},[67,158413,148119],{"class":73},[67,158415,85],{"class":84},[67,158417,148124],{"class":77},[67,158419,158420,158422,158424],{"class":69,"line":191},[67,158421,148129],{"class":73},[67,158423,85],{"class":84},[67,158425,56188],{"class":77},[67,158427,158428,158430,158432,158434,158437,158439,158441,158443,158446,158448,158451],{"class":69,"line":202},[67,158429,1626],{"class":77},[67,158431,854],{"class":73},[67,158433,2052],{"class":84},[67,158435,158436],{"class":114},"\"总价:",[67,158438,2885],{"class":77},[67,158440,148119],{"class":73},[67,158442,965],{"class":84},[67,158444,158445],{"class":73}," count",[67,158447,2934],{"class":77},[67,158449,158450],{"class":114},"元\"",[67,158452,829],{"class":73},[14,158454,158456],{"id":158455},"_211-input输入","2.11 input输入",[19,158458,158459,158462],{},[32,158460,158461],{},"input()"," 会暂停程序，等待用户输入。",[58,158464,158466],{"className":60,"code":158465,"language":62,"meta":63,"style":63},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[32,158467,158468,158482],{"__ignoreMap":63},[67,158469,158470,158472,158474,158476,158478,158480],{"class":69,"line":70},[67,158471,147974],{"class":73},[67,158473,85],{"class":84},[67,158475,62366],{"class":77},[67,158477,854],{"class":73},[67,158479,153817],{"class":114},[67,158481,829],{"class":73},[67,158483,158484,158486,158488,158490,158493,158495,158497,158499,158501],{"class":69,"line":191},[67,158485,1626],{"class":77},[67,158487,854],{"class":73},[67,158489,2052],{"class":84},[67,158491,158492],{"class":114},"\"你好，",[67,158494,2885],{"class":77},[67,158496,81570],{"class":73},[67,158498,2934],{"class":77},[67,158500,2243],{"class":114},[67,158502,829],{"class":73},[19,158504,158505],{},"输入整数：",[58,158507,158509],{"className":60,"code":158508,"language":62,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[32,158510,158511,158529],{"__ignoreMap":63},[67,158512,158513,158515,158517,158519,158521,158523,158525,158527],{"class":69,"line":70},[67,158514,147984],{"class":73},[67,158516,85],{"class":84},[67,158518,4215],{"class":77},[67,158520,854],{"class":73},[67,158522,55583],{"class":77},[67,158524,854],{"class":73},[67,158526,153832],{"class":114},[67,158528,1050],{"class":73},[67,158530,158531,158533,158535,158537,158540,158542,158544,158546,158549,158551],{"class":69,"line":191},[67,158532,1626],{"class":77},[67,158534,854],{"class":73},[67,158536,2052],{"class":84},[67,158538,158539],{"class":114},"\"明年你",[67,158541,2885],{"class":77},[67,158543,147984],{"class":73},[67,158545,2471],{"class":84},[67,158547,158548],{"class":77}," 1}",[67,158550,150842],{"class":114},[67,158552,829],{"class":73},[19,158554,158555],{},"输入小数：",[58,158557,158559],{"className":60,"code":158558,"language":62,"meta":63,"style":63},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[32,158560,158561,158580],{"__ignoreMap":63},[67,158562,158563,158565,158567,158569,158571,158573,158575,158578],{"class":69,"line":70},[67,158564,156769],{"class":73},[67,158566,85],{"class":84},[67,158568,111235],{"class":77},[67,158570,854],{"class":73},[67,158572,55583],{"class":77},[67,158574,854],{"class":73},[67,158576,158577],{"class":114},"\"请输入身高:\"",[67,158579,1050],{"class":73},[67,158581,158582,158584,158586,158588,158591,158593,158595,158598,158600,158603],{"class":69,"line":191},[67,158583,1626],{"class":77},[67,158585,854],{"class":73},[67,158587,2052],{"class":84},[67,158589,158590],{"class":114},"\"身高:",[67,158592,2885],{"class":77},[67,158594,26773],{"class":73},[67,158596,158597],{"class":84},":.2f",[67,158599,2934],{"class":77},[67,158601,158602],{"class":114},"米\"",[67,158604,829],{"class":73},[14,158606,158608],{"id":158607},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158610,124730],{},[26,158612,158613,158616,158619,158622],{},[29,158614,158615],{},"输入商品单价。",[29,158617,158618],{},"输入购买数量。",[29,158620,158621],{},"输入折扣，例如 0.8 表示八折。",[29,158623,158624],{},"输出最终金额，保留两位小数。",[19,158626,11835],{},[58,158628,158630],{"className":60,"code":158629,"language":62,"meta":63,"style":63},"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",[32,158631,158632,158651,158670,158690,158694,158714,158718,158741,158762,158784],{"__ignoreMap":63},[67,158633,158634,158636,158638,158640,158642,158644,158646,158649],{"class":69,"line":70},[67,158635,148119],{"class":73},[67,158637,85],{"class":84},[67,158639,111235],{"class":77},[67,158641,854],{"class":73},[67,158643,55583],{"class":77},[67,158645,854],{"class":73},[67,158647,158648],{"class":114},"\"请输入商品单价:\"",[67,158650,1050],{"class":73},[67,158652,158653,158655,158657,158659,158661,158663,158665,158668],{"class":69,"line":191},[67,158654,148129],{"class":73},[67,158656,85],{"class":84},[67,158658,4215],{"class":77},[67,158660,854],{"class":73},[67,158662,55583],{"class":77},[67,158664,854],{"class":73},[67,158666,158667],{"class":114},"\"请输入购买数量:\"",[67,158669,1050],{"class":73},[67,158671,158672,158675,158677,158679,158681,158683,158685,158688],{"class":69,"line":202},[67,158673,158674],{"class":73},"discount ",[67,158676,85],{"class":84},[67,158678,111235],{"class":77},[67,158680,854],{"class":73},[67,158682,55583],{"class":77},[67,158684,854],{"class":73},[67,158686,158687],{"class":114},"\"请输入折扣:\"",[67,158689,1050],{"class":73},[67,158691,158692],{"class":69,"line":641},[67,158693,631],{"emptyLinePlaceholder":630},[67,158695,158696,158699,158701,158704,158706,158709,158711],{"class":69,"line":655},[67,158697,158698],{"class":73},"total ",[67,158700,85],{"class":84},[67,158702,158703],{"class":73}," price ",[67,158705,965],{"class":84},[67,158707,158708],{"class":73}," count ",[67,158710,965],{"class":84},[67,158712,158713],{"class":73}," discount\n",[67,158715,158716],{"class":69,"line":660},[67,158717,631],{"emptyLinePlaceholder":630},[67,158719,158720,158722,158724,158726,158729,158731,158733,158735,158737,158739],{"class":69,"line":665},[67,158721,1626],{"class":77},[67,158723,854],{"class":73},[67,158725,2052],{"class":84},[67,158727,158728],{"class":114},"\"商品单价:",[67,158730,2885],{"class":77},[67,158732,81575],{"class":73},[67,158734,158597],{"class":84},[67,158736,2934],{"class":77},[67,158738,2243],{"class":114},[67,158740,829],{"class":73},[67,158742,158743,158745,158747,158749,158752,158754,158756,158758,158760],{"class":69,"line":677},[67,158744,1626],{"class":77},[67,158746,854],{"class":73},[67,158748,2052],{"class":84},[67,158750,158751],{"class":114},"\"购买数量:",[67,158753,2885],{"class":77},[67,158755,86193],{"class":73},[67,158757,2934],{"class":77},[67,158759,2243],{"class":114},[67,158761,829],{"class":73},[67,158763,158764,158766,158768,158770,158773,158775,158778,158780,158782],{"class":69,"line":683},[67,158765,1626],{"class":77},[67,158767,854],{"class":73},[67,158769,2052],{"class":84},[67,158771,158772],{"class":114},"\"折扣:",[67,158774,2885],{"class":77},[67,158776,158777],{"class":73},"discount",[67,158779,2934],{"class":77},[67,158781,2243],{"class":114},[67,158783,829],{"class":73},[67,158785,158786,158788,158790,158792,158795,158797,158800,158802,158804,158806],{"class":69,"line":689},[67,158787,1626],{"class":77},[67,158789,854],{"class":73},[67,158791,2052],{"class":84},[67,158793,158794],{"class":114},"\"应付金额:",[67,158796,2885],{"class":77},[67,158798,158799],{"class":73},"total",[67,158801,158597],{"class":84},[67,158803,2934],{"class":77},[67,158805,158450],{"class":114},[67,158807,829],{"class":73},[14,158809,158811],{"id":158810},"_213-易错点","2.13 易错点",[26,158813,158814,158819,158825,158833,158836],{},[29,158815,158816,158818],{},[32,158817,158461],{}," 的结果是字符串，做运算前要转换。",[29,158820,158821,158822,230],{},"字符串拼接时，数字要先 ",[32,158823,158824],{},"str()",[29,158826,158827,158829,158830,158832],{},[32,158828,85],{}," 是赋值，",[32,158831,4774],{}," 是比较。",[29,158834,158835],{},"Python 没有自增自减运算符。",[29,158837,158838],{},"浮点数计算可能有精度误差：",[58,158840,158842],{"className":60,"code":158841,"language":62,"meta":63,"style":63},"print(0.1 + 0.2)\n",[32,158843,158844],{"__ignoreMap":63},[67,158845,158846,158848,158850,158852,158854,158857],{"class":69,"line":70},[67,158847,1626],{"class":77},[67,158849,854],{"class":73},[67,158851,87969],{"class":77},[67,158853,47334],{"class":84},[67,158855,158856],{"class":77}," 0.2",[67,158858,829],{"class":73},[19,158860,158861,158862,158865],{},"金额计算如果要求严格，可以后续学习 ",[32,158863,158864],{},"decimal"," 模块。",[14,158867,158869],{"id":158868},"_214-本章练习","2.14 本章练习",[26,158871,158872,158875,158878,158881,158884],{},[29,158873,158874],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[29,158876,158877],{},"输入圆的半径，计算面积，保留两位小数。",[29,158879,158880],{},"输入工资和奖金，计算总收入。",[29,158882,158883],{},"输入摄氏温度，转换为华氏温度。",[29,158885,158886],{},"写一个 BMI 计算程序：",[58,158888,158891],{"className":158889,"code":158890,"language":603,"meta":63},[601],"BMI = 体重kg \u002F 身高m ** 2\n",[32,158892,158890],{"__ignoreMap":63},[1903,158894,158895],{},"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":63,"searchDepth":191,"depth":191,"links":158897},[158898,158899,158900,158901,158902,158903,158904,158910,158911,158912,158917,158918,158919,158920],{"id":156459,"depth":191,"text":156460},{"id":156568,"depth":191,"text":156569},{"id":156739,"depth":191,"text":156740},{"id":156816,"depth":191,"text":156817},{"id":52499,"depth":191,"text":52500},{"id":157122,"depth":191,"text":157123},{"id":157348,"depth":191,"text":157349,"children":158905},[158906,158907,158908,158909],{"id":157352,"depth":202,"text":157353},{"id":157546,"depth":202,"text":157547},{"id":157634,"depth":202,"text":157635},{"id":157740,"depth":202,"text":157741},{"id":157849,"depth":191,"text":157850},{"id":158007,"depth":191,"text":158008},{"id":158072,"depth":191,"text":158073,"children":158913},[158914,158915,158916],{"id":158076,"depth":202,"text":158077},{"id":158221,"depth":202,"text":158222},{"id":158324,"depth":202,"text":158325},{"id":158455,"depth":191,"text":158456},{"id":158607,"depth":191,"text":158608},{"id":158810,"depth":191,"text":158811},{"id":158868,"depth":191,"text":158869},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156451,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158927,"title":158928,"body":158929,"description":25173,"extension":1930,"meta":160565,"navigation":630,"path":160566,"seo":160567,"stem":160568,"__hash__":160569},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158930,"toc":160546},[158931,158934,158938,158941,158956,158959,158987,158991,159041,159043,159059,159062,159088,159091,159095,159162,159165,159181,159185,159188,159306,159309,159316,159365,159371,159375,159378,159491,159494,159498,159502,159505,159555,159559,159562,159612,159616,159619,159657,159661,159664,159710,159713,159748,159752,159757,159760,159806,159808,159875,159879,159885,159996,160005,160009,160011,160022,160024,160190,160194,160196,160210,160212,160426,160430,160449,160466,160469,160515,160519,160543],[10,158932,158928],{"id":158933},"_3-判断语句",[14,158935,158937],{"id":158936},"_31-布尔值","3.1 布尔值",[19,158939,158940],{},"判断语句依赖布尔值：",[58,158942,158944],{"className":60,"code":158943,"language":62,"meta":63,"style":63},"True\nFalse\n",[32,158945,158946,158951],{"__ignoreMap":63},[67,158947,158948],{"class":69,"line":70},[67,158949,158950],{"class":77},"True\n",[67,158952,158953],{"class":69,"line":191},[67,158954,158955],{"class":77},"False\n",[19,158957,158958],{},"比较表达式会产生布尔值：",[58,158960,158962],{"className":60,"code":158961,"language":62,"meta":63,"style":63},"age = 18\nprint(age >= 18)  # True\n",[32,158963,158964,158972],{"__ignoreMap":63},[67,158965,158966,158968,158970],{"class":69,"line":70},[67,158967,147984],{"class":73},[67,158969,85],{"class":84},[67,158971,147989],{"class":77},[67,158973,158974,158976,158978,158980,158982,158984],{"class":69,"line":191},[67,158975,1626],{"class":77},[67,158977,157206],{"class":73},[67,158979,3553],{"class":84},[67,158981,157723],{"class":77},[67,158983,47576],{"class":73},[67,158985,158986],{"class":2058},"# True\n",[14,158988,158990],{"id":158989},"_32-if基础语法","3.2 if基础语法",[58,158992,158994],{"className":60,"code":158993,"language":62,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[32,158995,158996,159014,159018,159030],{"__ignoreMap":63},[67,158997,158998,159000,159002,159004,159006,159008,159010,159012],{"class":69,"line":70},[67,158999,147984],{"class":73},[67,159001,85],{"class":84},[67,159003,4215],{"class":77},[67,159005,854],{"class":73},[67,159007,55583],{"class":77},[67,159009,854],{"class":73},[67,159011,153832],{"class":114},[67,159013,1050],{"class":73},[67,159015,159016],{"class":69,"line":191},[67,159017,631],{"emptyLinePlaceholder":630},[67,159019,159020,159022,159024,159026,159028],{"class":69,"line":202},[67,159021,1096],{"class":84},[67,159023,17504],{"class":73},[67,159025,3553],{"class":84},[67,159027,157723],{"class":77},[67,159029,813],{"class":73},[67,159031,159032,159034,159036,159039],{"class":69,"line":641},[67,159033,851],{"class":77},[67,159035,854],{"class":73},[67,159037,159038],{"class":114},"\"可以进入网吧\"",[67,159040,829],{"class":73},[19,159042,10831],{},[26,159044,159045,159050,159053,159056],{},[29,159046,159047,159049],{},[32,159048,1096],{}," 后面是条件表达式。",[29,159051,159052],{},"条件后面必须写冒号。",[29,159054,159055],{},"条件成立时执行缩进代码块。",[29,159057,159058],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159060,159061],{},"错误示例：",[58,159063,159065],{"className":60,"code":159064,"language":62,"meta":63,"style":63},"if age >= 18\n    print(\"可以进入\")\n",[32,159066,159067,159077],{"__ignoreMap":63},[67,159068,159069,159071,159073,159075],{"class":69,"line":70},[67,159070,1096],{"class":84},[67,159072,17504],{"class":73},[67,159074,3553],{"class":84},[67,159076,147989],{"class":77},[67,159078,159079,159081,159083,159086],{"class":69,"line":191},[67,159080,851],{"class":77},[67,159082,854],{"class":73},[67,159084,159085],{"class":114},"\"可以进入\"",[67,159087,829],{"class":73},[19,159089,159090],{},"缺少冒号。",[14,159092,159094],{"id":159093},"_33-if-else","3.3 if else",[58,159096,159098],{"className":60,"code":159097,"language":62,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[32,159099,159100,159118,159122,159134,159145,159151],{"__ignoreMap":63},[67,159101,159102,159104,159106,159108,159110,159112,159114,159116],{"class":69,"line":70},[67,159103,147984],{"class":73},[67,159105,85],{"class":84},[67,159107,4215],{"class":77},[67,159109,854],{"class":73},[67,159111,55583],{"class":77},[67,159113,854],{"class":73},[67,159115,153832],{"class":114},[67,159117,1050],{"class":73},[67,159119,159120],{"class":69,"line":191},[67,159121,631],{"emptyLinePlaceholder":630},[67,159123,159124,159126,159128,159130,159132],{"class":69,"line":202},[67,159125,1096],{"class":84},[67,159127,17504],{"class":73},[67,159129,3553],{"class":84},[67,159131,157723],{"class":77},[67,159133,813],{"class":73},[67,159135,159136,159138,159140,159143],{"class":69,"line":641},[67,159137,851],{"class":77},[67,159139,854],{"class":73},[67,159141,159142],{"class":114},"\"成年人\"",[67,159144,829],{"class":73},[67,159146,159147,159149],{"class":69,"line":655},[67,159148,3544],{"class":84},[67,159150,813],{"class":73},[67,159152,159153,159155,159157,159160],{"class":69,"line":660},[67,159154,851],{"class":77},[67,159156,854],{"class":73},[67,159158,159159],{"class":114},"\"未成年人\"",[67,159161,829],{"class":73},[19,159163,159164],{},"执行逻辑：",[26,159166,159167,159173,159178],{},[29,159168,159169,159170,159172],{},"条件成立，执行 ",[32,159171,1096],{}," 代码块。",[29,159174,159175,159176,159172],{},"条件不成立，执行 ",[32,159177,3544],{},[29,159179,159180],{},"两个代码块只会执行其中一个。",[14,159182,159184],{"id":159183},"_34-if-elif-else","3.4 if elif else",[19,159186,159187],{},"多条件判断：",[58,159189,159191],{"className":60,"code":159190,"language":62,"meta":63,"style":63},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[32,159192,159193,159211,159215,159229,159240,159254,159265,159278,159289,159295],{"__ignoreMap":63},[67,159194,159195,159197,159199,159201,159203,159205,159207,159209],{"class":69,"line":70},[67,159196,156796],{"class":73},[67,159198,85],{"class":84},[67,159200,4215],{"class":77},[67,159202,854],{"class":73},[67,159204,55583],{"class":77},[67,159206,854],{"class":73},[67,159208,153847],{"class":114},[67,159210,1050],{"class":73},[67,159212,159213],{"class":69,"line":191},[67,159214,631],{"emptyLinePlaceholder":630},[67,159216,159217,159219,159222,159224,159227],{"class":69,"line":202},[67,159218,1096],{"class":84},[67,159220,159221],{"class":73}," score ",[67,159223,3553],{"class":84},[67,159225,159226],{"class":77}," 90",[67,159228,813],{"class":73},[67,159230,159231,159233,159235,159238],{"class":69,"line":641},[67,159232,851],{"class":77},[67,159234,854],{"class":73},[67,159236,159237],{"class":114},"\"优秀\"",[67,159239,829],{"class":73},[67,159241,159242,159245,159247,159249,159252],{"class":69,"line":655},[67,159243,159244],{"class":84},"elif",[67,159246,159221],{"class":73},[67,159248,3553],{"class":84},[67,159250,159251],{"class":77}," 80",[67,159253,813],{"class":73},[67,159255,159256,159258,159260,159263],{"class":69,"line":660},[67,159257,851],{"class":77},[67,159259,854],{"class":73},[67,159261,159262],{"class":114},"\"良好\"",[67,159264,829],{"class":73},[67,159266,159267,159269,159271,159273,159276],{"class":69,"line":665},[67,159268,159244],{"class":84},[67,159270,159221],{"class":73},[67,159272,3553],{"class":84},[67,159274,159275],{"class":77}," 60",[67,159277,813],{"class":73},[67,159279,159280,159282,159284,159287],{"class":69,"line":677},[67,159281,851],{"class":77},[67,159283,854],{"class":73},[67,159285,159286],{"class":114},"\"及格\"",[67,159288,829],{"class":73},[67,159290,159291,159293],{"class":69,"line":683},[67,159292,3544],{"class":84},[67,159294,813],{"class":73},[67,159296,159297,159299,159301,159304],{"class":69,"line":689},[67,159298,851],{"class":77},[67,159300,854],{"class":73},[67,159302,159303],{"class":114},"\"不及格\"",[67,159305,829],{"class":73},[19,159307,159308],{},"注意判断顺序很重要。",[19,159310,159311,159312,159315],{},"如果把 ",[32,159313,159314],{},"score >= 60"," 放在最前面：",[58,159317,159319],{"className":60,"code":159318,"language":62,"meta":63,"style":63},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[32,159320,159321,159333,159343,159355],{"__ignoreMap":63},[67,159322,159323,159325,159327,159329,159331],{"class":69,"line":70},[67,159324,1096],{"class":84},[67,159326,159221],{"class":73},[67,159328,3553],{"class":84},[67,159330,159275],{"class":77},[67,159332,813],{"class":73},[67,159334,159335,159337,159339,159341],{"class":69,"line":191},[67,159336,851],{"class":77},[67,159338,854],{"class":73},[67,159340,159286],{"class":114},[67,159342,829],{"class":73},[67,159344,159345,159347,159349,159351,159353],{"class":69,"line":202},[67,159346,159244],{"class":84},[67,159348,159221],{"class":73},[67,159350,3553],{"class":84},[67,159352,159226],{"class":77},[67,159354,813],{"class":73},[67,159356,159357,159359,159361,159363],{"class":69,"line":641},[67,159358,851],{"class":77},[67,159360,854],{"class":73},[67,159362,159237],{"class":114},[67,159364,829],{"class":73},[19,159366,159367,159368,159370],{},"成绩 95 会先满足 ",[32,159369,159314],{},"，后面的优秀分支就不会执行。",[14,159372,159374],{"id":159373},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159376,159377],{},"嵌套判断就是在一个判断内部再写判断。",[58,159379,159381],{"className":60,"code":159380,"language":62,"meta":63,"style":63},"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",[32,159382,159383,159401,159416,159420,159432,159446,159456,159463,159474,159480],{"__ignoreMap":63},[67,159384,159385,159387,159389,159391,159393,159395,159397,159399],{"class":69,"line":70},[67,159386,147984],{"class":73},[67,159388,85],{"class":84},[67,159390,4215],{"class":77},[67,159392,854],{"class":73},[67,159394,55583],{"class":77},[67,159396,854],{"class":73},[67,159398,153832],{"class":114},[67,159400,1050],{"class":73},[67,159402,159403,159405,159407,159409,159411,159414],{"class":69,"line":191},[67,159404,157799],{"class":73},[67,159406,85],{"class":84},[67,159408,62366],{"class":77},[67,159410,854],{"class":73},[67,159412,159413],{"class":114},"\"是否有票(y\u002Fn):\"",[67,159415,829],{"class":73},[67,159417,159418],{"class":69,"line":202},[67,159419,631],{"emptyLinePlaceholder":630},[67,159421,159422,159424,159426,159428,159430],{"class":69,"line":641},[67,159423,1096],{"class":84},[67,159425,17504],{"class":73},[67,159427,3553],{"class":84},[67,159429,157723],{"class":77},[67,159431,813],{"class":73},[67,159433,159434,159436,159439,159441,159444],{"class":69,"line":655},[67,159435,897],{"class":84},[67,159437,159438],{"class":73}," has_ticket ",[67,159440,4774],{"class":84},[67,159442,159443],{"class":114}," \"y\"",[67,159445,813],{"class":73},[67,159447,159448,159450,159452,159454],{"class":69,"line":660},[67,159449,34220],{"class":77},[67,159451,854],{"class":73},[67,159453,159085],{"class":114},[67,159455,829],{"class":73},[67,159457,159458,159461],{"class":69,"line":665},[67,159459,159460],{"class":84},"    else",[67,159462,813],{"class":73},[67,159464,159465,159467,159469,159472],{"class":69,"line":677},[67,159466,34220],{"class":77},[67,159468,854],{"class":73},[67,159470,159471],{"class":114},"\"请先买票\"",[67,159473,829],{"class":73},[67,159475,159476,159478],{"class":69,"line":683},[67,159477,3544],{"class":84},[67,159479,813],{"class":73},[67,159481,159482,159484,159486,159489],{"class":69,"line":689},[67,159483,851],{"class":77},[67,159485,854],{"class":73},[67,159487,159488],{"class":114},"\"未成年人禁止进入\"",[67,159490,829],{"class":73},[19,159492,159493],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159495,159497],{"id":159496},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[391,159499,159501],{"id":159500},"_361-and","3.6.1 and",[19,159503,159504],{},"两个条件都成立才成立。",[58,159506,159508],{"className":60,"code":159507,"language":62,"meta":63,"style":63},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[32,159509,159510,159518,159526,159530,159545],{"__ignoreMap":63},[67,159511,159512,159514,159516],{"class":69,"line":70},[67,159513,147984],{"class":73},[67,159515,85],{"class":84},[67,159517,89824],{"class":77},[67,159519,159520,159522,159524],{"class":69,"line":191},[67,159521,157799],{"class":73},[67,159523,85],{"class":84},[67,159525,155037],{"class":77},[67,159527,159528],{"class":69,"line":202},[67,159529,631],{"emptyLinePlaceholder":630},[67,159531,159532,159534,159536,159538,159540,159542],{"class":69,"line":641},[67,159533,1096],{"class":84},[67,159535,17504],{"class":73},[67,159537,3553],{"class":84},[67,159539,157723],{"class":77},[67,159541,121867],{"class":84},[67,159543,159544],{"class":73}," has_ticket:\n",[67,159546,159547,159549,159551,159553],{"class":69,"line":655},[67,159548,851],{"class":77},[67,159550,854],{"class":73},[67,159552,159085],{"class":114},[67,159554,829],{"class":73},[391,159556,159558],{"id":159557},"_362-or","3.6.2 or",[19,159560,159561],{},"只要一个条件成立就成立。",[58,159563,159565],{"className":60,"code":159564,"language":62,"meta":63,"style":63},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[32,159566,159567,159576,159585,159589,159601],{"__ignoreMap":63},[67,159568,159569,159572,159574],{"class":69,"line":70},[67,159570,159571],{"class":73},"is_vip ",[67,159573,85],{"class":84},[67,159575,127245],{"class":77},[67,159577,159578,159581,159583],{"class":69,"line":191},[67,159579,159580],{"class":73},"coupon ",[67,159582,85],{"class":84},[67,159584,155037],{"class":77},[67,159586,159587],{"class":69,"line":202},[67,159588,631],{"emptyLinePlaceholder":630},[67,159590,159591,159593,159596,159598],{"class":69,"line":641},[67,159592,1096],{"class":84},[67,159594,159595],{"class":73}," is_vip ",[67,159597,116528],{"class":84},[67,159599,159600],{"class":73}," coupon:\n",[67,159602,159603,159605,159607,159610],{"class":69,"line":655},[67,159604,851],{"class":77},[67,159606,854],{"class":73},[67,159608,159609],{"class":114},"\"可以享受优惠\"",[67,159611,829],{"class":73},[391,159613,159615],{"id":159614},"_363-not","3.6.3 not",[19,159617,159618],{},"取反。",[58,159620,159622],{"className":60,"code":159621,"language":62,"meta":63,"style":63},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[32,159623,159624,159633,159637,159646],{"__ignoreMap":63},[67,159625,159626,159629,159631],{"class":69,"line":70},[67,159627,159628],{"class":73},"is_closed ",[67,159630,85],{"class":84},[67,159632,127245],{"class":77},[67,159634,159635],{"class":69,"line":191},[67,159636,631],{"emptyLinePlaceholder":630},[67,159638,159639,159641,159643],{"class":69,"line":202},[67,159640,1096],{"class":84},[67,159642,40698],{"class":84},[67,159644,159645],{"class":73}," is_closed:\n",[67,159647,159648,159650,159652,159655],{"class":69,"line":641},[67,159649,851],{"class":77},[67,159651,854],{"class":73},[67,159653,159654],{"class":114},"\"店铺营业中\"",[67,159656,829],{"class":73},[14,159658,159660],{"id":159659},"_37-链式比较","3.7 链式比较",[19,159662,159663],{},"Python 支持链式比较：",[58,159665,159667],{"className":60,"code":159666,"language":62,"meta":63,"style":63},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[32,159668,159669,159678,159682,159699],{"__ignoreMap":63},[67,159670,159671,159673,159675],{"class":69,"line":70},[67,159672,156796],{"class":73},[67,159674,85],{"class":84},[67,159676,159677],{"class":77}," 85\n",[67,159679,159680],{"class":69,"line":191},[67,159681,631],{"emptyLinePlaceholder":630},[67,159683,159684,159686,159688,159691,159693,159695,159697],{"class":69,"line":202},[67,159685,1096],{"class":84},[67,159687,5913],{"class":77},[67,159689,159690],{"class":84}," \u003C=",[67,159692,159221],{"class":73},[67,159694,3442],{"class":84},[67,159696,7571],{"class":77},[67,159698,813],{"class":73},[67,159700,159701,159703,159705,159708],{"class":69,"line":641},[67,159702,851],{"class":77},[67,159704,854],{"class":73},[67,159706,159707],{"class":114},"\"成绩合法\"",[67,159709,829],{"class":73},[19,159711,159712],{},"等价于：",[58,159714,159716],{"className":60,"code":159715,"language":62,"meta":63,"style":63},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[32,159717,159718,159738],{"__ignoreMap":63},[67,159719,159720,159722,159724,159726,159728,159730,159732,159734,159736],{"class":69,"line":70},[67,159721,1096],{"class":84},[67,159723,159221],{"class":73},[67,159725,3553],{"class":84},[67,159727,5913],{"class":77},[67,159729,121867],{"class":84},[67,159731,159221],{"class":73},[67,159733,3442],{"class":84},[67,159735,7571],{"class":77},[67,159737,813],{"class":73},[67,159739,159740,159742,159744,159746],{"class":69,"line":191},[67,159741,851],{"class":77},[67,159743,854],{"class":73},[67,159745,159707],{"class":114},[67,159747,829],{"class":73},[14,159749,159751],{"id":159750},"_38-真值和假值","3.8 真值和假值",[19,159753,117905,159754,159756],{},[32,159755,1096],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159758,159759],{},"假值：",[58,159761,159763],{"className":60,"code":159762,"language":62,"meta":63,"style":63},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[32,159764,159765,159769,159774,159778,159782,159787,159791,159795,159800],{"__ignoreMap":63},[67,159766,159767],{"class":69,"line":70},[67,159768,158955],{"class":77},[67,159770,159771],{"class":69,"line":191},[67,159772,159773],{"class":77},"None\n",[67,159775,159776],{"class":69,"line":202},[67,159777,4909],{"class":77},[67,159779,159780],{"class":69,"line":641},[67,159781,34112],{"class":77},[67,159783,159784],{"class":69,"line":655},[67,159785,159786],{"class":114},"\"\"\n",[67,159788,159789],{"class":69,"line":660},[67,159790,34127],{"class":73},[67,159792,159793],{"class":69,"line":665},[67,159794,3809],{"class":73},[67,159796,159797],{"class":69,"line":677},[67,159798,159799],{"class":73},"{}\n",[67,159801,159802,159804],{"class":69,"line":683},[67,159803,156728],{"class":77},[67,159805,3809],{"class":73},[19,159807,16932],{},[58,159809,159811],{"className":60,"code":159810,"language":62,"meta":63,"style":63},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[32,159812,159813,159827,159831,159838,159858,159864],{"__ignoreMap":63},[67,159814,159815,159817,159819,159821,159823,159825],{"class":69,"line":70},[67,159816,147974],{"class":73},[67,159818,85],{"class":84},[67,159820,62366],{"class":77},[67,159822,854],{"class":73},[67,159824,153817],{"class":114},[67,159826,829],{"class":73},[67,159828,159829],{"class":69,"line":191},[67,159830,631],{"emptyLinePlaceholder":630},[67,159832,159833,159835],{"class":69,"line":202},[67,159834,1096],{"class":84},[67,159836,159837],{"class":73}," name:\n",[67,159839,159840,159842,159844,159846,159848,159850,159852,159854,159856],{"class":69,"line":641},[67,159841,851],{"class":77},[67,159843,854],{"class":73},[67,159845,2052],{"class":84},[67,159847,158492],{"class":114},[67,159849,2885],{"class":77},[67,159851,81570],{"class":73},[67,159853,2934],{"class":77},[67,159855,2243],{"class":114},[67,159857,829],{"class":73},[67,159859,159860,159862],{"class":69,"line":655},[67,159861,3544],{"class":84},[67,159863,813],{"class":73},[67,159865,159866,159868,159870,159873],{"class":69,"line":660},[67,159867,851],{"class":77},[67,159869,854],{"class":73},[67,159871,159872],{"class":114},"\"姓名不能为空\"",[67,159874,829],{"class":73},[14,159876,159878],{"id":159877},"_39-match语句","3.9 match语句",[19,159880,159881,159882,159884],{},"Python 3.10 开始支持 ",[32,159883,73025],{},"。它适合处理固定选项。",[58,159886,159888],{"className":60,"code":159887,"language":62,"meta":63,"style":63},"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",[32,159889,159890,159906,159910,159917,159927,159938,159947,159958,159967,159978,159985],{"__ignoreMap":63},[67,159891,159892,159895,159897,159899,159901,159904],{"class":69,"line":70},[67,159893,159894],{"class":73},"command ",[67,159896,85],{"class":84},[67,159898,62366],{"class":77},[67,159900,854],{"class":73},[67,159902,159903],{"class":114},"\"请输入命令:\"",[67,159905,829],{"class":73},[67,159907,159908],{"class":69,"line":191},[67,159909,631],{"emptyLinePlaceholder":630},[67,159911,159912,159914],{"class":69,"line":202},[67,159913,73025],{"class":84},[67,159915,159916],{"class":73}," command:\n",[67,159918,159919,159922,159925],{"class":69,"line":641},[67,159920,159921],{"class":84},"    case",[67,159923,159924],{"class":114}," \"start\"",[67,159926,813],{"class":73},[67,159928,159929,159931,159933,159936],{"class":69,"line":655},[67,159930,34220],{"class":77},[67,159932,854],{"class":73},[67,159934,159935],{"class":114},"\"启动\"",[67,159937,829],{"class":73},[67,159939,159940,159942,159945],{"class":69,"line":660},[67,159941,159921],{"class":84},[67,159943,159944],{"class":114}," \"stop\"",[67,159946,813],{"class":73},[67,159948,159949,159951,159953,159956],{"class":69,"line":665},[67,159950,34220],{"class":77},[67,159952,854],{"class":73},[67,159954,159955],{"class":114},"\"停止\"",[67,159957,829],{"class":73},[67,159959,159960,159962,159965],{"class":69,"line":677},[67,159961,159921],{"class":84},[67,159963,159964],{"class":114}," \"restart\"",[67,159966,813],{"class":73},[67,159968,159969,159971,159973,159976],{"class":69,"line":683},[67,159970,34220],{"class":77},[67,159972,854],{"class":73},[67,159974,159975],{"class":114},"\"重启\"",[67,159977,829],{"class":73},[67,159979,159980,159982],{"class":69,"line":689},[67,159981,159921],{"class":84},[67,159983,159984],{"class":73}," _:\n",[67,159986,159987,159989,159991,159994],{"class":69,"line":694},[67,159988,34220],{"class":77},[67,159990,854],{"class":73},[67,159992,159993],{"class":114},"\"未知命令\"",[67,159995,829],{"class":73},[19,159997,159998,159999,160001,160002,160004],{},"入门阶段掌握 ",[32,160000,156096],{}," 更重要，",[32,160003,73025],{}," 可以作为补充。",[14,160006,160008],{"id":160007},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160010,124730],{},[26,160012,160013,160016,160019],{},[29,160014,160015],{},"输入成绩。",[29,160017,160018],{},"判断成绩是否合法。",[29,160020,160021],{},"输出等级。",[19,160023,11835],{},[58,160025,160027],{"className":60,"code":160026,"language":62,"meta":63,"style":63},"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",[32,160028,160029,160047,160051,160069,160080,160092,160103,160115,160126,160139,160150,160162,160173,160179],{"__ignoreMap":63},[67,160030,160031,160033,160035,160037,160039,160041,160043,160045],{"class":69,"line":70},[67,160032,156796],{"class":73},[67,160034,85],{"class":84},[67,160036,111235],{"class":77},[67,160038,854],{"class":73},[67,160040,55583],{"class":77},[67,160042,854],{"class":73},[67,160044,153847],{"class":114},[67,160046,1050],{"class":73},[67,160048,160049],{"class":69,"line":191},[67,160050,631],{"emptyLinePlaceholder":630},[67,160052,160053,160055,160057,160059,160061,160063,160065,160067],{"class":69,"line":202},[67,160054,1096],{"class":84},[67,160056,40698],{"class":84},[67,160058,5913],{"class":77},[67,160060,159690],{"class":84},[67,160062,159221],{"class":73},[67,160064,3442],{"class":84},[67,160066,7571],{"class":77},[67,160068,813],{"class":73},[67,160070,160071,160073,160075,160078],{"class":69,"line":641},[67,160072,851],{"class":77},[67,160074,854],{"class":73},[67,160076,160077],{"class":114},"\"成绩不合法\"",[67,160079,829],{"class":73},[67,160081,160082,160084,160086,160088,160090],{"class":69,"line":655},[67,160083,159244],{"class":84},[67,160085,159221],{"class":73},[67,160087,3553],{"class":84},[67,160089,159226],{"class":77},[67,160091,813],{"class":73},[67,160093,160094,160096,160098,160101],{"class":69,"line":660},[67,160095,851],{"class":77},[67,160097,854],{"class":73},[67,160099,160100],{"class":114},"\"等级:A\"",[67,160102,829],{"class":73},[67,160104,160105,160107,160109,160111,160113],{"class":69,"line":665},[67,160106,159244],{"class":84},[67,160108,159221],{"class":73},[67,160110,3553],{"class":84},[67,160112,159251],{"class":77},[67,160114,813],{"class":73},[67,160116,160117,160119,160121,160124],{"class":69,"line":677},[67,160118,851],{"class":77},[67,160120,854],{"class":73},[67,160122,160123],{"class":114},"\"等级:B\"",[67,160125,829],{"class":73},[67,160127,160128,160130,160132,160134,160137],{"class":69,"line":683},[67,160129,159244],{"class":84},[67,160131,159221],{"class":73},[67,160133,3553],{"class":84},[67,160135,160136],{"class":77}," 70",[67,160138,813],{"class":73},[67,160140,160141,160143,160145,160148],{"class":69,"line":689},[67,160142,851],{"class":77},[67,160144,854],{"class":73},[67,160146,160147],{"class":114},"\"等级:C\"",[67,160149,829],{"class":73},[67,160151,160152,160154,160156,160158,160160],{"class":69,"line":694},[67,160153,159244],{"class":84},[67,160155,159221],{"class":73},[67,160157,3553],{"class":84},[67,160159,159275],{"class":77},[67,160161,813],{"class":73},[67,160163,160164,160166,160168,160171],{"class":69,"line":700},[67,160165,851],{"class":77},[67,160167,854],{"class":73},[67,160169,160170],{"class":114},"\"等级:D\"",[67,160172,829],{"class":73},[67,160174,160175,160177],{"class":69,"line":706},[67,160176,3544],{"class":84},[67,160178,813],{"class":73},[67,160180,160181,160183,160185,160188],{"class":69,"line":712},[67,160182,851],{"class":77},[67,160184,854],{"class":73},[67,160186,160187],{"class":114},"\"等级:E\"",[67,160189,829],{"class":73},[14,160191,160193],{"id":160192},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160195,124730],{},[26,160197,160198,160201,160204,160207],{},[29,160199,160200],{},"输入消费金额。",[29,160202,160203],{},"输入会员等级，普通、银卡、金卡。",[29,160205,160206],{},"普通不打折，银卡 9 折，金卡 8 折。",[29,160208,160209],{},"满 500 再减 50。",[19,160211,11835],{},[58,160213,160215],{"className":60,"code":160214,"language":62,"meta":63,"style":63},"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",[32,160216,160217,160237,160253,160257,160265,160269,160283,160293,160306,160315,160328,160336,160342,160353,160357,160371,160375,160389,160399,160403],{"__ignoreMap":63},[67,160218,160219,160222,160224,160226,160228,160230,160232,160235],{"class":69,"line":70},[67,160220,160221],{"class":73},"amount ",[67,160223,85],{"class":84},[67,160225,111235],{"class":77},[67,160227,854],{"class":73},[67,160229,55583],{"class":77},[67,160231,854],{"class":73},[67,160233,160234],{"class":114},"\"请输入消费金额:\"",[67,160236,1050],{"class":73},[67,160238,160239,160242,160244,160246,160248,160251],{"class":69,"line":191},[67,160240,160241],{"class":73},"level ",[67,160243,85],{"class":84},[67,160245,62366],{"class":77},[67,160247,854],{"class":73},[67,160249,160250],{"class":114},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[67,160252,829],{"class":73},[67,160254,160255],{"class":69,"line":202},[67,160256,631],{"emptyLinePlaceholder":630},[67,160258,160259,160261,160263],{"class":69,"line":641},[67,160260,158674],{"class":73},[67,160262,85],{"class":84},[67,160264,57460],{"class":77},[67,160266,160267],{"class":69,"line":655},[67,160268,631],{"emptyLinePlaceholder":630},[67,160270,160271,160273,160276,160278,160281],{"class":69,"line":660},[67,160272,1096],{"class":84},[67,160274,160275],{"class":73}," level ",[67,160277,4774],{"class":84},[67,160279,160280],{"class":114}," \"银卡\"",[67,160282,813],{"class":73},[67,160284,160285,160288,160290],{"class":69,"line":665},[67,160286,160287],{"class":73},"    discount ",[67,160289,85],{"class":84},[67,160291,160292],{"class":77}," 0.9\n",[67,160294,160295,160297,160299,160301,160304],{"class":69,"line":677},[67,160296,159244],{"class":84},[67,160298,160275],{"class":73},[67,160300,4774],{"class":84},[67,160302,160303],{"class":114}," \"金卡\"",[67,160305,813],{"class":73},[67,160307,160308,160310,160312],{"class":69,"line":683},[67,160309,160287],{"class":73},[67,160311,85],{"class":84},[67,160313,160314],{"class":77}," 0.8\n",[67,160316,160317,160319,160321,160323,160326],{"class":69,"line":689},[67,160318,159244],{"class":84},[67,160320,160275],{"class":73},[67,160322,4774],{"class":84},[67,160324,160325],{"class":114}," \"普通\"",[67,160327,813],{"class":73},[67,160329,160330,160332,160334],{"class":69,"line":694},[67,160331,160287],{"class":73},[67,160333,85],{"class":84},[67,160335,57460],{"class":77},[67,160337,160338,160340],{"class":69,"line":700},[67,160339,3544],{"class":84},[67,160341,813],{"class":73},[67,160343,160344,160346,160348,160351],{"class":69,"line":706},[67,160345,851],{"class":77},[67,160347,854],{"class":73},[67,160349,160350],{"class":114},"\"会员等级输入错误，按普通会员计算\"",[67,160352,829],{"class":73},[67,160354,160355],{"class":69,"line":712},[67,160356,631],{"emptyLinePlaceholder":630},[67,160358,160359,160362,160364,160367,160369],{"class":69,"line":717},[67,160360,160361],{"class":73},"pay ",[67,160363,85],{"class":84},[67,160365,160366],{"class":73}," amount ",[67,160368,965],{"class":84},[67,160370,158713],{"class":73},[67,160372,160373],{"class":69,"line":723},[67,160374,631],{"emptyLinePlaceholder":630},[67,160376,160377,160379,160382,160384,160387],{"class":69,"line":729},[67,160378,1096],{"class":84},[67,160380,160381],{"class":73}," pay ",[67,160383,3553],{"class":84},[67,160385,160386],{"class":77}," 500",[67,160388,813],{"class":73},[67,160390,160391,160394,160396],{"class":69,"line":735},[67,160392,160393],{"class":73},"    pay ",[67,160395,151690],{"class":84},[67,160397,160398],{"class":77}," 50\n",[67,160400,160401],{"class":69,"line":741},[67,160402,631],{"emptyLinePlaceholder":630},[67,160404,160405,160407,160409,160411,160413,160415,160418,160420,160422,160424],{"class":69,"line":747},[67,160406,1626],{"class":77},[67,160408,854],{"class":73},[67,160410,2052],{"class":84},[67,160412,158794],{"class":114},[67,160414,2885],{"class":77},[67,160416,160417],{"class":73},"pay",[67,160419,158597],{"class":84},[67,160421,2934],{"class":77},[67,160423,158450],{"class":114},[67,160425,829],{"class":73},[14,160427,160429],{"id":160428},"_312-易错点","3.12 易错点",[26,160431,160432,160435,160438,160441,160446],{},[29,160433,160434],{},"冒号不能漏。",[29,160436,160437],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[29,160439,160440],{},"多分支判断要注意顺序。",[29,160442,160443,160444,230],{},"判断相等用 ",[32,160445,4774],{},[29,160447,160448],{},"字符串比较区分大小写：",[58,160450,160452],{"className":60,"code":160451,"language":62,"meta":63,"style":63},"\"Y\" == \"y\"  # False\n",[32,160453,160454],{"__ignoreMap":63},[67,160455,160456,160459,160461,160463],{"class":69,"line":70},[67,160457,160458],{"class":114},"\"Y\"",[67,160460,1102],{"class":84},[67,160462,159443],{"class":114},[67,160464,160465],{"class":2058},"  # False\n",[19,160467,160468],{},"可转换后再判断：",[58,160470,160472],{"className":60,"code":160471,"language":62,"meta":63,"style":63},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[32,160473,160474,160491,160504],{"__ignoreMap":63},[67,160475,160476,160479,160481,160483,160485,160488],{"class":69,"line":70},[67,160477,160478],{"class":73},"answer ",[67,160480,85],{"class":84},[67,160482,62366],{"class":77},[67,160484,854],{"class":73},[67,160486,160487],{"class":114},"\"是否继续(y\u002Fn):\"",[67,160489,160490],{"class":73},").lower()\n",[67,160492,160493,160495,160498,160500,160502],{"class":69,"line":191},[67,160494,1096],{"class":84},[67,160496,160497],{"class":73}," answer ",[67,160499,4774],{"class":84},[67,160501,159443],{"class":114},[67,160503,813],{"class":73},[67,160505,160506,160508,160510,160513],{"class":69,"line":202},[67,160507,851],{"class":77},[67,160509,854],{"class":73},[67,160511,160512],{"class":114},"\"继续\"",[67,160514,829],{"class":73},[14,160516,160518],{"id":160517},"_313-本章练习","3.13 本章练习",[26,160520,160521,160524,160527,160530,160540],{},[29,160522,160523],{},"输入年龄，判断是否成年。",[29,160525,160526],{},"输入年份，判断是否为闰年。",[29,160528,160529],{},"输入三个数字，输出最大值。",[29,160531,160532,160533,160536,160537,160539],{},"写登录判断：用户名是 ",[32,160534,160535],{},"admin"," 且密码是 ",[32,160538,16881],{}," 才登录成功。",[29,160541,160542],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1903,160544,160545],{},"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":63,"searchDepth":191,"depth":191,"links":160547},[160548,160549,160550,160551,160552,160553,160558,160559,160560,160561,160562,160563,160564],{"id":158936,"depth":191,"text":158937},{"id":158989,"depth":191,"text":158990},{"id":159093,"depth":191,"text":159094},{"id":159183,"depth":191,"text":159184},{"id":159373,"depth":191,"text":159374},{"id":159496,"depth":191,"text":159497,"children":160554},[160555,160556,160557],{"id":159500,"depth":202,"text":159501},{"id":159557,"depth":202,"text":159558},{"id":159614,"depth":202,"text":159615},{"id":159659,"depth":191,"text":159660},{"id":159750,"depth":191,"text":159751},{"id":159877,"depth":191,"text":159878},{"id":160007,"depth":191,"text":160008},{"id":160192,"depth":191,"text":160193},{"id":160428,"depth":191,"text":160429},{"id":160517,"depth":191,"text":160518},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158928,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160571,"title":160572,"body":160573,"description":25173,"extension":1930,"meta":162342,"navigation":630,"path":162343,"seo":162344,"stem":162345,"__hash__":162346},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160574,"toc":162322},[160575,160578,160582,160588,160591,160608,160612,160614,160631,160633,160678,160680,160697,160701,160704,160770,160773,160791,160795,160956,160965,160969,160973,160978,161025,161027,161033,161037,161042,161089,161091,161097,161101,161106,161142,161145,161192,161196,161202,161260,161265,161296,161301,161305,161360,161363,161435,161438,161497,161501,161504,161579,161582,161586,161692,161695,161721,161725,161737,161806,161809,161901,161905,161907,161918,161920,162050,162054,162256,162264,162268,162298,162302,162319],[10,160576,160572],{"id":160577},"_4-循环语句",[14,160579,160581],{"id":160580},"_41-为什么需要循环","4.1 为什么需要循环",[19,160583,160584,160585,160587],{},"如果要输出 1 到 100，不应该写 100 行 ",[32,160586,147910],{},"，而应该用循环。",[19,160589,160590],{},"循环适合处理重复任务：",[26,160592,160593,160596,160599,160602,160605],{},[29,160594,160595],{},"重复输出。",[29,160597,160598],{},"重复输入。",[29,160600,160601],{},"遍历数据。",[29,160603,160604],{},"持续执行菜单。",[29,160606,160607],{},"批量处理文件或数据。",[14,160609,160611],{"id":160610},"_42-while循环","4.2 while循环",[19,160613,7000],{},[58,160615,160617],{"className":60,"code":160616,"language":62,"meta":63,"style":63},"while 条件:\n    循环体\n",[32,160618,160619,160626],{"__ignoreMap":63},[67,160620,160621,160623],{"class":69,"line":70},[67,160622,110101],{"class":84},[67,160624,160625],{"class":73}," 条件:\n",[67,160627,160628],{"class":69,"line":191},[67,160629,160630],{"class":73},"    循环体\n",[19,160632,16932],{},[58,160634,160636],{"className":60,"code":160635,"language":62,"meta":63,"style":63},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[32,160637,160638,160646,160650,160662,160669],{"__ignoreMap":63},[67,160639,160640,160642,160644],{"class":69,"line":70},[67,160641,101905],{"class":73},[67,160643,85],{"class":84},[67,160645,57460],{"class":77},[67,160647,160648],{"class":69,"line":191},[67,160649,631],{"emptyLinePlaceholder":630},[67,160651,160652,160654,160656,160658,160660],{"class":69,"line":202},[67,160653,110101],{"class":84},[67,160655,11244],{"class":73},[67,160657,3442],{"class":84},[67,160659,3981],{"class":77},[67,160661,813],{"class":73},[67,160663,160664,160666],{"class":69,"line":641},[67,160665,851],{"class":77},[67,160667,160668],{"class":73},"(i)\n",[67,160670,160671,160674,160676],{"class":69,"line":655},[67,160672,160673],{"class":73},"    i ",[67,160675,11283],{"class":84},[67,160677,57460],{"class":77},[19,160679,82689],{},[26,160681,160682,160688,160691,160694],{},[29,160683,160684,160685,230],{},"判断条件 ",[32,160686,160687],{},"i \u003C= 5",[29,160689,160690],{},"条件成立，执行循环体。",[29,160692,160693],{},"执行完后回到条件判断。",[29,160695,160696],{},"条件不成立，退出循环。",[14,160698,160700],{"id":160699},"_43-while累加","4.3 while累加",[19,160702,160703],{},"计算 1 到 100 的和：",[58,160705,160707],{"className":60,"code":160706,"language":62,"meta":63,"style":63},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[32,160708,160709,160717,160725,160729,160741,160751,160759,160763],{"__ignoreMap":63},[67,160710,160711,160713,160715],{"class":69,"line":70},[67,160712,101905],{"class":73},[67,160714,85],{"class":84},[67,160716,57460],{"class":77},[67,160718,160719,160721,160723],{"class":69,"line":191},[67,160720,158698],{"class":73},[67,160722,85],{"class":84},[67,160724,49101],{"class":77},[67,160726,160727],{"class":69,"line":202},[67,160728,631],{"emptyLinePlaceholder":630},[67,160730,160731,160733,160735,160737,160739],{"class":69,"line":641},[67,160732,110101],{"class":84},[67,160734,11244],{"class":73},[67,160736,3442],{"class":84},[67,160738,7571],{"class":77},[67,160740,813],{"class":73},[67,160742,160743,160746,160748],{"class":69,"line":655},[67,160744,160745],{"class":73},"    total ",[67,160747,11283],{"class":84},[67,160749,160750],{"class":73}," i\n",[67,160752,160753,160755,160757],{"class":69,"line":660},[67,160754,160673],{"class":73},[67,160756,11283],{"class":84},[67,160758,57460],{"class":77},[67,160760,160761],{"class":69,"line":665},[67,160762,631],{"emptyLinePlaceholder":630},[67,160764,160765,160767],{"class":69,"line":677},[67,160766,1626],{"class":77},[67,160768,160769],{"class":73},"(total)\n",[19,160771,160772],{},"核心思想：",[26,160774,160775,160780,160785],{},[29,160776,160777,160779],{},[32,160778,2432],{}," 控制循环次数。",[29,160781,160782,160784],{},[32,160783,158799],{}," 保存累加结果。",[29,160786,160787,160788,160790],{},"每轮循环都要更新 ",[32,160789,2432],{},"，否则可能死循环。",[14,160792,160794],{"id":160793},"_44-while猜数字","4.4 while猜数字",[58,160796,160798],{"className":60,"code":160797,"language":62,"meta":63,"style":63},"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",[32,160799,160800,160806,160810,160827,160835,160839,160847,160867,160876,160880,160892,160903,160913,160924,160930,160952],{"__ignoreMap":63},[67,160801,160802,160804],{"class":69,"line":70},[67,160803,622],{"class":84},[67,160805,47096],{"class":73},[67,160807,160808],{"class":69,"line":191},[67,160809,631],{"emptyLinePlaceholder":630},[67,160811,160812,160814,160816,160819,160821,160823,160825],{"class":69,"line":202},[67,160813,160478],{"class":73},[67,160815,85],{"class":84},[67,160817,160818],{"class":73}," random.randint(",[67,160820,2209],{"class":77},[67,160822,1868],{"class":73},[67,160824,2302],{"class":77},[67,160826,829],{"class":73},[67,160828,160829,160831,160833],{"class":69,"line":641},[67,160830,148129],{"class":73},[67,160832,85],{"class":84},[67,160834,49101],{"class":77},[67,160836,160837],{"class":69,"line":655},[67,160838,631],{"emptyLinePlaceholder":630},[67,160840,160841,160843,160845],{"class":69,"line":660},[67,160842,110101],{"class":84},[67,160844,97051],{"class":77},[67,160846,813],{"class":73},[67,160848,160849,160852,160854,160856,160858,160860,160862,160865],{"class":69,"line":665},[67,160850,160851],{"class":73},"    guess ",[67,160853,85],{"class":84},[67,160855,4215],{"class":77},[67,160857,854],{"class":73},[67,160859,55583],{"class":77},[67,160861,854],{"class":73},[67,160863,160864],{"class":114},"\"请输入1到100之间的数字:\"",[67,160866,1050],{"class":73},[67,160868,160869,160872,160874],{"class":69,"line":677},[67,160870,160871],{"class":73},"    count ",[67,160873,11283],{"class":84},[67,160875,57460],{"class":77},[67,160877,160878],{"class":69,"line":683},[67,160879,631],{"emptyLinePlaceholder":630},[67,160881,160882,160884,160887,160889],{"class":69,"line":689},[67,160883,897],{"class":84},[67,160885,160886],{"class":73}," guess ",[67,160888,2948],{"class":84},[67,160890,160891],{"class":73}," answer:\n",[67,160893,160894,160896,160898,160901],{"class":69,"line":694},[67,160895,34220],{"class":77},[67,160897,854],{"class":73},[67,160899,160900],{"class":114},"\"猜大了\"",[67,160902,829],{"class":73},[67,160904,160905,160907,160909,160911],{"class":69,"line":700},[67,160906,41061],{"class":84},[67,160908,160886],{"class":73},[67,160910,259],{"class":84},[67,160912,160891],{"class":73},[67,160914,160915,160917,160919,160922],{"class":69,"line":706},[67,160916,34220],{"class":77},[67,160918,854],{"class":73},[67,160920,160921],{"class":114},"\"猜小了\"",[67,160923,829],{"class":73},[67,160925,160926,160928],{"class":69,"line":712},[67,160927,159460],{"class":84},[67,160929,813],{"class":73},[67,160931,160932,160934,160936,160938,160941,160943,160945,160947,160950],{"class":69,"line":717},[67,160933,34220],{"class":77},[67,160935,854],{"class":73},[67,160937,2052],{"class":84},[67,160939,160940],{"class":114},"\"猜对了，一共猜了",[67,160942,2885],{"class":77},[67,160944,86193],{"class":73},[67,160946,2934],{"class":77},[67,160948,160949],{"class":114},"次\"",[67,160951,829],{"class":73},[67,160953,160954],{"class":69,"line":723},[67,160955,33398],{"class":84},[19,160957,160958,160961,160962,160964],{},[32,160959,160960],{},"while True"," 表示无限循环，通常配合 ",[32,160963,3886],{}," 使用。",[14,160966,160968],{"id":160967},"_45-break和continue","4.5 break和continue",[391,160970,160972],{"id":160971},"_451-break","4.5.1 break",[19,160974,160975,160977],{},[32,160976,3886],{}," 直接结束整个循环。",[58,160979,160981],{"className":60,"code":160980,"language":62,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[32,160982,160983,161003,161015,161019],{"__ignoreMap":63},[67,160984,160985,160987,160989,160991,160993,160995,160997,160999,161001],{"class":69,"line":70},[67,160986,1512],{"class":84},[67,160988,11244],{"class":73},[67,160990,941],{"class":84},[67,160992,944],{"class":77},[67,160994,854],{"class":73},[67,160996,2209],{"class":77},[67,160998,1868],{"class":73},[67,161000,2335],{"class":77},[67,161002,952],{"class":73},[67,161004,161005,161007,161009,161011,161013],{"class":69,"line":191},[67,161006,897],{"class":84},[67,161008,11244],{"class":73},[67,161010,4774],{"class":84},[67,161012,79830],{"class":77},[67,161014,813],{"class":73},[67,161016,161017],{"class":69,"line":202},[67,161018,33398],{"class":84},[67,161020,161021,161023],{"class":69,"line":641},[67,161022,851],{"class":77},[67,161024,160668],{"class":73},[19,161026,147895],{},[58,161028,161031],{"className":161029,"code":161030,"language":603,"meta":63},[601],"1\n2\n",[32,161032,161030],{"__ignoreMap":63},[391,161034,161036],{"id":161035},"_452-continue","4.5.2 continue",[19,161038,161039,161041],{},[32,161040,156110],{}," 跳过本轮剩余代码，进入下一轮循环。",[58,161043,161045],{"className":60,"code":161044,"language":62,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[32,161046,161047,161067,161079,161083],{"__ignoreMap":63},[67,161048,161049,161051,161053,161055,161057,161059,161061,161063,161065],{"class":69,"line":70},[67,161050,1512],{"class":84},[67,161052,11244],{"class":73},[67,161054,941],{"class":84},[67,161056,944],{"class":77},[67,161058,854],{"class":73},[67,161060,2209],{"class":77},[67,161062,1868],{"class":73},[67,161064,2335],{"class":77},[67,161066,952],{"class":73},[67,161068,161069,161071,161073,161075,161077],{"class":69,"line":191},[67,161070,897],{"class":84},[67,161072,11244],{"class":73},[67,161074,4774],{"class":84},[67,161076,79830],{"class":77},[67,161078,813],{"class":73},[67,161080,161081],{"class":69,"line":202},[67,161082,149950],{"class":84},[67,161084,161085,161087],{"class":69,"line":641},[67,161086,851],{"class":77},[67,161088,160668],{"class":73},[19,161090,147895],{},[58,161092,161095],{"className":161093,"code":161094,"language":603,"meta":63},[601],"1\n2\n4\n5\n",[32,161096,161094],{"__ignoreMap":63},[14,161098,161100],{"id":161099},"_46-for循环","4.6 for循环",[19,161102,161103,161105],{},[32,161104,1512],{}," 常用于遍历序列。",[58,161107,161109],{"className":60,"code":161108,"language":62,"meta":63,"style":63},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[32,161110,161111,161120,161124,161135],{"__ignoreMap":63},[67,161112,161113,161115,161117],{"class":69,"line":70},[67,161114,147974],{"class":73},[67,161116,85],{"class":84},[67,161118,161119],{"class":114}," \"python\"\n",[67,161121,161122],{"class":69,"line":191},[67,161123,631],{"emptyLinePlaceholder":630},[67,161125,161126,161128,161131,161133],{"class":69,"line":202},[67,161127,1512],{"class":84},[67,161129,161130],{"class":73}," ch ",[67,161132,941],{"class":84},[67,161134,159837],{"class":73},[67,161136,161137,161139],{"class":69,"line":641},[67,161138,851],{"class":77},[67,161140,161141],{"class":73},"(ch)\n",[19,161143,161144],{},"遍历列表：",[58,161146,161148],{"className":60,"code":161147,"language":62,"meta":63,"style":63},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[32,161149,161150,161172,161176,161186],{"__ignoreMap":63},[67,161151,161152,161155,161157,161159,161161,161163,161165,161167,161170],{"class":69,"line":70},[67,161153,161154],{"class":73},"students ",[67,161156,85],{"class":84},[67,161158,53990],{"class":73},[67,161160,151326],{"class":114},[67,161162,1868],{"class":73},[67,161164,152374],{"class":114},[67,161166,1868],{"class":73},[67,161168,161169],{"class":114},"\"小刚\"",[67,161171,35015],{"class":73},[67,161173,161174],{"class":69,"line":191},[67,161175,631],{"emptyLinePlaceholder":630},[67,161177,161178,161180,161182,161184],{"class":69,"line":202},[67,161179,1512],{"class":84},[67,161181,153575],{"class":73},[67,161183,941],{"class":84},[67,161185,153580],{"class":73},[67,161187,161188,161190],{"class":69,"line":641},[67,161189,851],{"class":77},[67,161191,151480],{"class":73},[14,161193,161195],{"id":161194},"_47-range函数","4.7 range函数",[19,161197,161198,161201],{},[32,161199,161200],{},"range()"," 用于生成整数序列。",[58,161203,161205],{"className":60,"code":161204,"language":62,"meta":63,"style":63},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[32,161206,161207,161221,161239],{"__ignoreMap":63},[67,161208,161209,161211,161213,161215,161218],{"class":69,"line":70},[67,161210,35185],{"class":77},[67,161212,854],{"class":73},[67,161214,2310],{"class":77},[67,161216,161217],{"class":73},")          ",[67,161219,161220],{"class":2058},"# 0,1,2,3,4\n",[67,161222,161223,161225,161227,161229,161231,161233,161236],{"class":69,"line":191},[67,161224,35185],{"class":77},[67,161226,854],{"class":73},[67,161228,2209],{"class":77},[67,161230,1868],{"class":73},[67,161232,2310],{"class":77},[67,161234,161235],{"class":73},")       ",[67,161237,161238],{"class":2058},"# 1,2,3,4\n",[67,161240,161241,161243,161245,161247,161249,161251,161253,161255,161257],{"class":69,"line":202},[67,161242,35185],{"class":77},[67,161244,854],{"class":73},[67,161246,2209],{"class":77},[67,161248,1868],{"class":73},[67,161250,2437],{"class":77},[67,161252,1868],{"class":73},[67,161254,2077],{"class":77},[67,161256,157099],{"class":73},[67,161258,161259],{"class":2058},"# 1,3,5,7,9\n",[19,161261,161262,161263,26410],{},"配合 ",[32,161264,1512],{},[58,161266,161268],{"className":60,"code":161267,"language":62,"meta":63,"style":63},"for i in range(1, 6):\n    print(i)\n",[32,161269,161270,161290],{"__ignoreMap":63},[67,161271,161272,161274,161276,161278,161280,161282,161284,161286,161288],{"class":69,"line":70},[67,161273,1512],{"class":84},[67,161275,11244],{"class":73},[67,161277,941],{"class":84},[67,161279,944],{"class":77},[67,161281,854],{"class":73},[67,161283,2209],{"class":77},[67,161285,1868],{"class":73},[67,161287,2335],{"class":77},[67,161289,952],{"class":73},[67,161291,161292,161294],{"class":69,"line":191},[67,161293,851],{"class":77},[67,161295,160668],{"class":73},[19,161297,10831,161298,161300],{},[32,161299,35185],{}," 的结束值不包含在内。",[14,161302,161304],{"id":161303},"_48-for循环求和","4.8 for循环求和",[58,161306,161308],{"className":60,"code":161307,"language":62,"meta":63,"style":63},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[32,161309,161310,161318,161322,161342,161350,161354],{"__ignoreMap":63},[67,161311,161312,161314,161316],{"class":69,"line":70},[67,161313,158698],{"class":73},[67,161315,85],{"class":84},[67,161317,49101],{"class":77},[67,161319,161320],{"class":69,"line":191},[67,161321,631],{"emptyLinePlaceholder":630},[67,161323,161324,161326,161328,161330,161332,161334,161336,161338,161340],{"class":69,"line":202},[67,161325,1512],{"class":84},[67,161327,11244],{"class":73},[67,161329,941],{"class":84},[67,161331,944],{"class":77},[67,161333,854],{"class":73},[67,161335,2209],{"class":77},[67,161337,1868],{"class":73},[67,161339,2328],{"class":77},[67,161341,952],{"class":73},[67,161343,161344,161346,161348],{"class":69,"line":641},[67,161345,160745],{"class":73},[67,161347,11283],{"class":84},[67,161349,160750],{"class":73},[67,161351,161352],{"class":69,"line":655},[67,161353,631],{"emptyLinePlaceholder":630},[67,161355,161356,161358],{"class":69,"line":660},[67,161357,1626],{"class":77},[67,161359,160769],{"class":73},[19,161361,161362],{},"求偶数和：",[58,161364,161366],{"className":60,"code":161365,"language":62,"meta":63,"style":63},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[32,161367,161368,161376,161380,161400,161416,161425,161429],{"__ignoreMap":63},[67,161369,161370,161372,161374],{"class":69,"line":70},[67,161371,158698],{"class":73},[67,161373,85],{"class":84},[67,161375,49101],{"class":77},[67,161377,161378],{"class":69,"line":191},[67,161379,631],{"emptyLinePlaceholder":630},[67,161381,161382,161384,161386,161388,161390,161392,161394,161396,161398],{"class":69,"line":202},[67,161383,1512],{"class":84},[67,161385,11244],{"class":73},[67,161387,941],{"class":84},[67,161389,944],{"class":77},[67,161391,854],{"class":73},[67,161393,2209],{"class":77},[67,161395,1868],{"class":73},[67,161397,2328],{"class":77},[67,161399,952],{"class":73},[67,161401,161402,161404,161406,161408,161410,161412,161414],{"class":69,"line":641},[67,161403,897],{"class":84},[67,161405,11244],{"class":73},[67,161407,2319],{"class":84},[67,161409,16553],{"class":77},[67,161411,1102],{"class":84},[67,161413,5913],{"class":77},[67,161415,813],{"class":73},[67,161417,161418,161421,161423],{"class":69,"line":655},[67,161419,161420],{"class":73},"        total ",[67,161422,11283],{"class":84},[67,161424,160750],{"class":73},[67,161426,161427],{"class":69,"line":660},[67,161428,631],{"emptyLinePlaceholder":630},[67,161430,161431,161433],{"class":69,"line":665},[67,161432,1626],{"class":77},[67,161434,160769],{"class":73},[19,161436,161437],{},"也可以：",[58,161439,161441],{"className":60,"code":161440,"language":62,"meta":63,"style":63},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[32,161442,161443,161451,161455,161479,161487,161491],{"__ignoreMap":63},[67,161444,161445,161447,161449],{"class":69,"line":70},[67,161446,158698],{"class":73},[67,161448,85],{"class":84},[67,161450,49101],{"class":77},[67,161452,161453],{"class":69,"line":191},[67,161454,631],{"emptyLinePlaceholder":630},[67,161456,161457,161459,161461,161463,161465,161467,161469,161471,161473,161475,161477],{"class":69,"line":202},[67,161458,1512],{"class":84},[67,161460,11244],{"class":73},[67,161462,941],{"class":84},[67,161464,944],{"class":77},[67,161466,854],{"class":73},[67,161468,2077],{"class":77},[67,161470,1868],{"class":73},[67,161472,2328],{"class":77},[67,161474,1868],{"class":73},[67,161476,2077],{"class":77},[67,161478,952],{"class":73},[67,161480,161481,161483,161485],{"class":69,"line":641},[67,161482,160745],{"class":73},[67,161484,11283],{"class":84},[67,161486,160750],{"class":73},[67,161488,161489],{"class":69,"line":655},[67,161490,631],{"emptyLinePlaceholder":630},[67,161492,161493,161495],{"class":69,"line":660},[67,161494,1626],{"class":77},[67,161496,160769],{"class":73},[14,161498,161500],{"id":161499},"_49-循环嵌套","4.9 循环嵌套",[19,161502,161503],{},"嵌套循环就是循环里面再写循环。",[58,161505,161507],{"className":60,"code":161506,"language":62,"meta":63,"style":63},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[32,161508,161509,161529,161549],{"__ignoreMap":63},[67,161510,161511,161513,161515,161517,161519,161521,161523,161525,161527],{"class":69,"line":70},[67,161512,1512],{"class":84},[67,161514,11244],{"class":73},[67,161516,941],{"class":84},[67,161518,944],{"class":77},[67,161520,854],{"class":73},[67,161522,2209],{"class":77},[67,161524,1868],{"class":73},[67,161526,1047],{"class":77},[67,161528,952],{"class":73},[67,161530,161531,161533,161535,161537,161539,161541,161543,161545,161547],{"class":69,"line":191},[67,161532,935],{"class":84},[67,161534,11306],{"class":73},[67,161536,941],{"class":84},[67,161538,944],{"class":77},[67,161540,854],{"class":73},[67,161542,2209],{"class":77},[67,161544,1868],{"class":73},[67,161546,1047],{"class":77},[67,161548,952],{"class":73},[67,161550,161551,161553,161555,161557,161560,161562,161564,161566,161569,161571,161573,161575,161577],{"class":69,"line":202},[67,161552,34220],{"class":77},[67,161554,854],{"class":73},[67,161556,2052],{"class":84},[67,161558,161559],{"class":114},"\"i=",[67,161561,2885],{"class":77},[67,161563,2432],{"class":73},[67,161565,2934],{"class":77},[67,161567,161568],{"class":114},", j=",[67,161570,2885],{"class":77},[67,161572,2457],{"class":73},[67,161574,2934],{"class":77},[67,161576,2243],{"class":114},[67,161578,829],{"class":73},[19,161580,161581],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161583,161585],{"id":161584},"_410-九九乘法表","4.10 九九乘法表",[58,161587,161589],{"className":60,"code":161588,"language":62,"meta":63,"style":63},"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",[32,161590,161591,161611,161634,161686],{"__ignoreMap":63},[67,161592,161593,161595,161597,161599,161601,161603,161605,161607,161609],{"class":69,"line":70},[67,161594,1512],{"class":84},[67,161596,11244],{"class":73},[67,161598,941],{"class":84},[67,161600,944],{"class":77},[67,161602,854],{"class":73},[67,161604,2209],{"class":77},[67,161606,1868],{"class":73},[67,161608,2437],{"class":77},[67,161610,952],{"class":73},[67,161612,161613,161615,161617,161619,161621,161623,161625,161628,161630,161632],{"class":69,"line":191},[67,161614,935],{"class":84},[67,161616,11306],{"class":73},[67,161618,941],{"class":84},[67,161620,944],{"class":77},[67,161622,854],{"class":73},[67,161624,2209],{"class":77},[67,161626,161627],{"class":73},", i ",[67,161629,2471],{"class":84},[67,161631,906],{"class":77},[67,161633,952],{"class":73},[67,161635,161636,161638,161640,161642,161644,161646,161648,161650,161652,161654,161656,161658,161660,161662,161664,161666,161668,161670,161672,161674,161676,161678,161680,161682,161684],{"class":69,"line":202},[67,161637,34220],{"class":77},[67,161639,854],{"class":73},[67,161641,2052],{"class":84},[67,161643,2243],{"class":114},[67,161645,2885],{"class":77},[67,161647,2457],{"class":73},[67,161649,2934],{"class":77},[67,161651,965],{"class":114},[67,161653,2885],{"class":77},[67,161655,2432],{"class":73},[67,161657,2934],{"class":77},[67,161659,85],{"class":114},[67,161661,2885],{"class":77},[67,161663,101905],{"class":73},[67,161665,965],{"class":84},[67,161667,5232],{"class":73},[67,161669,2934],{"class":77},[67,161671,2243],{"class":114},[67,161673,1868],{"class":73},[67,161675,47569],{"class":7033},[67,161677,85],{"class":84},[67,161679,2243],{"class":114},[67,161681,3088],{"class":77},[67,161683,2243],{"class":114},[67,161685,829],{"class":73},[67,161687,161688,161690],{"class":69,"line":641},[67,161689,851],{"class":77},[67,161691,3809],{"class":73},[19,161693,161694],{},"关键点：",[26,161696,161697,161703,161709,161715],{},[29,161698,161699,161700,161702],{},"外层 ",[32,161701,2432],{}," 控制行。",[29,161704,161705,161706,161708],{},"内层 ",[32,161707,2457],{}," 控制列。",[29,161710,161711,161712,161714],{},"每行结束后用 ",[32,161713,147910],{}," 换行。",[29,161716,161717,161720],{},[32,161718,161719],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161722,161724],{"id":161723},"_411-循环else","4.11 循环else",[19,161726,161727,161728,161730,161731,161733,161734,161736],{},"Python 的循环可以带 ",[32,161729,3544],{},"。当循环正常结束时执行 ",[32,161732,3544],{},"，如果被 ",[32,161735,3886],{}," 打断，则不执行。",[58,161738,161740],{"className":60,"code":161739,"language":62,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[32,161741,161742,161762,161774,161785,161789,161795],{"__ignoreMap":63},[67,161743,161744,161746,161748,161750,161752,161754,161756,161758,161760],{"class":69,"line":70},[67,161745,1512],{"class":84},[67,161747,11244],{"class":73},[67,161749,941],{"class":84},[67,161751,944],{"class":77},[67,161753,854],{"class":73},[67,161755,2209],{"class":77},[67,161757,1868],{"class":73},[67,161759,2335],{"class":77},[67,161761,952],{"class":73},[67,161763,161764,161766,161768,161770,161772],{"class":69,"line":191},[67,161765,897],{"class":84},[67,161767,11244],{"class":73},[67,161769,4774],{"class":84},[67,161771,3871],{"class":77},[67,161773,813],{"class":73},[67,161775,161776,161778,161780,161783],{"class":69,"line":202},[67,161777,34220],{"class":77},[67,161779,854],{"class":73},[67,161781,161782],{"class":114},"\"找到了\"",[67,161784,829],{"class":73},[67,161786,161787],{"class":69,"line":641},[67,161788,33398],{"class":84},[67,161790,161791,161793],{"class":69,"line":655},[67,161792,3544],{"class":84},[67,161794,813],{"class":73},[67,161796,161797,161799,161801,161804],{"class":69,"line":660},[67,161798,851],{"class":77},[67,161800,854],{"class":73},[67,161802,161803],{"class":114},"\"没找到\"",[67,161805,829],{"class":73},[19,161807,161808],{},"常用于搜索。",[58,161810,161812],{"className":60,"code":161811,"language":62,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[32,161813,161814,161835,161844,161848,161860,161871,161881,161885,161891],{"__ignoreMap":63},[67,161815,161816,161819,161821,161823,161825,161827,161829,161831,161833],{"class":69,"line":70},[67,161817,161818],{"class":73},"names ",[67,161820,85],{"class":84},[67,161822,53990],{"class":73},[67,161824,151326],{"class":114},[67,161826,1868],{"class":73},[67,161828,152374],{"class":114},[67,161830,1868],{"class":73},[67,161832,161169],{"class":114},[67,161834,35015],{"class":73},[67,161836,161837,161839,161841],{"class":69,"line":191},[67,161838,113016],{"class":73},[67,161840,85],{"class":84},[67,161842,161843],{"class":114}," \"小李\"\n",[67,161845,161846],{"class":69,"line":202},[67,161847,631],{"emptyLinePlaceholder":630},[67,161849,161850,161852,161855,161857],{"class":69,"line":641},[67,161851,1512],{"class":84},[67,161853,161854],{"class":73}," name ",[67,161856,941],{"class":84},[67,161858,161859],{"class":73}," names:\n",[67,161861,161862,161864,161866,161868],{"class":69,"line":655},[67,161863,897],{"class":84},[67,161865,161854],{"class":73},[67,161867,4774],{"class":84},[67,161869,161870],{"class":73}," target:\n",[67,161872,161873,161875,161877,161879],{"class":69,"line":660},[67,161874,34220],{"class":77},[67,161876,854],{"class":73},[67,161878,161782],{"class":114},[67,161880,829],{"class":73},[67,161882,161883],{"class":69,"line":665},[67,161884,33398],{"class":84},[67,161886,161887,161889],{"class":69,"line":677},[67,161888,3544],{"class":84},[67,161890,813],{"class":73},[67,161892,161893,161895,161897,161899],{"class":69,"line":683},[67,161894,851],{"class":77},[67,161896,854],{"class":73},[67,161898,161803],{"class":114},[67,161900,829],{"class":73},[14,161902,161904],{"id":161903},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161906,124730],{},[26,161908,161909,161912,161915],{},[29,161910,161911],{},"用户最多输入 3 次密码。",[29,161913,161914],{},"密码正确则登录成功。",[29,161916,161917],{},"3 次都错误则锁定账号。",[19,161919,11835],{},[58,161921,161923],{"className":60,"code":161922,"language":62,"meta":63,"style":63},"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",[32,161924,161925,161935,161939,161955,161971,161975,161987,161998,162002,162008,162033,162039],{"__ignoreMap":63},[67,161926,161927,161930,161932],{"class":69,"line":70},[67,161928,161929],{"class":73},"password ",[67,161931,85],{"class":84},[67,161933,161934],{"class":114}," \"123456\"\n",[67,161936,161937],{"class":69,"line":191},[67,161938,631],{"emptyLinePlaceholder":630},[67,161940,161941,161943,161945,161947,161949,161951,161953],{"class":69,"line":202},[67,161942,1512],{"class":84},[67,161944,11244],{"class":73},[67,161946,941],{"class":84},[67,161948,944],{"class":77},[67,161950,854],{"class":73},[67,161952,2071],{"class":77},[67,161954,952],{"class":73},[67,161956,161957,161960,161962,161964,161966,161969],{"class":69,"line":641},[67,161958,161959],{"class":73},"    user_password ",[67,161961,85],{"class":84},[67,161963,62366],{"class":77},[67,161965,854],{"class":73},[67,161967,161968],{"class":114},"\"请输入密码:\"",[67,161970,829],{"class":73},[67,161972,161973],{"class":69,"line":655},[67,161974,631],{"emptyLinePlaceholder":630},[67,161976,161977,161979,161982,161984],{"class":69,"line":660},[67,161978,897],{"class":84},[67,161980,161981],{"class":73}," user_password ",[67,161983,4774],{"class":84},[67,161985,161986],{"class":73}," password:\n",[67,161988,161989,161991,161993,161996],{"class":69,"line":665},[67,161990,34220],{"class":77},[67,161992,854],{"class":73},[67,161994,161995],{"class":114},"\"登录成功\"",[67,161997,829],{"class":73},[67,161999,162000],{"class":69,"line":677},[67,162001,33398],{"class":84},[67,162003,162004,162006],{"class":69,"line":683},[67,162005,159460],{"class":84},[67,162007,813],{"class":73},[67,162009,162010,162012,162014,162016,162019,162022,162024,162026,162028,162031],{"class":69,"line":689},[67,162011,34220],{"class":77},[67,162013,854],{"class":73},[67,162015,2052],{"class":84},[67,162017,162018],{"class":114},"\"密码错误，还剩",[67,162020,162021],{"class":77},"{2",[67,162023,54035],{"class":84},[67,162025,4856],{"class":73},[67,162027,2934],{"class":77},[67,162029,162030],{"class":114},"次机会\"",[67,162032,829],{"class":73},[67,162034,162035,162037],{"class":69,"line":694},[67,162036,3544],{"class":84},[67,162038,813],{"class":73},[67,162040,162041,162043,162045,162048],{"class":69,"line":700},[67,162042,851],{"class":77},[67,162044,854],{"class":73},[67,162046,162047],{"class":114},"\"账号已锁定\"",[67,162049,829],{"class":73},[14,162051,162053],{"id":162052},"_413-小案例菜单程序","4.13 小案例：菜单程序",[58,162055,162057],{"className":60,"code":162056,"language":62,"meta":63,"style":63},"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",[32,162058,162059,162067,162078,162089,162100,162111,162122,162126,162141,162145,162157,162168,162180,162191,162203,162214,162226,162236,162240,162246],{"__ignoreMap":63},[67,162060,162061,162063,162065],{"class":69,"line":70},[67,162062,110101],{"class":84},[67,162064,97051],{"class":77},[67,162066,813],{"class":73},[67,162068,162069,162071,162073,162076],{"class":69,"line":191},[67,162070,851],{"class":77},[67,162072,854],{"class":73},[67,162074,162075],{"class":114},"\"====== 菜单 ======\"",[67,162077,829],{"class":73},[67,162079,162080,162082,162084,162087],{"class":69,"line":202},[67,162081,851],{"class":77},[67,162083,854],{"class":73},[67,162085,162086],{"class":114},"\"1. 查询余额\"",[67,162088,829],{"class":73},[67,162090,162091,162093,162095,162098],{"class":69,"line":641},[67,162092,851],{"class":77},[67,162094,854],{"class":73},[67,162096,162097],{"class":114},"\"2. 存款\"",[67,162099,829],{"class":73},[67,162101,162102,162104,162106,162109],{"class":69,"line":655},[67,162103,851],{"class":77},[67,162105,854],{"class":73},[67,162107,162108],{"class":114},"\"3. 取款\"",[67,162110,829],{"class":73},[67,162112,162113,162115,162117,162120],{"class":69,"line":660},[67,162114,851],{"class":77},[67,162116,854],{"class":73},[67,162118,162119],{"class":114},"\"0. 退出\"",[67,162121,829],{"class":73},[67,162123,162124],{"class":69,"line":665},[67,162125,631],{"emptyLinePlaceholder":630},[67,162127,162128,162131,162133,162135,162137,162139],{"class":69,"line":677},[67,162129,162130],{"class":73},"    choice ",[67,162132,85],{"class":84},[67,162134,62366],{"class":77},[67,162136,854],{"class":73},[67,162138,154511],{"class":114},[67,162140,829],{"class":73},[67,162142,162143],{"class":69,"line":683},[67,162144,631],{"emptyLinePlaceholder":630},[67,162146,162147,162149,162151,162153,162155],{"class":69,"line":689},[67,162148,897],{"class":84},[67,162150,154524],{"class":73},[67,162152,4774],{"class":84},[67,162154,154529],{"class":114},[67,162156,813],{"class":73},[67,162158,162159,162161,162163,162166],{"class":69,"line":694},[67,162160,34220],{"class":77},[67,162162,854],{"class":73},[67,162164,162165],{"class":114},"\"余额为1000元\"",[67,162167,829],{"class":73},[67,162169,162170,162172,162174,162176,162178],{"class":69,"line":700},[67,162171,41061],{"class":84},[67,162173,154524],{"class":73},[67,162175,4774],{"class":84},[67,162177,154548],{"class":114},[67,162179,813],{"class":73},[67,162181,162182,162184,162186,162189],{"class":69,"line":706},[67,162183,34220],{"class":77},[67,162185,854],{"class":73},[67,162187,162188],{"class":114},"\"存款功能\"",[67,162190,829],{"class":73},[67,162192,162193,162195,162197,162199,162201],{"class":69,"line":712},[67,162194,41061],{"class":84},[67,162196,154524],{"class":73},[67,162198,4774],{"class":84},[67,162200,154566],{"class":114},[67,162202,813],{"class":73},[67,162204,162205,162207,162209,162212],{"class":69,"line":717},[67,162206,34220],{"class":77},[67,162208,854],{"class":73},[67,162210,162211],{"class":114},"\"取款功能\"",[67,162213,829],{"class":73},[67,162215,162216,162218,162220,162222,162224],{"class":69,"line":723},[67,162217,41061],{"class":84},[67,162219,154524],{"class":73},[67,162221,4774],{"class":84},[67,162223,154620],{"class":114},[67,162225,813],{"class":73},[67,162227,162228,162230,162232,162234],{"class":69,"line":729},[67,162229,34220],{"class":77},[67,162231,854],{"class":73},[67,162233,154631],{"class":114},[67,162235,829],{"class":73},[67,162237,162238],{"class":69,"line":735},[67,162239,33398],{"class":84},[67,162241,162242,162244],{"class":69,"line":741},[67,162243,159460],{"class":84},[67,162245,813],{"class":73},[67,162247,162248,162250,162252,162254],{"class":69,"line":747},[67,162249,34220],{"class":77},[67,162251,854],{"class":73},[67,162253,154652],{"class":114},[67,162255,829],{"class":73},[19,162257,162258,162259,162261,162262,230],{},"菜单类程序通常使用 ",[32,162260,160960],{},"，用户选择退出时 ",[32,162263,3886],{},[14,162265,162267],{"id":162266},"_414-易错点","4.14 易错点",[26,162269,162270,162275,162281,162289,162295],{},[29,162271,162272,162274],{},[32,162273,110101],{}," 循环必须更新控制变量。",[29,162276,162277,162280],{},[32,162278,162279],{},"range(1, 10)"," 不包含 10。",[29,162282,162283,162285,162286,162288],{},[32,162284,3886],{}," 结束整个循环，",[32,162287,156110],{}," 只跳过本轮。",[29,162290,162291,162292,162294],{},"嵌套循环中，",[32,162293,3886],{}," 只跳出当前所在的一层循环。",[29,162296,162297],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162299,162301],{"id":162300},"_415-本章练习","4.15 本章练习",[26,162303,162304,162307,162310,162313,162316],{},[29,162305,162306],{},"输出 1 到 100。",[29,162308,162309],{},"计算 1 到 100 的偶数和。",[29,162311,162312],{},"输出 100 以内能被 3 和 5 同时整除的数。",[29,162314,162315],{},"编写猜数字游戏，限制最多猜 7 次。",[29,162317,162318],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1903,162320,162321],{},"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":63,"searchDepth":191,"depth":191,"links":162323},[162324,162325,162326,162327,162328,162332,162333,162334,162335,162336,162337,162338,162339,162340,162341],{"id":160580,"depth":191,"text":160581},{"id":160610,"depth":191,"text":160611},{"id":160699,"depth":191,"text":160700},{"id":160793,"depth":191,"text":160794},{"id":160967,"depth":191,"text":160968,"children":162329},[162330,162331],{"id":160971,"depth":202,"text":160972},{"id":161035,"depth":202,"text":161036},{"id":161099,"depth":191,"text":161100},{"id":161194,"depth":191,"text":161195},{"id":161303,"depth":191,"text":161304},{"id":161499,"depth":191,"text":161500},{"id":161584,"depth":191,"text":161585},{"id":161723,"depth":191,"text":161724},{"id":161903,"depth":191,"text":161904},{"id":162052,"depth":191,"text":162053},{"id":162266,"depth":191,"text":162267},{"id":162300,"depth":191,"text":162301},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160572,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162348,"title":162349,"body":162350,"description":25173,"extension":1930,"meta":164355,"navigation":630,"path":164356,"seo":164357,"stem":164358,"__hash__":164359},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162351,"toc":164335},[162352,162355,162359,162362,162365,162379,162382,162396,162400,162402,162421,162423,162470,162472,162486,162490,162564,162567,162571,162574,162633,162641,162644,162697,162700,162704,162709,162764,162772,162822,162826,162831,162839,162938,162944,162948,162953,162956,162967,163008,163021,163025,163028,163064,163067,163080,163083,163143,163147,163151,163154,163205,163209,163212,163259,163265,163331,163334,163338,163341,163457,163460,163464,163467,163573,163577,163580,163618,163621,163663,163666,163726,163729,163733,164197,164200,164204,164231,164237,164298,164302,164332],[10,162353,162349],{"id":162354},"_5-函数基础",[14,162356,162358],{"id":162357},"_51-为什么需要函数","5.1 为什么需要函数",[19,162360,162361],{},"函数用于封装一段可以重复使用的代码。",[19,162363,162364],{},"不使用函数的问题：",[26,162366,162367,162370,162373,162376],{},[29,162368,162369],{},"重复代码多。",[29,162371,162372],{},"修改逻辑时容易漏改。",[29,162374,162375],{},"主流程不清晰。",[29,162377,162378],{},"程序越写越长，难以维护。",[19,162380,162381],{},"使用函数后的好处：",[26,162383,162384,162387,162390,162393],{},[29,162385,162386],{},"提高复用性。",[29,162388,162389],{},"提高可读性。",[29,162391,162392],{},"便于调试。",[29,162394,162395],{},"便于分工。",[14,162397,162399],{"id":162398},"_52-函数定义","5.2 函数定义",[19,162401,7000],{},[58,162403,162405],{"className":60,"code":162404,"language":62,"meta":63,"style":63},"def 函数名():\n    函数体\n",[32,162406,162407,162416],{"__ignoreMap":63},[67,162408,162409,162411,162414],{"class":69,"line":70},[67,162410,801],{"class":84},[67,162412,162413],{"class":110}," 函数名",[67,162415,33723],{"class":73},[67,162417,162418],{"class":69,"line":191},[67,162419,162420],{"class":73},"    函数体\n",[19,162422,16932],{},[58,162424,162426],{"className":60,"code":162425,"language":62,"meta":63,"style":63},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[32,162427,162428,162437,162447,162457,162461,162465],{"__ignoreMap":63},[67,162429,162430,162432,162435],{"class":69,"line":70},[67,162431,801],{"class":84},[67,162433,162434],{"class":110}," say_hello",[67,162436,33723],{"class":73},[67,162438,162439,162441,162443,162445],{"class":69,"line":191},[67,162440,851],{"class":77},[67,162442,854],{"class":73},[67,162444,7661],{"class":114},[67,162446,829],{"class":73},[67,162448,162449,162451,162453,162455],{"class":69,"line":202},[67,162450,851],{"class":77},[67,162452,854],{"class":73},[67,162454,148077],{"class":114},[67,162456,829],{"class":73},[67,162458,162459],{"class":69,"line":641},[67,162460,631],{"emptyLinePlaceholder":630},[67,162462,162463],{"class":69,"line":655},[67,162464,631],{"emptyLinePlaceholder":630},[67,162466,162467],{"class":69,"line":660},[67,162468,162469],{"class":73},"say_hello()\n",[19,162471,10831],{},[26,162473,162474,162477,162480,162483],{},[29,162475,162476],{},"函数必须先定义，再调用。",[29,162478,162479],{},"函数名遵循变量命名规则。",[29,162481,162482],{},"函数体需要缩进。",[29,162484,162485],{},"函数不调用就不会执行。",[14,162487,162489],{"id":162488},"_53-函数调用","5.3 函数调用",[58,162491,162493],{"className":60,"code":162492,"language":62,"meta":63,"style":63},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[32,162494,162495,162504,162515,162526,162537,162547,162551,162555,162560],{"__ignoreMap":63},[67,162496,162497,162499,162502],{"class":69,"line":70},[67,162498,801],{"class":84},[67,162500,162501],{"class":110}," print_menu",[67,162503,33723],{"class":73},[67,162505,162506,162508,162510,162513],{"class":69,"line":191},[67,162507,851],{"class":77},[67,162509,854],{"class":73},[67,162511,162512],{"class":114},"\"1. 查询\"",[67,162514,829],{"class":73},[67,162516,162517,162519,162521,162524],{"class":69,"line":202},[67,162518,851],{"class":77},[67,162520,854],{"class":73},[67,162522,162523],{"class":114},"\"2. 添加\"",[67,162525,829],{"class":73},[67,162527,162528,162530,162532,162535],{"class":69,"line":641},[67,162529,851],{"class":77},[67,162531,854],{"class":73},[67,162533,162534],{"class":114},"\"3. 删除\"",[67,162536,829],{"class":73},[67,162538,162539,162541,162543,162545],{"class":69,"line":655},[67,162540,851],{"class":77},[67,162542,854],{"class":73},[67,162544,162119],{"class":114},[67,162546,829],{"class":73},[67,162548,162549],{"class":69,"line":660},[67,162550,631],{"emptyLinePlaceholder":630},[67,162552,162553],{"class":69,"line":665},[67,162554,631],{"emptyLinePlaceholder":630},[67,162556,162557],{"class":69,"line":677},[67,162558,162559],{"class":73},"print_menu()\n",[67,162561,162562],{"class":69,"line":683},[67,162563,162559],{"class":73},[19,162565,162566],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162568,162570],{"id":162569},"_54-参数","5.4 参数",[19,162572,162573],{},"参数用于向函数传递数据。",[58,162575,162577],{"className":60,"code":162576,"language":62,"meta":63,"style":63},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[32,162578,162579,162588,162608,162612,162616,162625],{"__ignoreMap":63},[67,162580,162581,162583,162585],{"class":69,"line":70},[67,162582,801],{"class":84},[67,162584,162434],{"class":110},[67,162586,162587],{"class":73},"(name):\n",[67,162589,162590,162592,162594,162596,162598,162600,162602,162604,162606],{"class":69,"line":191},[67,162591,851],{"class":77},[67,162593,854],{"class":73},[67,162595,2052],{"class":84},[67,162597,158492],{"class":114},[67,162599,2885],{"class":77},[67,162601,81570],{"class":73},[67,162603,2934],{"class":77},[67,162605,2243],{"class":114},[67,162607,829],{"class":73},[67,162609,162610],{"class":69,"line":202},[67,162611,631],{"emptyLinePlaceholder":630},[67,162613,162614],{"class":69,"line":641},[67,162615,631],{"emptyLinePlaceholder":630},[67,162617,162618,162621,162623],{"class":69,"line":655},[67,162619,162620],{"class":73},"say_hello(",[67,162622,151326],{"class":114},[67,162624,829],{"class":73},[67,162626,162627,162629,162631],{"class":69,"line":660},[67,162628,162620],{"class":73},[67,162630,152374],{"class":114},[67,162632,829],{"class":73},[19,162634,162635,162637,162638,162640],{},[32,162636,81570],{}," 是形参，",[32,162639,151326],{}," 是实参。",[19,162642,162643],{},"多个参数：",[58,162645,162647],{"className":60,"code":162646,"language":62,"meta":63,"style":63},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[32,162648,162649,162657,162670,162676,162680,162684],{"__ignoreMap":63},[67,162650,162651,162653,162655],{"class":69,"line":70},[67,162652,801],{"class":84},[67,162654,7026],{"class":110},[67,162656,152531],{"class":73},[67,162658,162659,162662,162664,162666,162668],{"class":69,"line":191},[67,162660,162661],{"class":73},"    result ",[67,162663,85],{"class":84},[67,162665,12669],{"class":73},[67,162667,2471],{"class":84},[67,162669,152542],{"class":73},[67,162671,162672,162674],{"class":69,"line":202},[67,162673,851],{"class":77},[67,162675,78345],{"class":73},[67,162677,162678],{"class":69,"line":641},[67,162679,631],{"emptyLinePlaceholder":630},[67,162681,162682],{"class":69,"line":655},[67,162683,631],{"emptyLinePlaceholder":630},[67,162685,162686,162689,162691,162693,162695],{"class":69,"line":660},[67,162687,162688],{"class":73},"add(",[67,162690,2437],{"class":77},[67,162692,1868],{"class":73},[67,162694,2689],{"class":77},[67,162696,829],{"class":73},[19,162698,162699],{},"调用时参数数量必须匹配。",[14,162701,162703],{"id":162702},"_55-返回值","5.5 返回值",[19,162705,162706,162708],{},[32,162707,18843],{}," 用于把函数内部的结果返回给调用者。",[58,162710,162712],{"className":60,"code":162711,"language":62,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[32,162713,162714,162722,162732,162736,162740,162758],{"__ignoreMap":63},[67,162715,162716,162718,162720],{"class":69,"line":70},[67,162717,801],{"class":84},[67,162719,7026],{"class":110},[67,162721,152531],{"class":73},[67,162723,162724,162726,162728,162730],{"class":69,"line":191},[67,162725,5910],{"class":84},[67,162727,12669],{"class":73},[67,162729,2471],{"class":84},[67,162731,152542],{"class":73},[67,162733,162734],{"class":69,"line":202},[67,162735,631],{"emptyLinePlaceholder":630},[67,162737,162738],{"class":69,"line":641},[67,162739,631],{"emptyLinePlaceholder":630},[67,162741,162742,162745,162747,162750,162752,162754,162756],{"class":69,"line":655},[67,162743,162744],{"class":73},"result ",[67,162746,85],{"class":84},[67,162748,162749],{"class":73}," add(",[67,162751,2437],{"class":77},[67,162753,1868],{"class":73},[67,162755,2689],{"class":77},[67,162757,829],{"class":73},[67,162759,162760,162762],{"class":69,"line":660},[67,162761,1626],{"class":77},[67,162763,78345],{"class":73},[19,162765,162766,162767,162769,162770,230],{},"如果函数没有写 ",[32,162768,18843],{},"，默认返回 ",[32,162771,810],{},[58,162773,162775],{"className":60,"code":162774,"language":62,"meta":63,"style":63},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[32,162776,162777,162785,162795,162799,162803,162812],{"__ignoreMap":63},[67,162778,162779,162781,162783],{"class":69,"line":70},[67,162780,801],{"class":84},[67,162782,162434],{"class":110},[67,162784,33723],{"class":73},[67,162786,162787,162789,162791,162793],{"class":69,"line":191},[67,162788,851],{"class":77},[67,162790,854],{"class":73},[67,162792,7661],{"class":114},[67,162794,829],{"class":73},[67,162796,162797],{"class":69,"line":202},[67,162798,631],{"emptyLinePlaceholder":630},[67,162800,162801],{"class":69,"line":641},[67,162802,631],{"emptyLinePlaceholder":630},[67,162804,162805,162807,162809],{"class":69,"line":655},[67,162806,162744],{"class":73},[67,162808,85],{"class":84},[67,162810,162811],{"class":73}," say_hello()\n",[67,162813,162814,162816,162819],{"class":69,"line":660},[67,162815,1626],{"class":77},[67,162817,162818],{"class":73},"(result)  ",[67,162820,162821],{"class":2058},"# None\n",[14,162823,162825],{"id":162824},"_56-return的作用","5.6 return的作用",[19,162827,162828,162830],{},[32,162829,18843],{}," 有两个作用：",[26,162832,162833,162836],{},[29,162834,162835],{},"返回结果。",[29,162837,162838],{},"结束函数。",[58,162840,162842],{"className":60,"code":162841,"language":62,"meta":63,"style":63},"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",[32,162843,162844,162854,162866,162873,162877,162889,162896,162900,162907,162911,162915,162926],{"__ignoreMap":63},[67,162845,162846,162848,162851],{"class":69,"line":70},[67,162847,801],{"class":84},[67,162849,162850],{"class":110}," check_age",[67,162852,162853],{"class":73},"(age):\n",[67,162855,162856,162858,162860,162862,162864],{"class":69,"line":191},[67,162857,897],{"class":84},[67,162859,17504],{"class":73},[67,162861,259],{"class":84},[67,162863,5913],{"class":77},[67,162865,813],{"class":73},[67,162867,162868,162870],{"class":69,"line":202},[67,162869,16550],{"class":84},[67,162871,162872],{"class":114}," \"年龄不合法\"\n",[67,162874,162875],{"class":69,"line":641},[67,162876,631],{"emptyLinePlaceholder":630},[67,162878,162879,162881,162883,162885,162887],{"class":69,"line":655},[67,162880,897],{"class":84},[67,162882,17504],{"class":73},[67,162884,3553],{"class":84},[67,162886,157723],{"class":77},[67,162888,813],{"class":73},[67,162890,162891,162893],{"class":69,"line":660},[67,162892,16550],{"class":84},[67,162894,162895],{"class":114}," \"成年人\"\n",[67,162897,162898],{"class":69,"line":665},[67,162899,631],{"emptyLinePlaceholder":630},[67,162901,162902,162904],{"class":69,"line":677},[67,162903,5910],{"class":84},[67,162905,162906],{"class":114}," \"未成年人\"\n",[67,162908,162909],{"class":69,"line":683},[67,162910,631],{"emptyLinePlaceholder":630},[67,162912,162913],{"class":69,"line":689},[67,162914,631],{"emptyLinePlaceholder":630},[67,162916,162917,162919,162922,162924],{"class":69,"line":694},[67,162918,1626],{"class":77},[67,162920,162921],{"class":73},"(check_age(",[67,162923,2689],{"class":77},[67,162925,1050],{"class":73},[67,162927,162928,162930,162932,162934,162936],{"class":69,"line":700},[67,162929,1626],{"class":77},[67,162931,162921],{"class":73},[67,162933,1863],{"class":84},[67,162935,2209],{"class":77},[67,162937,1050],{"class":73},[19,162939,162940,162941,162943],{},"函数执行到 ",[32,162942,18843],{}," 后，后面的代码不会继续执行。",[14,162945,162947],{"id":162946},"_57-none","5.7 None",[19,162949,162950,162952],{},[32,162951,810],{}," 表示空值或没有结果。",[19,162954,162955],{},"常见使用场景：",[26,162957,162958,162961,162964],{},[29,162959,162960],{},"函数没有返回值。",[29,162962,162963],{},"变量暂时没有具体值。",[29,162965,162966],{},"表示查询不到结果。",[58,162968,162970],{"className":60,"code":162969,"language":62,"meta":63,"style":63},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[32,162971,162972,162980,162984,162997],{"__ignoreMap":63},[67,162973,162974,162976,162978],{"class":69,"line":70},[67,162975,162744],{"class":73},[67,162977,85],{"class":84},[67,162979,153610],{"class":77},[67,162981,162982],{"class":69,"line":191},[67,162983,631],{"emptyLinePlaceholder":630},[67,162985,162986,162988,162991,162993,162995],{"class":69,"line":202},[67,162987,1096],{"class":84},[67,162989,162990],{"class":73}," result ",[67,162992,40695],{"class":84},[67,162994,40701],{"class":77},[67,162996,813],{"class":73},[67,162998,162999,163001,163003,163006],{"class":69,"line":641},[67,163000,851],{"class":77},[67,163002,854],{"class":73},[67,163004,163005],{"class":114},"\"没有数据\"",[67,163007,829],{"class":73},[19,163009,163010,163011,163013,163014,163017,163018,230],{},"判断 ",[32,163012,810],{}," 推荐使用 ",[32,163015,163016],{},"is None","，不要写成 ",[32,163019,163020],{},"== None",[14,163022,163024],{"id":163023},"_58-函数文档字符串","5.8 函数文档字符串",[19,163026,163027],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[58,163029,163031],{"className":60,"code":163030,"language":62,"meta":63,"style":63},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[32,163032,163033,163043,163048],{"__ignoreMap":63},[67,163034,163035,163037,163040],{"class":69,"line":70},[67,163036,801],{"class":84},[67,163038,163039],{"class":110}," calculate_bmi",[67,163041,163042],{"class":73},"(weight, height):\n",[67,163044,163045],{"class":69,"line":191},[67,163046,163047],{"class":114},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[67,163049,163050,163052,163055,163057,163060,163062],{"class":69,"line":202},[67,163051,5910],{"class":84},[67,163053,163054],{"class":73}," weight ",[67,163056,2573],{"class":84},[67,163058,163059],{"class":73}," height ",[67,163061,12461],{"class":84},[67,163063,49491],{"class":77},[19,163065,163066],{},"查看说明：",[58,163068,163070],{"className":60,"code":163069,"language":62,"meta":63,"style":63},"help(calculate_bmi)\n",[32,163071,163072],{"__ignoreMap":63},[67,163073,163074,163077],{"class":69,"line":70},[67,163075,163076],{"class":77},"help",[67,163078,163079],{"class":73},"(calculate_bmi)\n",[19,163081,163082],{},"较完整的写法：",[58,163084,163086],{"className":60,"code":163085,"language":62,"meta":63,"style":63},"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",[32,163087,163088,163096,163101,163106,163110,163115,163120,163125,163129],{"__ignoreMap":63},[67,163089,163090,163092,163094],{"class":69,"line":70},[67,163091,801],{"class":84},[67,163093,163039],{"class":110},[67,163095,163042],{"class":73},[67,163097,163098],{"class":69,"line":191},[67,163099,163100],{"class":114},"    \"\"\"\n",[67,163102,163103],{"class":69,"line":202},[67,163104,163105],{"class":114},"    计算BMI。\n",[67,163107,163108],{"class":69,"line":641},[67,163109,631],{"emptyLinePlaceholder":630},[67,163111,163112],{"class":69,"line":655},[67,163113,163114],{"class":114},"    :param weight: 体重，单位kg\n",[67,163116,163117],{"class":69,"line":660},[67,163118,163119],{"class":114},"    :param height: 身高，单位m\n",[67,163121,163122],{"class":69,"line":665},[67,163123,163124],{"class":114},"    :return: BMI数值\n",[67,163126,163127],{"class":69,"line":677},[67,163128,163100],{"class":114},[67,163130,163131,163133,163135,163137,163139,163141],{"class":69,"line":683},[67,163132,5910],{"class":84},[67,163134,163054],{"class":73},[67,163136,2573],{"class":84},[67,163138,163059],{"class":73},[67,163140,12461],{"class":84},[67,163142,49491],{"class":77},[14,163144,163146],{"id":163145},"_59-变量作用域","5.9 变量作用域",[391,163148,163150],{"id":163149},"_591-局部变量","5.9.1 局部变量",[19,163152,163153],{},"在函数内部定义的变量，只能在函数内部使用。",[58,163155,163157],{"className":60,"code":163156,"language":62,"meta":63,"style":63},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[32,163158,163159,163168,163176,163182,163186,163190,163195],{"__ignoreMap":63},[67,163160,163161,163163,163166],{"class":69,"line":70},[67,163162,801],{"class":84},[67,163164,163165],{"class":110}," test",[67,163167,33723],{"class":73},[67,163169,163170,163172,163174],{"class":69,"line":191},[67,163171,47361],{"class":73},[67,163173,85],{"class":84},[67,163175,60189],{"class":77},[67,163177,163178,163180],{"class":69,"line":202},[67,163179,851],{"class":77},[67,163181,2015],{"class":73},[67,163183,163184],{"class":69,"line":641},[67,163185,631],{"emptyLinePlaceholder":630},[67,163187,163188],{"class":69,"line":655},[67,163189,631],{"emptyLinePlaceholder":630},[67,163191,163192],{"class":69,"line":660},[67,163193,163194],{"class":73},"test()\n",[67,163196,163197,163199,163202],{"class":69,"line":665},[67,163198,1626],{"class":77},[67,163200,163201],{"class":73},"(num)  ",[67,163203,163204],{"class":2058},"# 报错\n",[391,163206,163208],{"id":163207},"_592-全局变量","5.9.2 全局变量",[19,163210,163211],{},"在函数外部定义的变量，可以在函数内部读取。",[58,163213,163215],{"className":60,"code":163214,"language":62,"meta":63,"style":63},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[32,163216,163217,163225,163229,163233,163241,163247,163251,163255],{"__ignoreMap":63},[67,163218,163219,163221,163223],{"class":69,"line":70},[67,163220,147974],{"class":73},[67,163222,85],{"class":84},[67,163224,150791],{"class":114},[67,163226,163227],{"class":69,"line":191},[67,163228,631],{"emptyLinePlaceholder":630},[67,163230,163231],{"class":69,"line":202},[67,163232,631],{"emptyLinePlaceholder":630},[67,163234,163235,163237,163239],{"class":69,"line":641},[67,163236,801],{"class":84},[67,163238,162434],{"class":110},[67,163240,33723],{"class":73},[67,163242,163243,163245],{"class":69,"line":655},[67,163244,851],{"class":77},[67,163246,152098],{"class":73},[67,163248,163249],{"class":69,"line":660},[67,163250,631],{"emptyLinePlaceholder":630},[67,163252,163253],{"class":69,"line":665},[67,163254,631],{"emptyLinePlaceholder":630},[67,163256,163257],{"class":69,"line":677},[67,163258,162469],{"class":73},[19,163260,163261,163262,230],{},"如果要在函数内部修改全局变量，需要 ",[32,163263,163264],{},"global",[58,163266,163268],{"className":60,"code":163267,"language":62,"meta":63,"style":63},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[32,163269,163270,163278,163282,163286,163295,163303,163311,163315,163319,163324],{"__ignoreMap":63},[67,163271,163272,163274,163276],{"class":69,"line":70},[67,163273,148129],{"class":73},[67,163275,85],{"class":84},[67,163277,49101],{"class":77},[67,163279,163280],{"class":69,"line":191},[67,163281,631],{"emptyLinePlaceholder":630},[67,163283,163284],{"class":69,"line":202},[67,163285,631],{"emptyLinePlaceholder":630},[67,163287,163288,163290,163293],{"class":69,"line":641},[67,163289,801],{"class":84},[67,163291,163292],{"class":110}," add_count",[67,163294,33723],{"class":73},[67,163296,163297,163300],{"class":69,"line":655},[67,163298,163299],{"class":84},"    global",[67,163301,163302],{"class":73}," count\n",[67,163304,163305,163307,163309],{"class":69,"line":660},[67,163306,160871],{"class":73},[67,163308,11283],{"class":84},[67,163310,57460],{"class":77},[67,163312,163313],{"class":69,"line":665},[67,163314,631],{"emptyLinePlaceholder":630},[67,163316,163317],{"class":69,"line":677},[67,163318,631],{"emptyLinePlaceholder":630},[67,163320,163321],{"class":69,"line":683},[67,163322,163323],{"class":73},"add_count()\n",[67,163325,163326,163328],{"class":69,"line":689},[67,163327,1626],{"class":77},[67,163329,163330],{"class":73},"(count)\n",[19,163332,163333],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163335,163337],{"id":163336},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163339,163340],{},"一个函数中可以调用另一个函数。",[58,163342,163344],{"className":60,"code":163343,"language":62,"meta":63,"style":63},"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",[32,163345,163346,163355,163369,163373,163377,163386,163391,163411,163432,163436,163440,163444],{"__ignoreMap":63},[67,163347,163348,163350,163353],{"class":69,"line":70},[67,163349,801],{"class":84},[67,163351,163352],{"class":110}," print_line",[67,163354,33723],{"class":73},[67,163356,163357,163359,163361,163363,163365,163367],{"class":69,"line":191},[67,163358,851],{"class":77},[67,163360,854],{"class":73},[67,163362,34252],{"class":114},[67,163364,986],{"class":84},[67,163366,80425],{"class":77},[67,163368,829],{"class":73},[67,163370,163371],{"class":69,"line":202},[67,163372,631],{"emptyLinePlaceholder":630},[67,163374,163375],{"class":69,"line":641},[67,163376,631],{"emptyLinePlaceholder":630},[67,163378,163379,163381,163384],{"class":69,"line":655},[67,163380,801],{"class":84},[67,163382,163383],{"class":110}," print_info",[67,163385,150813],{"class":73},[67,163387,163388],{"class":69,"line":660},[67,163389,163390],{"class":73},"    print_line()\n",[67,163392,163393,163395,163397,163399,163401,163403,163405,163407,163409],{"class":69,"line":665},[67,163394,851],{"class":77},[67,163396,854],{"class":73},[67,163398,2052],{"class":84},[67,163400,158120],{"class":114},[67,163402,2885],{"class":77},[67,163404,81570],{"class":73},[67,163406,2934],{"class":77},[67,163408,2243],{"class":114},[67,163410,829],{"class":73},[67,163412,163413,163415,163417,163419,163422,163424,163426,163428,163430],{"class":69,"line":677},[67,163414,851],{"class":77},[67,163416,854],{"class":73},[67,163418,2052],{"class":84},[67,163420,163421],{"class":114},"\"年龄:",[67,163423,2885],{"class":77},[67,163425,71981],{"class":73},[67,163427,2934],{"class":77},[67,163429,2243],{"class":114},[67,163431,829],{"class":73},[67,163433,163434],{"class":69,"line":683},[67,163435,163390],{"class":73},[67,163437,163438],{"class":69,"line":689},[67,163439,631],{"emptyLinePlaceholder":630},[67,163441,163442],{"class":69,"line":694},[67,163443,631],{"emptyLinePlaceholder":630},[67,163445,163446,163449,163451,163453,163455],{"class":69,"line":700},[67,163447,163448],{"class":73},"print_info(",[67,163450,151326],{"class":114},[67,163452,1868],{"class":73},[67,163454,2639],{"class":77},[67,163456,829],{"class":73},[19,163458,163459],{},"这种方式可以把小功能组合成大功能。",[14,163461,163463],{"id":163462},"_511-参数检查","5.11 参数检查",[19,163465,163466],{},"函数内部可以检查参数是否合法。",[58,163468,163470],{"className":60,"code":163469,"language":62,"meta":63,"style":63},"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",[32,163471,163472,163481,163493,163499,163509,163513,163517,163534,163538,163550,163561,163567],{"__ignoreMap":63},[67,163473,163474,163476,163479],{"class":69,"line":70},[67,163475,801],{"class":84},[67,163477,163478],{"class":110}," divide",[67,163480,152531],{"class":73},[67,163482,163483,163485,163487,163489,163491],{"class":69,"line":191},[67,163484,897],{"class":84},[67,163486,12682],{"class":73},[67,163488,4774],{"class":84},[67,163490,5913],{"class":77},[67,163492,813],{"class":73},[67,163494,163495,163497],{"class":69,"line":202},[67,163496,16550],{"class":84},[67,163498,153610],{"class":77},[67,163500,163501,163503,163505,163507],{"class":69,"line":641},[67,163502,5910],{"class":84},[67,163504,12669],{"class":73},[67,163506,2573],{"class":84},[67,163508,152542],{"class":73},[67,163510,163511],{"class":69,"line":655},[67,163512,631],{"emptyLinePlaceholder":630},[67,163514,163515],{"class":69,"line":660},[67,163516,631],{"emptyLinePlaceholder":630},[67,163518,163519,163521,163523,163526,163528,163530,163532],{"class":69,"line":665},[67,163520,162744],{"class":73},[67,163522,85],{"class":84},[67,163524,163525],{"class":73}," divide(",[67,163527,2437],{"class":77},[67,163529,1868],{"class":73},[67,163531,78],{"class":77},[67,163533,829],{"class":73},[67,163535,163536],{"class":69,"line":677},[67,163537,631],{"emptyLinePlaceholder":630},[67,163539,163540,163542,163544,163546,163548],{"class":69,"line":683},[67,163541,1096],{"class":84},[67,163543,162990],{"class":73},[67,163545,40695],{"class":84},[67,163547,40701],{"class":77},[67,163549,813],{"class":73},[67,163551,163552,163554,163556,163559],{"class":69,"line":689},[67,163553,851],{"class":77},[67,163555,854],{"class":73},[67,163557,163558],{"class":114},"\"除数不能为0\"",[67,163560,829],{"class":73},[67,163562,163563,163565],{"class":69,"line":694},[67,163564,3544],{"class":84},[67,163566,813],{"class":73},[67,163568,163569,163571],{"class":69,"line":700},[67,163570,851],{"class":77},[67,163572,78345],{"class":73},[14,163574,163576],{"id":163575},"_512-类型提示","5.12 类型提示",[19,163578,163579],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[58,163581,163583],{"className":60,"code":163582,"language":62,"meta":63,"style":63},"def add(a: int, b: int) -> int:\n    return a + b\n",[32,163584,163585,163608],{"__ignoreMap":63},[67,163586,163587,163589,163591,163594,163596,163599,163601,163604,163606],{"class":69,"line":70},[67,163588,801],{"class":84},[67,163590,7026],{"class":110},[67,163592,163593],{"class":73},"(a: ",[67,163595,2006],{"class":77},[67,163597,163598],{"class":73},", b: ",[67,163600,2006],{"class":77},[67,163602,163603],{"class":73},") -> ",[67,163605,2006],{"class":77},[67,163607,813],{"class":73},[67,163609,163610,163612,163614,163616],{"class":69,"line":191},[67,163611,5910],{"class":84},[67,163613,12669],{"class":73},[67,163615,2471],{"class":84},[67,163617,152542],{"class":73},[19,163619,163620],{},"字符串参数：",[58,163622,163624],{"className":60,"code":163623,"language":62,"meta":63,"style":63},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[32,163625,163626,163643],{"__ignoreMap":63},[67,163627,163628,163630,163632,163635,163637,163639,163641],{"class":69,"line":70},[67,163629,801],{"class":84},[67,163631,162434],{"class":110},[67,163633,163634],{"class":73},"(name: ",[67,163636,3157],{"class":77},[67,163638,163603],{"class":73},[67,163640,810],{"class":77},[67,163642,813],{"class":73},[67,163644,163645,163647,163649,163651,163653,163655,163657,163659,163661],{"class":69,"line":191},[67,163646,851],{"class":77},[67,163648,854],{"class":73},[67,163650,2052],{"class":84},[67,163652,158492],{"class":114},[67,163654,2885],{"class":77},[67,163656,81570],{"class":73},[67,163658,2934],{"class":77},[67,163660,2243],{"class":114},[67,163662,829],{"class":73},[19,163664,163665],{},"列表参数：",[58,163667,163669],{"className":60,"code":163668,"language":62,"meta":63,"style":63},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[32,163670,163671,163690,163698,163710,163719],{"__ignoreMap":63},[67,163672,163673,163675,163678,163681,163683,163686,163688],{"class":69,"line":70},[67,163674,801],{"class":84},[67,163676,163677],{"class":110}," get_total",[67,163679,163680],{"class":73},"(numbers: list[",[67,163682,2006],{"class":77},[67,163684,163685],{"class":73},"]) -> ",[67,163687,2006],{"class":77},[67,163689,813],{"class":73},[67,163691,163692,163694,163696],{"class":69,"line":191},[67,163693,160745],{"class":73},[67,163695,85],{"class":84},[67,163697,49101],{"class":77},[67,163699,163700,163702,163705,163707],{"class":69,"line":202},[67,163701,935],{"class":84},[67,163703,163704],{"class":73}," number ",[67,163706,941],{"class":84},[67,163708,163709],{"class":73}," numbers:\n",[67,163711,163712,163714,163716],{"class":69,"line":641},[67,163713,161420],{"class":73},[67,163715,11283],{"class":84},[67,163717,163718],{"class":73}," number\n",[67,163720,163721,163723],{"class":69,"line":655},[67,163722,5910],{"class":84},[67,163724,163725],{"class":73}," total\n",[19,163727,163728],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163730,163732],{"id":163731},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[58,163734,163736],{"className":60,"code":163735,"language":62,"meta":63,"style":63},"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",[32,163737,163738,163748,163752,163756,163764,163775,163785,163795,163805,163815,163819,163823,163832,163854,163858,163862,163871,163877,163897,163909,163920,163924,163933,163944,163949,163953,163957,163966,163972,163991,164003,164013,164017,164028,164038,164042,164050,164061,164065,164069,164073,164081,164086,164100,164104,164116,164121,164133,164138,164150,164155,164167,164177,164181,164187],{"__ignoreMap":63},[67,163739,163740,163743,163745],{"class":69,"line":70},[67,163741,163742],{"class":73},"balance ",[67,163744,85],{"class":84},[67,163746,163747],{"class":77}," 1000\n",[67,163749,163750],{"class":69,"line":191},[67,163751,631],{"emptyLinePlaceholder":630},[67,163753,163754],{"class":69,"line":202},[67,163755,631],{"emptyLinePlaceholder":630},[67,163757,163758,163760,163762],{"class":69,"line":641},[67,163759,801],{"class":84},[67,163761,153471],{"class":110},[67,163763,33723],{"class":73},[67,163765,163766,163768,163770,163773],{"class":69,"line":655},[67,163767,851],{"class":77},[67,163769,854],{"class":73},[67,163771,163772],{"class":114},"\"====== ATM ======\"",[67,163774,829],{"class":73},[67,163776,163777,163779,163781,163783],{"class":69,"line":660},[67,163778,851],{"class":77},[67,163780,854],{"class":73},[67,163782,162086],{"class":114},[67,163784,829],{"class":73},[67,163786,163787,163789,163791,163793],{"class":69,"line":665},[67,163788,851],{"class":77},[67,163790,854],{"class":73},[67,163792,162097],{"class":114},[67,163794,829],{"class":73},[67,163796,163797,163799,163801,163803],{"class":69,"line":677},[67,163798,851],{"class":77},[67,163800,854],{"class":73},[67,163802,162108],{"class":114},[67,163804,829],{"class":73},[67,163806,163807,163809,163811,163813],{"class":69,"line":683},[67,163808,851],{"class":77},[67,163810,854],{"class":73},[67,163812,162119],{"class":114},[67,163814,829],{"class":73},[67,163816,163817],{"class":69,"line":689},[67,163818,631],{"emptyLinePlaceholder":630},[67,163820,163821],{"class":69,"line":694},[67,163822,631],{"emptyLinePlaceholder":630},[67,163824,163825,163827,163830],{"class":69,"line":700},[67,163826,801],{"class":84},[67,163828,163829],{"class":110}," show_balance",[67,163831,33723],{"class":73},[67,163833,163834,163836,163838,163840,163843,163845,163848,163850,163852],{"class":69,"line":706},[67,163835,851],{"class":77},[67,163837,854],{"class":73},[67,163839,2052],{"class":84},[67,163841,163842],{"class":114},"\"当前余额:",[67,163844,2885],{"class":77},[67,163846,163847],{"class":73},"balance",[67,163849,2934],{"class":77},[67,163851,158450],{"class":114},[67,163853,829],{"class":73},[67,163855,163856],{"class":69,"line":712},[67,163857,631],{"emptyLinePlaceholder":630},[67,163859,163860],{"class":69,"line":717},[67,163861,631],{"emptyLinePlaceholder":630},[67,163863,163864,163866,163869],{"class":69,"line":723},[67,163865,801],{"class":84},[67,163867,163868],{"class":110}," save_money",[67,163870,33723],{"class":73},[67,163872,163873,163875],{"class":69,"line":729},[67,163874,163299],{"class":84},[67,163876,151537],{"class":73},[67,163878,163879,163882,163884,163886,163888,163890,163892,163895],{"class":69,"line":735},[67,163880,163881],{"class":73},"    money ",[67,163883,85],{"class":84},[67,163885,111235],{"class":77},[67,163887,854],{"class":73},[67,163889,55583],{"class":77},[67,163891,854],{"class":73},[67,163893,163894],{"class":114},"\"请输入存款金额:\"",[67,163896,1050],{"class":73},[67,163898,163899,163901,163903,163905,163907],{"class":69,"line":741},[67,163900,897],{"class":84},[67,163902,151580],{"class":73},[67,163904,3442],{"class":84},[67,163906,5913],{"class":77},[67,163908,813],{"class":73},[67,163910,163911,163913,163915,163918],{"class":69,"line":747},[67,163912,34220],{"class":77},[67,163914,854],{"class":73},[67,163916,163917],{"class":114},"\"金额必须大于0\"",[67,163919,829],{"class":73},[67,163921,163922],{"class":69,"line":753},[67,163923,153799],{"class":84},[67,163925,163926,163929,163931],{"class":69,"line":758},[67,163927,163928],{"class":73},"    balance ",[67,163930,11283],{"class":84},[67,163932,151613],{"class":73},[67,163934,163935,163937,163939,163942],{"class":69,"line":764},[67,163936,851],{"class":77},[67,163938,854],{"class":73},[67,163940,163941],{"class":114},"\"存款成功\"",[67,163943,829],{"class":73},[67,163945,163946],{"class":69,"line":770},[67,163947,163948],{"class":73},"    show_balance()\n",[67,163950,163951],{"class":69,"line":776},[67,163952,631],{"emptyLinePlaceholder":630},[67,163954,163955],{"class":69,"line":782},[67,163956,631],{"emptyLinePlaceholder":630},[67,163958,163959,163961,163964],{"class":69,"line":788},[67,163960,801],{"class":84},[67,163962,163963],{"class":110}," withdraw_money",[67,163965,33723],{"class":73},[67,163967,163968,163970],{"class":69,"line":793},[67,163969,163299],{"class":84},[67,163971,151537],{"class":73},[67,163973,163974,163976,163978,163980,163982,163984,163986,163989],{"class":69,"line":798},[67,163975,163881],{"class":73},[67,163977,85],{"class":84},[67,163979,111235],{"class":77},[67,163981,854],{"class":73},[67,163983,55583],{"class":77},[67,163985,854],{"class":73},[67,163987,163988],{"class":114},"\"请输入取款金额:\"",[67,163990,1050],{"class":73},[67,163992,163993,163995,163997,163999,164001],{"class":69,"line":816},[67,163994,897],{"class":84},[67,163996,151580],{"class":73},[67,163998,3442],{"class":84},[67,164000,5913],{"class":77},[67,164002,813],{"class":73},[67,164004,164005,164007,164009,164011],{"class":69,"line":832},[67,164006,34220],{"class":77},[67,164008,854],{"class":73},[67,164010,163917],{"class":114},[67,164012,829],{"class":73},[67,164014,164015],{"class":69,"line":843},[67,164016,153799],{"class":84},[67,164018,164019,164021,164023,164025],{"class":69,"line":848},[67,164020,897],{"class":84},[67,164022,151580],{"class":73},[67,164024,2948],{"class":84},[67,164026,164027],{"class":73}," balance:\n",[67,164029,164030,164032,164034,164036],{"class":69,"line":863},[67,164031,34220],{"class":77},[67,164033,854],{"class":73},[67,164035,151675],{"class":114},[67,164037,829],{"class":73},[67,164039,164040],{"class":69,"line":876},[67,164041,153799],{"class":84},[67,164043,164044,164046,164048],{"class":69,"line":889},[67,164045,163928],{"class":73},[67,164047,151690],{"class":84},[67,164049,151613],{"class":73},[67,164051,164052,164054,164056,164059],{"class":69,"line":894},[67,164053,851],{"class":77},[67,164055,854],{"class":73},[67,164057,164058],{"class":114},"\"取款成功\"",[67,164060,829],{"class":73},[67,164062,164063],{"class":69,"line":911},[67,164064,163948],{"class":73},[67,164066,164067],{"class":69,"line":927},[67,164068,631],{"emptyLinePlaceholder":630},[67,164070,164071],{"class":69,"line":932},[67,164072,631],{"emptyLinePlaceholder":630},[67,164074,164075,164077,164079],{"class":69,"line":955},[67,164076,110101],{"class":84},[67,164078,97051],{"class":77},[67,164080,813],{"class":73},[67,164082,164083],{"class":69,"line":971},[67,164084,164085],{"class":73},"    show_menu()\n",[67,164087,164088,164090,164092,164094,164096,164098],{"class":69,"line":1010},[67,164089,162130],{"class":73},[67,164091,85],{"class":84},[67,164093,62366],{"class":77},[67,164095,854],{"class":73},[67,164097,154511],{"class":114},[67,164099,829],{"class":73},[67,164101,164102],{"class":69,"line":1016},[67,164103,631],{"emptyLinePlaceholder":630},[67,164105,164106,164108,164110,164112,164114],{"class":69,"line":1021},[67,164107,897],{"class":84},[67,164109,154524],{"class":73},[67,164111,4774],{"class":84},[67,164113,154529],{"class":114},[67,164115,813],{"class":73},[67,164117,164118],{"class":69,"line":1034},[67,164119,164120],{"class":73},"        show_balance()\n",[67,164122,164123,164125,164127,164129,164131],{"class":69,"line":1053},[67,164124,41061],{"class":84},[67,164126,154524],{"class":73},[67,164128,4774],{"class":84},[67,164130,154548],{"class":114},[67,164132,813],{"class":73},[67,164134,164135],{"class":69,"line":1070},[67,164136,164137],{"class":73},"        save_money()\n",[67,164139,164140,164142,164144,164146,164148],{"class":69,"line":1083},[67,164141,41061],{"class":84},[67,164143,154524],{"class":73},[67,164145,4774],{"class":84},[67,164147,154566],{"class":114},[67,164149,813],{"class":73},[67,164151,164152],{"class":69,"line":1088},[67,164153,164154],{"class":73},"        withdraw_money()\n",[67,164156,164157,164159,164161,164163,164165],{"class":69,"line":1093},[67,164158,41061],{"class":84},[67,164160,154524],{"class":73},[67,164162,4774],{"class":84},[67,164164,154620],{"class":114},[67,164166,813],{"class":73},[67,164168,164169,164171,164173,164175],{"class":69,"line":1110},[67,164170,34220],{"class":77},[67,164172,854],{"class":73},[67,164174,154631],{"class":114},[67,164176,829],{"class":73},[67,164178,164179],{"class":69,"line":11603},[67,164180,33398],{"class":84},[67,164182,164183,164185],{"class":69,"line":11612},[67,164184,159460],{"class":84},[67,164186,813],{"class":73},[67,164188,164189,164191,164193,164195],{"class":69,"line":11617},[67,164190,34220],{"class":77},[67,164192,854],{"class":73},[67,164194,154652],{"class":114},[67,164196,829],{"class":73},[19,164198,164199],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164201,164203],{"id":164202},"_514-易错点","5.14 易错点",[26,164205,164206,164209,164212,164217,164222,164225],{},[29,164207,164208],{},"函数定义后必须调用才会执行。",[29,164210,164211],{},"函数名后面有括号才是调用。",[29,164213,164214,164216],{},[32,164215,18843],{}," 后面的代码不会执行。",[29,164218,164219,164220,230],{},"没有返回值的函数默认返回 ",[32,164221,810],{},[29,164223,164224],{},"局部变量不能在函数外部访问。",[29,164226,164227,164228,164230],{},"不要滥用 ",[32,164229,163264],{},"，更好的方式是让函数返回新值。",[19,164232,164233,164234,164236],{},"例如不用 ",[32,164235,163264],{}," 改写存款：",[58,164238,164240],{"className":60,"code":164239,"language":62,"meta":63,"style":63},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[32,164241,164242,164251,164262,164266,164270,164278,164291],{"__ignoreMap":63},[67,164243,164244,164246,164248],{"class":69,"line":70},[67,164245,801],{"class":84},[67,164247,163868],{"class":110},[67,164249,164250],{"class":73},"(balance, money):\n",[67,164252,164253,164255,164258,164260],{"class":69,"line":191},[67,164254,5910],{"class":84},[67,164256,164257],{"class":73}," balance ",[67,164259,2471],{"class":84},[67,164261,151613],{"class":73},[67,164263,164264],{"class":69,"line":202},[67,164265,631],{"emptyLinePlaceholder":630},[67,164267,164268],{"class":69,"line":641},[67,164269,631],{"emptyLinePlaceholder":630},[67,164271,164272,164274,164276],{"class":69,"line":655},[67,164273,163742],{"class":73},[67,164275,85],{"class":84},[67,164277,163747],{"class":77},[67,164279,164280,164282,164284,164287,164289],{"class":69,"line":660},[67,164281,163742],{"class":73},[67,164283,85],{"class":84},[67,164285,164286],{"class":73}," save_money(balance, ",[67,164288,3565],{"class":77},[67,164290,829],{"class":73},[67,164292,164293,164295],{"class":69,"line":665},[67,164294,1626],{"class":77},[67,164296,164297],{"class":73},"(balance)\n",[14,164299,164301],{"id":164300},"_515-本章练习","5.15 本章练习",[26,164303,164304,164311,164317,164323,164329],{},[29,164305,164306,164307,164310],{},"定义函数 ",[32,164308,164309],{},"print_student(name, age)","，输出学生信息。",[29,164312,164306,164313,164316],{},[32,164314,164315],{},"get_max(a, b, c)","，返回三个数中的最大值。",[29,164318,164306,164319,164322],{},[32,164320,164321],{},"is_even(num)","，判断一个数是否为偶数。",[29,164324,164306,164325,164328],{},[32,164326,164327],{},"calculate_bmi(weight, height)","，返回 BMI。",[29,164330,164331],{},"把第 4 章的菜单程序拆分成多个函数。",[1903,164333,164334],{},"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":63,"searchDepth":191,"depth":191,"links":164336},[164337,164338,164339,164340,164341,164342,164343,164344,164345,164349,164350,164351,164352,164353,164354],{"id":162357,"depth":191,"text":162358},{"id":162398,"depth":191,"text":162399},{"id":162488,"depth":191,"text":162489},{"id":162569,"depth":191,"text":162570},{"id":162702,"depth":191,"text":162703},{"id":162824,"depth":191,"text":162825},{"id":162946,"depth":191,"text":162947},{"id":163023,"depth":191,"text":163024},{"id":163145,"depth":191,"text":163146,"children":164346},[164347,164348],{"id":163149,"depth":202,"text":163150},{"id":163207,"depth":202,"text":163208},{"id":163336,"depth":191,"text":163337},{"id":163462,"depth":191,"text":163463},{"id":163575,"depth":191,"text":163576},{"id":163731,"depth":191,"text":163732},{"id":164202,"depth":191,"text":164203},{"id":164300,"depth":191,"text":164301},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162349,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164361,"title":164362,"body":164363,"description":25173,"extension":1930,"meta":167407,"navigation":630,"path":167408,"seo":167409,"stem":167410,"__hash__":167411},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164364,"toc":167388},[164365,164368,164372,164375,164378,164482,164485,164489,164492,164572,164575,164579,164582,164642,164645,164681,164684,164699,164703,164776,164779,164834,164837,164907,164910,164994,165004,165062,165066,165111,165114,165140,165143,165249,165253,165256,165298,165301,165365,165368,165372,165375,165436,165439,165469,165472,165510,165514,165517,165526,165529,165653,165656,165697,165701,165704,165715,165755,165758,165773,165778,165781,165848,165851,165941,165945,165948,165996,165999,166026,166028,166058,166061,166081,166084,166115,166118,166151,166155,166158,166182,166185,166209,166212,166236,166240,166243,166373,166376,166456,166459,166534,166538,166541,166591,166594,166636,166639,166663,166665,166689,166692,166747,166750,166816,166820,166823,166826,166864,166867,166920,166923,166969,166972,167005,167008,167012,167331,167335,167364,167368,167385],[10,164366,164362],{"id":164367},"_6-数据容器",[14,164369,164371],{"id":164370},"_61-什么是数据容器","6.1 什么是数据容器",[19,164373,164374],{},"数据容器用于一次保存多个数据。",[19,164376,164377],{},"常见容器：",[399,164379,164380,164397],{},[402,164381,164382],{},[405,164383,164384,164386,164389,164392,164395],{},[408,164385,27560],{},[408,164387,164388],{},"是否有序",[408,164390,164391],{},"是否可变",[408,164393,164394],{},"是否允许重复",[408,164396,29278],{},[419,164398,164399,164417,164433,164448,164465],{},[405,164400,164401,164404,164407,164410,164413],{},[424,164402,164403],{},"list列表",[424,164405,164406],{},"有序",[424,164408,164409],{},"可变",[424,164411,164412],{},"允许",[424,164414,164415],{},[32,164416,156695],{},[405,164418,164419,164422,164424,164427,164429],{},[424,164420,164421],{},"tuple元组",[424,164423,164406],{},[424,164425,164426],{},"不可变",[424,164428,164412],{},[424,164430,164431],{},[32,164432,156708],{},[405,164434,164435,164438,164440,164442,164444],{},[424,164436,164437],{},"str字符串",[424,164439,164406],{},[424,164441,164426],{},[424,164443,164412],{},[424,164445,164446],{},[32,164447,157318],{},[405,164449,164450,164453,164456,164458,164461],{},[424,164451,164452],{},"set集合",[424,164454,164455],{},"无序",[424,164457,164409],{},[424,164459,164460],{},"不允许",[424,164462,164463],{},[32,164464,156733],{},[405,164466,164467,164470,164472,164474,164477],{},[424,164468,164469],{},"dict字典",[424,164471,164406],{},[424,164473,164409],{},[424,164475,164476],{},"key不允许重复",[424,164478,164479],{},[32,164480,164481],{},"{\"name\": \"小明\"}",[19,164483,164484],{},"Python 3.7 之后，字典保持插入顺序。",[14,164486,164488],{"id":164487},"_62-列表list","6.2 列表list",[19,164490,164491],{},"列表用于保存一组有顺序的数据。",[58,164493,164495],{"className":60,"code":164494,"language":62,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[32,164496,164497,164517,164542,164563],{"__ignoreMap":63},[67,164498,164499,164501,164503,164505,164507,164509,164511,164513,164515],{"class":69,"line":70},[67,164500,161818],{"class":73},[67,164502,85],{"class":84},[67,164504,53990],{"class":73},[67,164506,151326],{"class":114},[67,164508,1868],{"class":73},[67,164510,152374],{"class":114},[67,164512,1868],{"class":73},[67,164514,161169],{"class":114},[67,164516,35015],{"class":73},[67,164518,164519,164522,164524,164526,164528,164530,164532,164534,164536,164538,164540],{"class":69,"line":191},[67,164520,164521],{"class":73},"numbers ",[67,164523,85],{"class":84},[67,164525,53990],{"class":73},[67,164527,2209],{"class":77},[67,164529,1868],{"class":73},[67,164531,2077],{"class":77},[67,164533,1868],{"class":73},[67,164535,2071],{"class":77},[67,164537,1868],{"class":73},[67,164539,1047],{"class":77},[67,164541,35015],{"class":73},[67,164543,164544,164547,164549,164551,164553,164555,164557,164559,164561],{"class":69,"line":202},[67,164545,164546],{"class":73},"mixed ",[67,164548,85],{"class":84},[67,164550,53990],{"class":73},[67,164552,151326],{"class":114},[67,164554,1868],{"class":73},[67,164556,2639],{"class":77},[67,164558,1868],{"class":73},[67,164560,33248],{"class":77},[67,164562,35015],{"class":73},[67,164564,164565,164568,164570],{"class":69,"line":641},[67,164566,164567],{"class":73},"empty ",[67,164569,85],{"class":84},[67,164571,53603],{"class":73},[19,164573,164574],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164576,164578],{"id":164577},"_63-列表索引","6.3 列表索引",[19,164580,164581],{},"正向索引从 0 开始：",[58,164583,164585],{"className":60,"code":164584,"language":62,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[32,164586,164587,164607,164611,164622,164632],{"__ignoreMap":63},[67,164588,164589,164591,164593,164595,164597,164599,164601,164603,164605],{"class":69,"line":70},[67,164590,161818],{"class":73},[67,164592,85],{"class":84},[67,164594,53990],{"class":73},[67,164596,151326],{"class":114},[67,164598,1868],{"class":73},[67,164600,152374],{"class":114},[67,164602,1868],{"class":73},[67,164604,161169],{"class":114},[67,164606,35015],{"class":73},[67,164608,164609],{"class":69,"line":191},[67,164610,631],{"emptyLinePlaceholder":630},[67,164612,164613,164615,164618,164620],{"class":69,"line":202},[67,164614,1626],{"class":77},[67,164616,164617],{"class":73},"(names[",[67,164619,78],{"class":77},[67,164621,6476],{"class":73},[67,164623,164624,164626,164628,164630],{"class":69,"line":641},[67,164625,1626],{"class":77},[67,164627,164617],{"class":73},[67,164629,2209],{"class":77},[67,164631,6476],{"class":73},[67,164633,164634,164636,164638,164640],{"class":69,"line":655},[67,164635,1626],{"class":77},[67,164637,164617],{"class":73},[67,164639,2077],{"class":77},[67,164641,6476],{"class":73},[19,164643,164644],{},"反向索引从 -1 开始：",[58,164646,164648],{"className":60,"code":164647,"language":62,"meta":63,"style":63},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[32,164649,164650,164666],{"__ignoreMap":63},[67,164651,164652,164654,164656,164658,164660,164663],{"class":69,"line":70},[67,164653,1626],{"class":77},[67,164655,164617],{"class":73},[67,164657,1863],{"class":84},[67,164659,2209],{"class":77},[67,164661,164662],{"class":73},"])  ",[67,164664,164665],{"class":2058},"# 小刚\n",[67,164667,164668,164670,164672,164674,164676,164678],{"class":69,"line":191},[67,164669,1626],{"class":77},[67,164671,164617],{"class":73},[67,164673,1863],{"class":84},[67,164675,2077],{"class":77},[67,164677,164662],{"class":73},[67,164679,164680],{"class":2058},"# 小红\n",[19,164682,164683],{},"索引越界会报错：",[58,164685,164687],{"className":60,"code":164686,"language":62,"meta":63,"style":63},"print(names[3])\n",[32,164688,164689],{"__ignoreMap":63},[67,164690,164691,164693,164695,164697],{"class":69,"line":70},[67,164692,1626],{"class":77},[67,164694,164617],{"class":73},[67,164696,2071],{"class":77},[67,164698,6476],{"class":73},[14,164700,164702],{"id":164701},"_64-列表常用方法","6.4 列表常用方法",[58,164704,164706],{"className":60,"code":164705,"language":62,"meta":63,"style":63},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[32,164707,164708,164724,164728,164737,164751,164765,164769],{"__ignoreMap":63},[67,164709,164710,164712,164714,164716,164718,164720,164722],{"class":69,"line":70},[67,164711,161818],{"class":73},[67,164713,85],{"class":84},[67,164715,53990],{"class":73},[67,164717,151326],{"class":114},[67,164719,1868],{"class":73},[67,164721,152374],{"class":114},[67,164723,35015],{"class":73},[67,164725,164726],{"class":69,"line":191},[67,164727,631],{"emptyLinePlaceholder":630},[67,164729,164730,164733,164735],{"class":69,"line":202},[67,164731,164732],{"class":73},"names.append(",[67,164734,161169],{"class":114},[67,164736,829],{"class":73},[67,164738,164739,164742,164744,164746,164749],{"class":69,"line":641},[67,164740,164741],{"class":73},"names.insert(",[67,164743,2209],{"class":77},[67,164745,1868],{"class":73},[67,164747,164748],{"class":114},"\"小李\"",[67,164750,829],{"class":73},[67,164752,164753,164756,164758,164760,164763],{"class":69,"line":655},[67,164754,164755],{"class":73},"names.extend([",[67,164757,10489],{"class":114},[67,164759,1868],{"class":73},[67,164761,164762],{"class":114},"\"小赵\"",[67,164764,6476],{"class":73},[67,164766,164767],{"class":69,"line":660},[67,164768,631],{"emptyLinePlaceholder":630},[67,164770,164771,164773],{"class":69,"line":665},[67,164772,1626],{"class":77},[67,164774,164775],{"class":73},"(names)\n",[19,164777,164778],{},"删除元素：",[58,164780,164782],{"className":60,"code":164781,"language":62,"meta":63,"style":63},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[32,164783,164784,164793,164803,164817,164829],{"__ignoreMap":63},[67,164785,164786,164789,164791],{"class":69,"line":70},[67,164787,164788],{"class":73},"names.remove(",[67,164790,152374],{"class":114},[67,164792,829],{"class":73},[67,164794,164795,164798,164800],{"class":69,"line":191},[67,164796,164797],{"class":73},"last ",[67,164799,85],{"class":84},[67,164801,164802],{"class":73}," names.pop()\n",[67,164804,164805,164808,164810,164813,164815],{"class":69,"line":202},[67,164806,164807],{"class":73},"first ",[67,164809,85],{"class":84},[67,164811,164812],{"class":73}," names.pop(",[67,164814,78],{"class":77},[67,164816,829],{"class":73},[67,164818,164819,164822,164825,164827],{"class":69,"line":641},[67,164820,164821],{"class":84},"del",[67,164823,164824],{"class":73}," names[",[67,164826,78],{"class":77},[67,164828,35015],{"class":73},[67,164830,164831],{"class":69,"line":655},[67,164832,164833],{"class":73},"names.clear()\n",[19,164835,164836],{},"查询和统计：",[58,164838,164840],{"className":60,"code":164839,"language":62,"meta":63,"style":63},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[32,164841,164842,164870,164874,164885,164896],{"__ignoreMap":63},[67,164843,164844,164846,164848,164850,164852,164854,164856,164858,164860,164862,164864,164866,164868],{"class":69,"line":70},[67,164845,164521],{"class":73},[67,164847,85],{"class":84},[67,164849,53990],{"class":73},[67,164851,2209],{"class":77},[67,164853,1868],{"class":73},[67,164855,2077],{"class":77},[67,164857,1868],{"class":73},[67,164859,2071],{"class":77},[67,164861,1868],{"class":73},[67,164863,2077],{"class":77},[67,164865,1868],{"class":73},[67,164867,1047],{"class":77},[67,164869,35015],{"class":73},[67,164871,164872],{"class":69,"line":191},[67,164873,631],{"emptyLinePlaceholder":630},[67,164875,164876,164878,164881,164883],{"class":69,"line":202},[67,164877,1626],{"class":77},[67,164879,164880],{"class":73},"(numbers.index(",[67,164882,2071],{"class":77},[67,164884,1050],{"class":73},[67,164886,164887,164889,164892,164894],{"class":69,"line":641},[67,164888,1626],{"class":77},[67,164890,164891],{"class":73},"(numbers.count(",[67,164893,2077],{"class":77},[67,164895,1050],{"class":73},[67,164897,164898,164900,164902,164904],{"class":69,"line":655},[67,164899,1626],{"class":77},[67,164901,854],{"class":73},[67,164903,9174],{"class":77},[67,164905,164906],{"class":73},"(numbers))\n",[19,164908,164909],{},"排序：",[58,164911,164913],{"className":60,"code":164912,"language":62,"meta":63,"style":63},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[32,164914,164915,164939,164943,164948,164955,164959,164973,164979,164983,164988],{"__ignoreMap":63},[67,164916,164917,164919,164921,164923,164925,164927,164929,164931,164933,164935,164937],{"class":69,"line":70},[67,164918,164521],{"class":73},[67,164920,85],{"class":84},[67,164922,53990],{"class":73},[67,164924,2071],{"class":77},[67,164926,1868],{"class":73},[67,164928,2209],{"class":77},[67,164930,1868],{"class":73},[67,164932,2310],{"class":77},[67,164934,1868],{"class":73},[67,164936,2077],{"class":77},[67,164938,35015],{"class":73},[67,164940,164941],{"class":69,"line":191},[67,164942,631],{"emptyLinePlaceholder":630},[67,164944,164945],{"class":69,"line":202},[67,164946,164947],{"class":73},"numbers.sort()\n",[67,164949,164950,164952],{"class":69,"line":641},[67,164951,1626],{"class":77},[67,164953,164954],{"class":73},"(numbers)\n",[67,164956,164957],{"class":69,"line":655},[67,164958,631],{"emptyLinePlaceholder":630},[67,164960,164961,164964,164967,164969,164971],{"class":69,"line":660},[67,164962,164963],{"class":73},"numbers.sort(",[67,164965,164966],{"class":7033},"reverse",[67,164968,85],{"class":84},[67,164970,33248],{"class":77},[67,164972,829],{"class":73},[67,164974,164975,164977],{"class":69,"line":665},[67,164976,1626],{"class":77},[67,164978,164954],{"class":73},[67,164980,164981],{"class":69,"line":677},[67,164982,631],{"emptyLinePlaceholder":630},[67,164984,164985],{"class":69,"line":683},[67,164986,164987],{"class":73},"numbers.reverse()\n",[67,164989,164990,164992],{"class":69,"line":689},[67,164991,1626],{"class":77},[67,164993,164954],{"class":73},[19,164995,164996,164999,165000,165003],{},[32,164997,164998],{},"sort()"," 会修改原列表，",[32,165001,165002],{},"sorted()"," 返回新列表。",[58,165005,165007],{"className":60,"code":165006,"language":62,"meta":63,"style":63},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[32,165008,165009,165033,165045,165049,165055],{"__ignoreMap":63},[67,165010,165011,165013,165015,165017,165019,165021,165023,165025,165027,165029,165031],{"class":69,"line":70},[67,165012,164521],{"class":73},[67,165014,85],{"class":84},[67,165016,53990],{"class":73},[67,165018,2071],{"class":77},[67,165020,1868],{"class":73},[67,165022,2209],{"class":77},[67,165024,1868],{"class":73},[67,165026,2310],{"class":77},[67,165028,1868],{"class":73},[67,165030,2077],{"class":77},[67,165032,35015],{"class":73},[67,165034,165035,165038,165040,165043],{"class":69,"line":191},[67,165036,165037],{"class":73},"new_numbers ",[67,165039,85],{"class":84},[67,165041,165042],{"class":77}," sorted",[67,165044,164954],{"class":73},[67,165046,165047],{"class":69,"line":202},[67,165048,631],{"emptyLinePlaceholder":630},[67,165050,165051,165053],{"class":69,"line":641},[67,165052,1626],{"class":77},[67,165054,164954],{"class":73},[67,165056,165057,165059],{"class":69,"line":655},[67,165058,1626],{"class":77},[67,165060,165061],{"class":73},"(new_numbers)\n",[14,165063,165065],{"id":165064},"_65-列表遍历","6.5 列表遍历",[58,165067,165069],{"className":60,"code":165068,"language":62,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[32,165070,165071,165091,165095,165105],{"__ignoreMap":63},[67,165072,165073,165075,165077,165079,165081,165083,165085,165087,165089],{"class":69,"line":70},[67,165074,161818],{"class":73},[67,165076,85],{"class":84},[67,165078,53990],{"class":73},[67,165080,151326],{"class":114},[67,165082,1868],{"class":73},[67,165084,152374],{"class":114},[67,165086,1868],{"class":73},[67,165088,161169],{"class":114},[67,165090,35015],{"class":73},[67,165092,165093],{"class":69,"line":191},[67,165094,631],{"emptyLinePlaceholder":630},[67,165096,165097,165099,165101,165103],{"class":69,"line":202},[67,165098,1512],{"class":84},[67,165100,161854],{"class":73},[67,165102,941],{"class":84},[67,165104,161859],{"class":73},[67,165106,165107,165109],{"class":69,"line":641},[67,165108,851],{"class":77},[67,165110,152098],{"class":73},[19,165112,165113],{},"需要索引时：",[58,165115,165117],{"className":60,"code":165116,"language":62,"meta":63,"style":63},"for index, name in enumerate(names):\n    print(index, name)\n",[32,165118,165119,165133],{"__ignoreMap":63},[67,165120,165121,165123,165126,165128,165130],{"class":69,"line":70},[67,165122,1512],{"class":84},[67,165124,165125],{"class":73}," index, name ",[67,165127,941],{"class":84},[67,165129,33378],{"class":77},[67,165131,165132],{"class":73},"(names):\n",[67,165134,165135,165137],{"class":69,"line":191},[67,165136,851],{"class":77},[67,165138,165139],{"class":73},"(index, name)\n",[19,165141,165142],{},"统计总分：",[58,165144,165146],{"className":60,"code":165145,"language":62,"meta":63,"style":63},"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",[32,165147,165148,165173,165181,165185,165196,165204,165208,165225],{"__ignoreMap":63},[67,165149,165150,165153,165155,165157,165159,165161,165163,165165,165167,165169,165171],{"class":69,"line":70},[67,165151,165152],{"class":73},"scores ",[67,165154,85],{"class":84},[67,165156,53990],{"class":73},[67,165158,2851],{"class":77},[67,165160,1868],{"class":73},[67,165162,2725],{"class":77},[67,165164,1868],{"class":73},[67,165166,2246],{"class":77},[67,165168,1868],{"class":73},[67,165170,2550],{"class":77},[67,165172,35015],{"class":73},[67,165174,165175,165177,165179],{"class":69,"line":191},[67,165176,158698],{"class":73},[67,165178,85],{"class":84},[67,165180,49101],{"class":77},[67,165182,165183],{"class":69,"line":202},[67,165184,631],{"emptyLinePlaceholder":630},[67,165186,165187,165189,165191,165193],{"class":69,"line":641},[67,165188,1512],{"class":84},[67,165190,159221],{"class":73},[67,165192,941],{"class":84},[67,165194,165195],{"class":73}," scores:\n",[67,165197,165198,165200,165202],{"class":69,"line":655},[67,165199,160745],{"class":73},[67,165201,11283],{"class":84},[67,165203,3433],{"class":73},[67,165205,165206],{"class":69,"line":660},[67,165207,631],{"emptyLinePlaceholder":630},[67,165209,165210,165213,165215,165218,165220,165222],{"class":69,"line":665},[67,165211,165212],{"class":73},"avg ",[67,165214,85],{"class":84},[67,165216,165217],{"class":73}," total ",[67,165219,2573],{"class":84},[67,165221,9147],{"class":77},[67,165223,165224],{"class":73},"(scores)\n",[67,165226,165227,165229,165231,165233,165236,165238,165241,165243,165245,165247],{"class":69,"line":677},[67,165228,1626],{"class":77},[67,165230,854],{"class":73},[67,165232,2052],{"class":84},[67,165234,165235],{"class":114},"\"平均分:",[67,165237,2885],{"class":77},[67,165239,165240],{"class":73},"avg",[67,165242,158597],{"class":84},[67,165244,2934],{"class":77},[67,165246,2243],{"class":114},[67,165248,829],{"class":73},[14,165250,165252],{"id":165251},"_66-元组tuple","6.6 元组tuple",[19,165254,165255],{},"元组和列表类似，但不可修改。",[58,165257,165259],{"className":60,"code":165258,"language":62,"meta":63,"style":63},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[32,165260,165261,165278],{"__ignoreMap":63},[67,165262,165263,165266,165268,165270,165272,165274,165276],{"class":69,"line":70},[67,165264,165265],{"class":73},"point ",[67,165267,85],{"class":84},[67,165269,3505],{"class":73},[67,165271,2437],{"class":77},[67,165273,1868],{"class":73},[67,165275,2689],{"class":77},[67,165277,829],{"class":73},[67,165279,165280,165282,165284,165286,165288,165290,165292,165294,165296],{"class":69,"line":191},[67,165281,117752],{"class":73},[67,165283,85],{"class":84},[67,165285,3505],{"class":73},[67,165287,151326],{"class":114},[67,165289,1868],{"class":73},[67,165291,2639],{"class":77},[67,165293,1868],{"class":73},[67,165295,71029],{"class":114},[67,165297,829],{"class":73},[19,165299,165300],{},"单元素元组必须加逗号：",[58,165302,165304],{"className":60,"code":165303,"language":62,"meta":63,"style":63},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[32,165305,165306,165320,165333,165337,165351],{"__ignoreMap":63},[67,165307,165308,165311,165313,165315,165317],{"class":69,"line":70},[67,165309,165310],{"class":73},"t1 ",[67,165312,85],{"class":84},[67,165314,3505],{"class":73},[67,165316,2437],{"class":77},[67,165318,165319],{"class":73},",)\n",[67,165321,165322,165325,165327,165329,165331],{"class":69,"line":191},[67,165323,165324],{"class":73},"t2 ",[67,165326,85],{"class":84},[67,165328,3505],{"class":73},[67,165330,2437],{"class":77},[67,165332,829],{"class":73},[67,165334,165335],{"class":69,"line":202},[67,165336,631],{"emptyLinePlaceholder":630},[67,165338,165339,165341,165343,165345,165348],{"class":69,"line":641},[67,165340,1626],{"class":77},[67,165342,854],{"class":73},[67,165344,104791],{"class":77},[67,165346,165347],{"class":73},"(t1))  ",[67,165349,165350],{"class":2058},"# tuple\n",[67,165352,165353,165355,165357,165359,165362],{"class":69,"line":655},[67,165354,1626],{"class":77},[67,165356,854],{"class":73},[67,165358,104791],{"class":77},[67,165360,165361],{"class":73},"(t2))  ",[67,165363,165364],{"class":2058},"# int\n",[19,165366,165367],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165369,165371],{"id":165370},"_67-字符串str","6.7 字符串str",[19,165373,165374],{},"字符串也是序列，可以索引、切片和遍历。",[58,165376,165378],{"className":60,"code":165377,"language":62,"meta":63,"style":63},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[32,165379,165380,165388,165392,165403,165415,165419,165430],{"__ignoreMap":63},[67,165381,165382,165384,165386],{"class":69,"line":70},[67,165383,157882],{"class":73},[67,165385,85],{"class":84},[67,165387,161119],{"class":114},[67,165389,165390],{"class":69,"line":191},[67,165391,631],{"emptyLinePlaceholder":630},[67,165393,165394,165396,165399,165401],{"class":69,"line":202},[67,165395,1626],{"class":77},[67,165397,165398],{"class":73},"(text[",[67,165400,78],{"class":77},[67,165402,6476],{"class":73},[67,165404,165405,165407,165409,165411,165413],{"class":69,"line":641},[67,165406,1626],{"class":77},[67,165408,165398],{"class":73},[67,165410,1863],{"class":84},[67,165412,2209],{"class":77},[67,165414,6476],{"class":73},[67,165416,165417],{"class":69,"line":655},[67,165418,631],{"emptyLinePlaceholder":630},[67,165420,165421,165423,165425,165427],{"class":69,"line":660},[67,165422,1512],{"class":84},[67,165424,161130],{"class":73},[67,165426,941],{"class":84},[67,165428,165429],{"class":73}," text:\n",[67,165431,165432,165434],{"class":69,"line":665},[67,165433,851],{"class":77},[67,165435,161141],{"class":73},[19,165437,165438],{},"字符串不可变：",[58,165440,165442],{"className":60,"code":165441,"language":62,"meta":63,"style":63},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[32,165443,165444,165452],{"__ignoreMap":63},[67,165445,165446,165448,165450],{"class":69,"line":70},[67,165447,157882],{"class":73},[67,165449,85],{"class":84},[67,165451,161119],{"class":114},[67,165453,165454,165457,165459,165461,165463,165466],{"class":69,"line":191},[67,165455,165456],{"class":73},"text[",[67,165458,78],{"class":77},[67,165460,81],{"class":73},[67,165462,85],{"class":84},[67,165464,165465],{"class":114}," \"P\"",[67,165467,165468],{"class":2058},"  # 报错\n",[19,165470,165471],{},"如果要得到新字符串：",[58,165473,165475],{"className":60,"code":165474,"language":62,"meta":63,"style":63},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[32,165476,165477,165485,165503],{"__ignoreMap":63},[67,165478,165479,165481,165483],{"class":69,"line":70},[67,165480,157882],{"class":73},[67,165482,85],{"class":84},[67,165484,161119],{"class":114},[67,165486,165487,165489,165491,165493,165495,165498,165500],{"class":69,"line":191},[67,165488,157882],{"class":73},[67,165490,85],{"class":84},[67,165492,165465],{"class":114},[67,165494,47334],{"class":84},[67,165496,165497],{"class":73}," text[",[67,165499,2209],{"class":77},[67,165501,165502],{"class":73},":]\n",[67,165504,165505,165507],{"class":69,"line":202},[67,165506,1626],{"class":77},[67,165508,165509],{"class":73},"(text)\n",[14,165511,165513],{"id":165512},"_68-切片","6.8 切片",[19,165515,165516],{},"切片用于从序列中取一部分。",[58,165518,165520],{"className":60,"code":165519,"language":62,"meta":63,"style":63},"序列[开始:结束:步长]\n",[32,165521,165522],{"__ignoreMap":63},[67,165523,165524],{"class":69,"line":70},[67,165525,165519],{"class":73},[19,165527,165528],{},"结束位置不包含。",[58,165530,165532],{"className":60,"code":165531,"language":62,"meta":63,"style":63},"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",[32,165533,165534,165571,165575,165594,165609,165623,165637],{"__ignoreMap":63},[67,165535,165536,165539,165541,165543,165545,165547,165549,165551,165553,165555,165557,165559,165561,165563,165565,165567,165569],{"class":69,"line":70},[67,165537,165538],{"class":73},"nums ",[67,165540,85],{"class":84},[67,165542,53990],{"class":73},[67,165544,78],{"class":77},[67,165546,1868],{"class":73},[67,165548,2209],{"class":77},[67,165550,1868],{"class":73},[67,165552,2077],{"class":77},[67,165554,1868],{"class":73},[67,165556,2071],{"class":77},[67,165558,1868],{"class":73},[67,165560,1047],{"class":77},[67,165562,1868],{"class":73},[67,165564,2310],{"class":77},[67,165566,1868],{"class":73},[67,165568,2335],{"class":77},[67,165570,35015],{"class":73},[67,165572,165573],{"class":69,"line":191},[67,165574,631],{"emptyLinePlaceholder":630},[67,165576,165577,165579,165582,165584,165586,165588,165591],{"class":69,"line":202},[67,165578,1626],{"class":77},[67,165580,165581],{"class":73},"(nums[",[67,165583,2209],{"class":77},[67,165585,2848],{"class":73},[67,165587,1047],{"class":77},[67,165589,165590],{"class":73},"])    ",[67,165592,165593],{"class":2058},"# [1, 2, 3]\n",[67,165595,165596,165598,165601,165603,165606],{"class":69,"line":641},[67,165597,1626],{"class":77},[67,165599,165600],{"class":73},"(nums[:",[67,165602,2071],{"class":77},[67,165604,165605],{"class":73},"])     ",[67,165607,165608],{"class":2058},"# [0, 1, 2]\n",[67,165610,165611,165613,165615,165617,165620],{"class":69,"line":655},[67,165612,1626],{"class":77},[67,165614,165581],{"class":73},[67,165616,2071],{"class":77},[67,165618,165619],{"class":73},":])     ",[67,165621,165622],{"class":2058},"# [3, 4, 5, 6]\n",[67,165624,165625,165627,165630,165632,165634],{"class":69,"line":660},[67,165626,1626],{"class":77},[67,165628,165629],{"class":73},"(nums[::",[67,165631,2077],{"class":77},[67,165633,165590],{"class":73},[67,165635,165636],{"class":2058},"# [0, 2, 4, 6]\n",[67,165638,165639,165641,165643,165645,165647,165650],{"class":69,"line":665},[67,165640,1626],{"class":77},[67,165642,165629],{"class":73},[67,165644,1863],{"class":84},[67,165646,2209],{"class":77},[67,165648,165649],{"class":73},"])   ",[67,165651,165652],{"class":2058},"# 反转\n",[19,165654,165655],{},"字符串切片：",[58,165657,165659],{"className":60,"code":165658,"language":62,"meta":63,"style":63},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[32,165660,165661,165670,165684],{"__ignoreMap":63},[67,165662,165663,165665,165667],{"class":69,"line":70},[67,165664,157882],{"class":73},[67,165666,85],{"class":84},[67,165668,165669],{"class":114}," \"abcdef\"\n",[67,165671,165672,165674,165676,165678,165680,165682],{"class":69,"line":191},[67,165673,1626],{"class":77},[67,165675,165398],{"class":73},[67,165677,2209],{"class":77},[67,165679,2848],{"class":73},[67,165681,1047],{"class":77},[67,165683,6476],{"class":73},[67,165685,165686,165688,165691,165693,165695],{"class":69,"line":202},[67,165687,1626],{"class":77},[67,165689,165690],{"class":73},"(text[::",[67,165692,1863],{"class":84},[67,165694,2209],{"class":77},[67,165696,6476],{"class":73},[14,165698,165700],{"id":165699},"_69-集合set","6.9 集合set",[19,165702,165703],{},"集合特点：",[26,165705,165706,165709,165712],{},[29,165707,165708],{},"无序。",[29,165710,165711],{},"元素不重复。",[29,165713,165714],{},"可以做交集、并集、差集。",[58,165716,165718],{"className":60,"code":165717,"language":62,"meta":63,"style":63},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[32,165719,165720,165748],{"__ignoreMap":63},[67,165721,165722,165724,165726,165728,165730,165732,165734,165736,165738,165740,165742,165744,165746],{"class":69,"line":70},[67,165723,165538],{"class":73},[67,165725,85],{"class":84},[67,165727,6267],{"class":73},[67,165729,2209],{"class":77},[67,165731,1868],{"class":73},[67,165733,2077],{"class":77},[67,165735,1868],{"class":73},[67,165737,2071],{"class":77},[67,165739,1868],{"class":73},[67,165741,2071],{"class":77},[67,165743,1868],{"class":73},[67,165745,1047],{"class":77},[67,165747,3419],{"class":73},[67,165749,165750,165752],{"class":69,"line":191},[67,165751,1626],{"class":77},[67,165753,165754],{"class":73},"(nums)\n",[19,165756,165757],{},"创建空集合：",[58,165759,165761],{"className":60,"code":165760,"language":62,"meta":63,"style":63},"s = set()\n",[32,165762,165763],{"__ignoreMap":63},[67,165764,165765,165767,165769,165771],{"class":69,"line":70},[67,165766,12379],{"class":73},[67,165768,85],{"class":84},[67,165770,121160],{"class":77},[67,165772,3809],{"class":73},[19,165774,10831,165775,165777],{},[32,165776,34228],{}," 是空字典，不是空集合。",[19,165779,165780],{},"集合常用操作：",[58,165782,165784],{"className":60,"code":165783,"language":62,"meta":63,"style":63},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[32,165785,165786,165806,165810,165819,165828,165837],{"__ignoreMap":63},[67,165787,165788,165790,165792,165794,165796,165798,165800,165802,165804],{"class":69,"line":70},[67,165789,12379],{"class":73},[67,165791,85],{"class":84},[67,165793,6267],{"class":73},[67,165795,2209],{"class":77},[67,165797,1868],{"class":73},[67,165799,2077],{"class":77},[67,165801,1868],{"class":73},[67,165803,2071],{"class":77},[67,165805,3419],{"class":73},[67,165807,165808],{"class":69,"line":191},[67,165809,631],{"emptyLinePlaceholder":630},[67,165811,165812,165815,165817],{"class":69,"line":202},[67,165813,165814],{"class":73},"s.add(",[67,165816,1047],{"class":77},[67,165818,829],{"class":73},[67,165820,165821,165824,165826],{"class":69,"line":641},[67,165822,165823],{"class":73},"s.remove(",[67,165825,2077],{"class":77},[67,165827,829],{"class":73},[67,165829,165830,165833,165835],{"class":69,"line":655},[67,165831,165832],{"class":73},"s.discard(",[67,165834,2437],{"class":77},[67,165836,829],{"class":73},[67,165838,165839,165841,165843,165845],{"class":69,"line":660},[67,165840,1626],{"class":77},[67,165842,854],{"class":73},[67,165844,9174],{"class":77},[67,165846,165847],{"class":73},"(s))\n",[19,165849,165850],{},"交并差：",[58,165852,165854],{"className":60,"code":165853,"language":62,"meta":63,"style":63},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[32,165855,165856,165876,165896,165900,165915,165928],{"__ignoreMap":63},[67,165857,165858,165860,165862,165864,165866,165868,165870,165872,165874],{"class":69,"line":70},[67,165859,12719],{"class":73},[67,165861,85],{"class":84},[67,165863,6267],{"class":73},[67,165865,2209],{"class":77},[67,165867,1868],{"class":73},[67,165869,2077],{"class":77},[67,165871,1868],{"class":73},[67,165873,2071],{"class":77},[67,165875,3419],{"class":73},[67,165877,165878,165880,165882,165884,165886,165888,165890,165892,165894],{"class":69,"line":191},[67,165879,12745],{"class":73},[67,165881,85],{"class":84},[67,165883,6267],{"class":73},[67,165885,2071],{"class":77},[67,165887,1868],{"class":73},[67,165889,1047],{"class":77},[67,165891,1868],{"class":73},[67,165893,2310],{"class":77},[67,165895,3419],{"class":73},[67,165897,165898],{"class":69,"line":202},[67,165899,631],{"emptyLinePlaceholder":630},[67,165901,165902,165904,165907,165909,165912],{"class":69,"line":641},[67,165903,1626],{"class":77},[67,165905,165906],{"class":73},"(a ",[67,165908,2344],{"class":84},[67,165910,165911],{"class":73}," b)  ",[67,165913,165914],{"class":2058},"# 交集\n",[67,165916,165917,165919,165921,165923,165925],{"class":69,"line":655},[67,165918,1626],{"class":77},[67,165920,165906],{"class":73},[67,165922,2909],{"class":84},[67,165924,165911],{"class":73},[67,165926,165927],{"class":2058},"# 并集\n",[67,165929,165930,165932,165934,165936,165938],{"class":69,"line":660},[67,165931,1626],{"class":77},[67,165933,165906],{"class":73},[67,165935,1863],{"class":84},[67,165937,165911],{"class":73},[67,165939,165940],{"class":2058},"# 差集\n",[14,165942,165944],{"id":165943},"_610-字典dict","6.10 字典dict",[19,165946,165947],{},"字典通过 key-value 保存数据。",[58,165949,165951],{"className":60,"code":165950,"language":62,"meta":63,"style":63},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[32,165952,165953,165961,165971,165982,165992],{"__ignoreMap":63},[67,165954,165955,165957,165959],{"class":69,"line":70},[67,165956,150919],{"class":73},[67,165958,85],{"class":84},[67,165960,17369],{"class":73},[67,165962,165963,165965,165967,165969],{"class":69,"line":191},[67,165964,148458],{"class":114},[67,165966,53203],{"class":73},[67,165968,151326],{"class":114},[67,165970,33238],{"class":73},[67,165972,165973,165976,165978,165980],{"class":69,"line":202},[67,165974,165975],{"class":114},"    \"age\"",[67,165977,53203],{"class":73},[67,165979,2639],{"class":77},[67,165981,33238],{"class":73},[67,165983,165984,165987,165989],{"class":69,"line":641},[67,165985,165986],{"class":114},"    \"score\"",[67,165988,53203],{"class":73},[67,165990,165991],{"class":77},"95\n",[67,165993,165994],{"class":69,"line":655},[67,165995,3419],{"class":73},[19,165997,165998],{},"获取值：",[58,166000,166002],{"className":60,"code":166001,"language":62,"meta":63,"style":63},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[32,166003,166004,166015],{"__ignoreMap":63},[67,166005,166006,166008,166011,166013],{"class":69,"line":70},[67,166007,1626],{"class":77},[67,166009,166010],{"class":73},"(student[",[67,166012,64439],{"class":114},[67,166014,6476],{"class":73},[67,166016,166017,166019,166022,166024],{"class":69,"line":191},[67,166018,1626],{"class":77},[67,166020,166021],{"class":73},"(student.get(",[67,166023,64439],{"class":114},[67,166025,1050],{"class":73},[19,166027,17185],{},[58,166029,166031],{"className":60,"code":166030,"language":62,"meta":63,"style":63},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[32,166032,166033,166046],{"__ignoreMap":63},[67,166034,166035,166037,166040,166043],{"class":69,"line":70},[67,166036,154297],{"class":73},[67,166038,166039],{"class":114},"\"address\"",[67,166041,166042],{"class":73},"]     ",[67,166044,166045],{"class":2058},"# key不存在会报错\n",[67,166047,166048,166051,166053,166055],{"class":69,"line":191},[67,166049,166050],{"class":73},"student.get(",[67,166052,166039],{"class":114},[67,166054,15512],{"class":73},[67,166056,166057],{"class":2058},"# key不存在返回None\n",[19,166059,166060],{},"设置默认值：",[58,166062,166064],{"className":60,"code":166063,"language":62,"meta":63,"style":63},"print(student.get(\"address\", \"未知\"))\n",[32,166065,166066],{"__ignoreMap":63},[67,166067,166068,166070,166072,166074,166076,166079],{"class":69,"line":70},[67,166069,1626],{"class":77},[67,166071,166021],{"class":73},[67,166073,166039],{"class":114},[67,166075,1868],{"class":73},[67,166077,166078],{"class":114},"\"未知\"",[67,166080,1050],{"class":73},[19,166082,166083],{},"新增和修改：",[58,166085,166087],{"className":60,"code":166086,"language":62,"meta":63,"style":63},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[32,166088,166089,166102],{"__ignoreMap":63},[67,166090,166091,166093,166095,166097,166099],{"class":69,"line":70},[67,166092,154297],{"class":73},[67,166094,70884],{"class":114},[67,166096,81],{"class":73},[67,166098,85],{"class":84},[67,166100,166101],{"class":77}," 19\n",[67,166103,166104,166106,166108,166110,166112],{"class":69,"line":191},[67,166105,154297],{"class":73},[67,166107,166039],{"class":114},[67,166109,81],{"class":73},[67,166111,85],{"class":84},[67,166113,166114],{"class":114}," \"北京\"\n",[19,166116,166117],{},"删除：",[58,166119,166121],{"className":60,"code":166120,"language":62,"meta":63,"style":63},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[32,166122,166123,166136,166146],{"__ignoreMap":63},[67,166124,166125,166127,166129,166132,166134],{"class":69,"line":70},[67,166126,156796],{"class":73},[67,166128,85],{"class":84},[67,166130,166131],{"class":73}," student.pop(",[67,166133,152910],{"class":114},[67,166135,829],{"class":73},[67,166137,166138,166140,166142,166144],{"class":69,"line":191},[67,166139,164821],{"class":84},[67,166141,153587],{"class":73},[67,166143,70884],{"class":114},[67,166145,35015],{"class":73},[67,166147,166148],{"class":69,"line":202},[67,166149,166150],{"class":73},"student.clear()\n",[14,166152,166154],{"id":166153},"_611-字典遍历","6.11 字典遍历",[19,166156,166157],{},"遍历 key：",[58,166159,166161],{"className":60,"code":166160,"language":62,"meta":63,"style":63},"for key in student:\n    print(key, student[key])\n",[32,166162,166163,166175],{"__ignoreMap":63},[67,166164,166165,166167,166170,166172],{"class":69,"line":70},[67,166166,1512],{"class":84},[67,166168,166169],{"class":73}," key ",[67,166171,941],{"class":84},[67,166173,166174],{"class":73}," student:\n",[67,166176,166177,166179],{"class":69,"line":191},[67,166178,851],{"class":77},[67,166180,166181],{"class":73},"(key, student[key])\n",[19,166183,166184],{},"遍历 value：",[58,166186,166188],{"className":60,"code":166187,"language":62,"meta":63,"style":63},"for value in student.values():\n    print(value)\n",[32,166189,166190,166202],{"__ignoreMap":63},[67,166191,166192,166194,166197,166199],{"class":69,"line":70},[67,166193,1512],{"class":84},[67,166195,166196],{"class":73}," value ",[67,166198,941],{"class":84},[67,166200,166201],{"class":73}," student.values():\n",[67,166203,166204,166206],{"class":69,"line":191},[67,166205,851],{"class":77},[67,166207,166208],{"class":73},"(value)\n",[19,166210,166211],{},"遍历 key 和 value：",[58,166213,166215],{"className":60,"code":166214,"language":62,"meta":63,"style":63},"for key, value in student.items():\n    print(key, value)\n",[32,166216,166217,166229],{"__ignoreMap":63},[67,166218,166219,166221,166224,166226],{"class":69,"line":70},[67,166220,1512],{"class":84},[67,166222,166223],{"class":73}," key, value ",[67,166225,941],{"class":84},[67,166227,166228],{"class":73}," student.items():\n",[67,166230,166231,166233],{"class":69,"line":191},[67,166232,851],{"class":77},[67,166234,166235],{"class":73},"(key, value)\n",[14,166237,166239],{"id":166238},"_612-嵌套容器","6.12 嵌套容器",[19,166241,166242],{},"列表中保存字典，是项目中最常见的结构之一。",[58,166244,166246],{"className":60,"code":166245,"language":62,"meta":63,"style":63},"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",[32,166247,166248,166256,166284,166312,166340,166344,166348,166358],{"__ignoreMap":63},[67,166249,166250,166252,166254],{"class":69,"line":70},[67,166251,161154],{"class":73},[67,166253,85],{"class":84},[67,166255,57208],{"class":73},[67,166257,166258,166260,166262,166264,166266,166268,166270,166272,166274,166276,166278,166280,166282],{"class":69,"line":191},[67,166259,149823],{"class":73},[67,166261,64439],{"class":114},[67,166263,53203],{"class":73},[67,166265,151326],{"class":114},[67,166267,1868],{"class":73},[67,166269,70884],{"class":114},[67,166271,53203],{"class":73},[67,166273,2639],{"class":77},[67,166275,1868],{"class":73},[67,166277,152910],{"class":114},[67,166279,53203],{"class":73},[67,166281,2977],{"class":77},[67,166283,6749],{"class":73},[67,166285,166286,166288,166290,166292,166294,166296,166298,166300,166302,166304,166306,166308,166310],{"class":69,"line":202},[67,166287,149823],{"class":73},[67,166289,64439],{"class":114},[67,166291,53203],{"class":73},[67,166293,152374],{"class":114},[67,166295,1868],{"class":73},[67,166297,70884],{"class":114},[67,166299,53203],{"class":73},[67,166301,2614],{"class":77},[67,166303,1868],{"class":73},[67,166305,152910],{"class":114},[67,166307,53203],{"class":73},[67,166309,2800],{"class":77},[67,166311,6749],{"class":73},[67,166313,166314,166316,166318,166320,166322,166324,166326,166328,166330,166332,166334,166336,166338],{"class":69,"line":641},[67,166315,149823],{"class":73},[67,166317,64439],{"class":114},[67,166319,53203],{"class":73},[67,166321,161169],{"class":114},[67,166323,1868],{"class":73},[67,166325,70884],{"class":114},[67,166327,53203],{"class":73},[67,166329,2664],{"class":77},[67,166331,1868],{"class":73},[67,166333,152910],{"class":114},[67,166335,53203],{"class":73},[67,166337,2397],{"class":77},[67,166339,6749],{"class":73},[67,166341,166342],{"class":69,"line":655},[67,166343,35015],{"class":73},[67,166345,166346],{"class":69,"line":660},[67,166347,631],{"emptyLinePlaceholder":630},[67,166349,166350,166352,166354,166356],{"class":69,"line":665},[67,166351,1512],{"class":84},[67,166353,153575],{"class":73},[67,166355,941],{"class":84},[67,166357,153580],{"class":73},[67,166359,166360,166362,166364,166366,166369,166371],{"class":69,"line":677},[67,166361,851],{"class":77},[67,166363,166010],{"class":73},[67,166365,64439],{"class":114},[67,166367,166368],{"class":73},"], student[",[67,166370,152910],{"class":114},[67,166372,6476],{"class":73},[19,166374,166375],{},"统计平均分：",[58,166377,166379],{"className":60,"code":166378,"language":62,"meta":63,"style":63},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[32,166380,166381,166389,166393,166403,166415,166419,166434],{"__ignoreMap":63},[67,166382,166383,166385,166387],{"class":69,"line":70},[67,166384,158698],{"class":73},[67,166386,85],{"class":84},[67,166388,49101],{"class":77},[67,166390,166391],{"class":69,"line":191},[67,166392,631],{"emptyLinePlaceholder":630},[67,166394,166395,166397,166399,166401],{"class":69,"line":202},[67,166396,1512],{"class":84},[67,166398,153575],{"class":73},[67,166400,941],{"class":84},[67,166402,153580],{"class":73},[67,166404,166405,166407,166409,166411,166413],{"class":69,"line":641},[67,166406,160745],{"class":73},[67,166408,11283],{"class":84},[67,166410,153587],{"class":73},[67,166412,152910],{"class":114},[67,166414,35015],{"class":73},[67,166416,166417],{"class":69,"line":655},[67,166418,631],{"emptyLinePlaceholder":630},[67,166420,166421,166423,166425,166427,166429,166431],{"class":69,"line":660},[67,166422,165212],{"class":73},[67,166424,85],{"class":84},[67,166426,165217],{"class":73},[67,166428,2573],{"class":84},[67,166430,9147],{"class":77},[67,166432,166433],{"class":73},"(students)\n",[67,166435,166436,166438,166440,166442,166444,166446,166448,166450,166452,166454],{"class":69,"line":665},[67,166437,1626],{"class":77},[67,166439,854],{"class":73},[67,166441,2052],{"class":84},[67,166443,165235],{"class":114},[67,166445,2885],{"class":77},[67,166447,165240],{"class":73},[67,166449,158597],{"class":84},[67,166451,2934],{"class":77},[67,166453,2243],{"class":114},[67,166455,829],{"class":73},[19,166457,166458],{},"查找学生：",[58,166460,166462],{"className":60,"code":166461,"language":62,"meta":63,"style":63},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[32,166463,166464,166479,166483,166493,166507,166513,166517,166523],{"__ignoreMap":63},[67,166465,166466,166468,166470,166472,166474,166477],{"class":69,"line":70},[67,166467,113016],{"class":73},[67,166469,85],{"class":84},[67,166471,62366],{"class":77},[67,166473,854],{"class":73},[67,166475,166476],{"class":114},"\"请输入学生姓名:\"",[67,166478,829],{"class":73},[67,166480,166481],{"class":69,"line":191},[67,166482,631],{"emptyLinePlaceholder":630},[67,166484,166485,166487,166489,166491],{"class":69,"line":202},[67,166486,1512],{"class":84},[67,166488,153575],{"class":73},[67,166490,941],{"class":84},[67,166492,153580],{"class":73},[67,166494,166495,166497,166499,166501,166503,166505],{"class":69,"line":641},[67,166496,897],{"class":84},[67,166498,153587],{"class":73},[67,166500,64439],{"class":114},[67,166502,81],{"class":73},[67,166504,4774],{"class":84},[67,166506,161870],{"class":73},[67,166508,166509,166511],{"class":69,"line":655},[67,166510,34220],{"class":77},[67,166512,151480],{"class":73},[67,166514,166515],{"class":69,"line":660},[67,166516,33398],{"class":84},[67,166518,166519,166521],{"class":69,"line":665},[67,166520,3544],{"class":84},[67,166522,813],{"class":73},[67,166524,166525,166527,166529,166532],{"class":69,"line":677},[67,166526,851],{"class":77},[67,166528,854],{"class":73},[67,166530,166531],{"class":114},"\"没有找到\"",[67,166533,829],{"class":73},[14,166535,166537],{"id":166536},"_613-容器通用操作","6.13 容器通用操作",[19,166539,166540],{},"长度：",[58,166542,166544],{"className":60,"code":166543,"language":62,"meta":63,"style":63},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[32,166545,166546,166565,166575],{"__ignoreMap":63},[67,166547,166548,166550,166553,166555,166557,166559,166561,166563],{"class":69,"line":70},[67,166549,9174],{"class":77},[67,166551,166552],{"class":73},"([",[67,166554,2209],{"class":77},[67,166556,1868],{"class":73},[67,166558,2077],{"class":77},[67,166560,1868],{"class":73},[67,166562,2071],{"class":77},[67,166564,6476],{"class":73},[67,166566,166567,166569,166571,166573],{"class":69,"line":191},[67,166568,9174],{"class":77},[67,166570,854],{"class":73},[67,166572,157318],{"class":114},[67,166574,829],{"class":73},[67,166576,166577,166579,166582,166584,166586,166588],{"class":69,"line":202},[67,166578,9174],{"class":77},[67,166580,166581],{"class":73},"({",[67,166583,64439],{"class":114},[67,166585,53203],{"class":73},[67,166587,151326],{"class":114},[67,166589,166590],{"class":73},"})\n",[19,166592,166593],{},"最大最小：",[58,166595,166597],{"className":60,"code":166596,"language":62,"meta":63,"style":63},"max([1, 2, 3])\nmin([1, 2, 3])\n",[32,166598,166599,166617],{"__ignoreMap":63},[67,166600,166601,166603,166605,166607,166609,166611,166613,166615],{"class":69,"line":70},[67,166602,7832],{"class":77},[67,166604,166552],{"class":73},[67,166606,2209],{"class":77},[67,166608,1868],{"class":73},[67,166610,2077],{"class":77},[67,166612,1868],{"class":73},[67,166614,2071],{"class":77},[67,166616,6476],{"class":73},[67,166618,166619,166622,166624,166626,166628,166630,166632,166634],{"class":69,"line":191},[67,166620,166621],{"class":77},"min",[67,166623,166552],{"class":73},[67,166625,2209],{"class":77},[67,166627,1868],{"class":73},[67,166629,2077],{"class":77},[67,166631,1868],{"class":73},[67,166633,2071],{"class":77},[67,166635,6476],{"class":73},[19,166637,166638],{},"求和：",[58,166640,166642],{"className":60,"code":166641,"language":62,"meta":63,"style":63},"sum([1, 2, 3])\n",[32,166643,166644],{"__ignoreMap":63},[67,166645,166646,166649,166651,166653,166655,166657,166659,166661],{"class":69,"line":70},[67,166647,166648],{"class":77},"sum",[67,166650,166552],{"class":73},[67,166652,2209],{"class":77},[67,166654,1868],{"class":73},[67,166656,2077],{"class":77},[67,166658,1868],{"class":73},[67,166660,2071],{"class":77},[67,166662,6476],{"class":73},[19,166664,164909],{},[58,166666,166668],{"className":60,"code":166667,"language":62,"meta":63,"style":63},"sorted([3, 1, 2])\n",[32,166669,166670],{"__ignoreMap":63},[67,166671,166672,166675,166677,166679,166681,166683,166685,166687],{"class":69,"line":70},[67,166673,166674],{"class":77},"sorted",[67,166676,166552],{"class":73},[67,166678,2071],{"class":77},[67,166680,1868],{"class":73},[67,166682,2209],{"class":77},[67,166684,1868],{"class":73},[67,166686,2077],{"class":77},[67,166688,6476],{"class":73},[19,166690,166691],{},"类型转换：",[58,166693,166695],{"className":60,"code":166694,"language":62,"meta":63,"style":63},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[32,166696,166697,166707,166725],{"__ignoreMap":63},[67,166698,166699,166701,166703,166705],{"class":69,"line":70},[67,166700,155508],{"class":77},[67,166702,854],{"class":73},[67,166704,157318],{"class":114},[67,166706,829],{"class":73},[67,166708,166709,166711,166713,166715,166717,166719,166721,166723],{"class":69,"line":191},[67,166710,156703],{"class":77},[67,166712,166552],{"class":73},[67,166714,2209],{"class":77},[67,166716,1868],{"class":73},[67,166718,2077],{"class":77},[67,166720,1868],{"class":73},[67,166722,2071],{"class":77},[67,166724,6476],{"class":73},[67,166726,166727,166729,166731,166733,166735,166737,166739,166741,166743,166745],{"class":69,"line":202},[67,166728,156728],{"class":77},[67,166730,166552],{"class":73},[67,166732,2209],{"class":77},[67,166734,1868],{"class":73},[67,166736,2209],{"class":77},[67,166738,1868],{"class":73},[67,166740,2077],{"class":77},[67,166742,1868],{"class":73},[67,166744,2071],{"class":77},[67,166746,6476],{"class":73},[19,166748,166749],{},"成员判断：",[58,166751,166753],{"className":60,"code":166752,"language":62,"meta":63,"style":63},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[32,166754,166755,166772,166796],{"__ignoreMap":63},[67,166756,166757,166759,166761,166764,166767,166770],{"class":69,"line":70},[67,166758,1626],{"class":77},[67,166760,854],{"class":73},[67,166762,166763],{"class":114},"\"a\"",[67,166765,166766],{"class":84}," in",[67,166768,166769],{"class":114}," \"abc\"",[67,166771,829],{"class":73},[67,166773,166774,166776,166778,166780,166782,166784,166786,166788,166790,166792,166794],{"class":69,"line":191},[67,166775,1626],{"class":77},[67,166777,854],{"class":73},[67,166779,2209],{"class":77},[67,166781,166766],{"class":84},[67,166783,53990],{"class":73},[67,166785,2209],{"class":77},[67,166787,1868],{"class":73},[67,166789,2077],{"class":77},[67,166791,1868],{"class":73},[67,166793,2071],{"class":77},[67,166795,6476],{"class":73},[67,166797,166798,166800,166802,166804,166806,166808,166810,166812,166814],{"class":69,"line":202},[67,166799,1626],{"class":77},[67,166801,854],{"class":73},[67,166803,64439],{"class":114},[67,166805,166766],{"class":84},[67,166807,6267],{"class":73},[67,166809,64439],{"class":114},[67,166811,53203],{"class":73},[67,166813,151326],{"class":114},[67,166815,166590],{"class":73},[14,166817,166819],{"id":166818},"_614-推导式","6.14 推导式",[19,166821,166822],{},"推导式用于快速生成容器。",[19,166824,166825],{},"列表推导式：",[58,166827,166829],{"className":60,"code":166828,"language":62,"meta":63,"style":63},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[32,166830,166831,166858],{"__ignoreMap":63},[67,166832,166833,166835,166837,166840,166842,166844,166846,166848,166850,166852,166854,166856],{"class":69,"line":70},[67,166834,165538],{"class":73},[67,166836,85],{"class":84},[67,166838,166839],{"class":73}," [i ",[67,166841,1512],{"class":84},[67,166843,11244],{"class":73},[67,166845,941],{"class":84},[67,166847,944],{"class":77},[67,166849,854],{"class":73},[67,166851,2209],{"class":77},[67,166853,1868],{"class":73},[67,166855,2335],{"class":77},[67,166857,99057],{"class":73},[67,166859,166860,166862],{"class":69,"line":191},[67,166861,1626],{"class":77},[67,166863,165754],{"class":73},[19,166865,166866],{},"带条件：",[58,166868,166870],{"className":60,"code":166869,"language":62,"meta":63,"style":63},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[32,166871,166872,166913],{"__ignoreMap":63},[67,166873,166874,166877,166879,166881,166883,166885,166887,166889,166891,166893,166895,166897,166899,166901,166903,166905,166907,166909,166911],{"class":69,"line":70},[67,166875,166876],{"class":73},"even_nums ",[67,166878,85],{"class":84},[67,166880,166839],{"class":73},[67,166882,1512],{"class":84},[67,166884,11244],{"class":73},[67,166886,941],{"class":84},[67,166888,944],{"class":77},[67,166890,854],{"class":73},[67,166892,2209],{"class":77},[67,166894,1868],{"class":73},[67,166896,2328],{"class":77},[67,166898,15512],{"class":73},[67,166900,1096],{"class":84},[67,166902,11244],{"class":73},[67,166904,2319],{"class":84},[67,166906,16553],{"class":77},[67,166908,1102],{"class":84},[67,166910,5913],{"class":77},[67,166912,35015],{"class":73},[67,166914,166915,166917],{"class":69,"line":191},[67,166916,1626],{"class":77},[67,166918,166919],{"class":73},"(even_nums)\n",[19,166921,166922],{},"字典推导式：",[58,166924,166926],{"className":60,"code":166925,"language":62,"meta":63,"style":63},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[32,166927,166928,166962],{"__ignoreMap":63},[67,166929,166930,166933,166935,166938,166940,166942,166945,166947,166949,166951,166953,166955,166957,166959],{"class":69,"line":70},[67,166931,166932],{"class":73},"squares ",[67,166934,85],{"class":84},[67,166936,166937],{"class":73}," {i: i ",[67,166939,12461],{"class":84},[67,166941,16553],{"class":77},[67,166943,166944],{"class":84}," for",[67,166946,11244],{"class":73},[67,166948,941],{"class":84},[67,166950,944],{"class":77},[67,166952,854],{"class":73},[67,166954,2209],{"class":77},[67,166956,1868],{"class":73},[67,166958,2335],{"class":77},[67,166960,166961],{"class":73},")}\n",[67,166963,166964,166966],{"class":69,"line":191},[67,166965,1626],{"class":77},[67,166967,166968],{"class":73},"(squares)\n",[19,166970,166971],{},"集合推导式：",[58,166973,166975],{"className":60,"code":166974,"language":62,"meta":63,"style":63},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[32,166976,166977,166998],{"__ignoreMap":63},[67,166978,166979,166982,166984,166987,166989,166991,166993,166996],{"class":69,"line":70},[67,166980,166981],{"class":73},"chars ",[67,166983,85],{"class":84},[67,166985,166986],{"class":73}," {ch ",[67,166988,1512],{"class":84},[67,166990,161130],{"class":73},[67,166992,941],{"class":84},[67,166994,166995],{"class":114}," \"hello\"",[67,166997,3419],{"class":73},[67,166999,167000,167002],{"class":69,"line":191},[67,167001,1626],{"class":77},[67,167003,167004],{"class":73},"(chars)\n",[19,167006,167007],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167009,167011],{"id":167010},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[58,167013,167015],{"className":60,"code":167014,"language":62,"meta":63,"style":63},"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",[32,167016,167017,167025,167045,167065,167085,167105,167109,167113,167121,167135,167144,167148,167158,167170,167174,167194,167203,167207,167223,167228,167232,167246,167250,167272,167308],{"__ignoreMap":63},[67,167018,167019,167021,167023],{"class":69,"line":70},[67,167020,161154],{"class":73},[67,167022,85],{"class":84},[67,167024,57208],{"class":73},[67,167026,167027,167029,167031,167033,167035,167037,167039,167041,167043],{"class":69,"line":191},[67,167028,149823],{"class":73},[67,167030,64439],{"class":114},[67,167032,53203],{"class":73},[67,167034,151326],{"class":114},[67,167036,1868],{"class":73},[67,167038,152910],{"class":114},[67,167040,53203],{"class":73},[67,167042,2977],{"class":77},[67,167044,6749],{"class":73},[67,167046,167047,167049,167051,167053,167055,167057,167059,167061,167063],{"class":69,"line":202},[67,167048,149823],{"class":73},[67,167050,64439],{"class":114},[67,167052,53203],{"class":73},[67,167054,152374],{"class":114},[67,167056,1868],{"class":73},[67,167058,152910],{"class":114},[67,167060,53203],{"class":73},[67,167062,2800],{"class":77},[67,167064,6749],{"class":73},[67,167066,167067,167069,167071,167073,167075,167077,167079,167081,167083],{"class":69,"line":641},[67,167068,149823],{"class":73},[67,167070,64439],{"class":114},[67,167072,53203],{"class":73},[67,167074,161169],{"class":114},[67,167076,1868],{"class":73},[67,167078,152910],{"class":114},[67,167080,53203],{"class":73},[67,167082,2397],{"class":77},[67,167084,6749],{"class":73},[67,167086,167087,167089,167091,167093,167095,167097,167099,167101,167103],{"class":69,"line":655},[67,167088,149823],{"class":73},[67,167090,64439],{"class":114},[67,167092,53203],{"class":73},[67,167094,164748],{"class":114},[67,167096,1868],{"class":73},[67,167098,152910],{"class":114},[67,167100,53203],{"class":73},[67,167102,2871],{"class":77},[67,167104,6749],{"class":73},[67,167106,167107],{"class":69,"line":660},[67,167108,35015],{"class":73},[67,167110,167111],{"class":69,"line":665},[67,167112,631],{"emptyLinePlaceholder":630},[67,167114,167115,167117,167119],{"class":69,"line":677},[67,167116,158698],{"class":73},[67,167118,85],{"class":84},[67,167120,49101],{"class":77},[67,167122,167123,167126,167128,167131,167133],{"class":69,"line":683},[67,167124,167125],{"class":73},"max_student ",[67,167127,85],{"class":84},[67,167129,167130],{"class":73}," students[",[67,167132,78],{"class":77},[67,167134,35015],{"class":73},[67,167136,167137,167140,167142],{"class":69,"line":689},[67,167138,167139],{"class":73},"passed ",[67,167141,85],{"class":84},[67,167143,53603],{"class":73},[67,167145,167146],{"class":69,"line":694},[67,167147,631],{"emptyLinePlaceholder":630},[67,167149,167150,167152,167154,167156],{"class":69,"line":700},[67,167151,1512],{"class":84},[67,167153,153575],{"class":73},[67,167155,941],{"class":84},[67,167157,153580],{"class":73},[67,167159,167160,167162,167164,167166,167168],{"class":69,"line":706},[67,167161,160745],{"class":73},[67,167163,11283],{"class":84},[67,167165,153587],{"class":73},[67,167167,152910],{"class":114},[67,167169,35015],{"class":73},[67,167171,167172],{"class":69,"line":712},[67,167173,631],{"emptyLinePlaceholder":630},[67,167175,167176,167178,167180,167182,167184,167186,167189,167191],{"class":69,"line":717},[67,167177,897],{"class":84},[67,167179,153587],{"class":73},[67,167181,152910],{"class":114},[67,167183,81],{"class":73},[67,167185,2948],{"class":84},[67,167187,167188],{"class":73}," max_student[",[67,167190,152910],{"class":114},[67,167192,167193],{"class":73},"]:\n",[67,167195,167196,167199,167201],{"class":69,"line":723},[67,167197,167198],{"class":73},"        max_student ",[67,167200,85],{"class":84},[67,167202,153603],{"class":73},[67,167204,167205],{"class":69,"line":729},[67,167206,631],{"emptyLinePlaceholder":630},[67,167208,167209,167211,167213,167215,167217,167219,167221],{"class":69,"line":735},[67,167210,897],{"class":84},[67,167212,153587],{"class":73},[67,167214,152910],{"class":114},[67,167216,81],{"class":73},[67,167218,3553],{"class":84},[67,167220,159275],{"class":77},[67,167222,813],{"class":73},[67,167224,167225],{"class":69,"line":741},[67,167226,167227],{"class":73},"        passed.append(student)\n",[67,167229,167230],{"class":69,"line":747},[67,167231,631],{"emptyLinePlaceholder":630},[67,167233,167234,167236,167238,167240,167242,167244],{"class":69,"line":753},[67,167235,165212],{"class":73},[67,167237,85],{"class":84},[67,167239,165217],{"class":73},[67,167241,2573],{"class":84},[67,167243,9147],{"class":77},[67,167245,166433],{"class":73},[67,167247,167248],{"class":69,"line":758},[67,167249,631],{"emptyLinePlaceholder":630},[67,167251,167252,167254,167256,167258,167260,167262,167264,167266,167268,167270],{"class":69,"line":764},[67,167253,1626],{"class":77},[67,167255,854],{"class":73},[67,167257,2052],{"class":84},[67,167259,165235],{"class":114},[67,167261,2885],{"class":77},[67,167263,165240],{"class":73},[67,167265,158597],{"class":84},[67,167267,2934],{"class":77},[67,167269,2243],{"class":114},[67,167271,829],{"class":73},[67,167273,167274,167276,167278,167280,167283,167285,167288,167290,167292,167294,167296,167298,167300,167302,167304,167306],{"class":69,"line":770},[67,167275,1626],{"class":77},[67,167277,854],{"class":73},[67,167279,2052],{"class":84},[67,167281,167282],{"class":114},"\"最高分学生:",[67,167284,2885],{"class":77},[67,167286,167287],{"class":73},"max_student[",[67,167289,154320],{"class":114},[67,167291,2928],{"class":73},[67,167293,2934],{"class":77},[67,167295,6267],{"class":77},[67,167297,167287],{"class":73},[67,167299,154358],{"class":114},[67,167301,2928],{"class":73},[67,167303,2934],{"class":77},[67,167305,2243],{"class":114},[67,167307,829],{"class":73},[67,167309,167310,167312,167314,167316,167319,167322,167325,167327,167329],{"class":69,"line":776},[67,167311,1626],{"class":77},[67,167313,854],{"class":73},[67,167315,2052],{"class":84},[67,167317,167318],{"class":114},"\"及格人数:",[67,167320,167321],{"class":77},"{len",[67,167323,167324],{"class":73},"(passed)",[67,167326,2934],{"class":77},[67,167328,2243],{"class":114},[67,167330,829],{"class":73},[14,167332,167334],{"id":167333},"_616-易错点","6.16 易错点",[26,167336,167337,167340,167343,167346,167352,167361],{},[29,167338,167339],{},"列表可变，元组和字符串不可变。",[29,167341,167342],{},"切片结束位置不包含。",[29,167344,167345],{},"字典通过 key 取值，不是通过索引。",[29,167347,167348,167349,230],{},"空集合要用 ",[32,167350,167351],{},"set()",[29,167353,106039,167354,167357,167358,230],{},[32,167355,167356],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[32,167359,167360],{},"get()",[29,167362,167363],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167365,167367],{"id":167366},"_617-本章练习","6.17 本章练习",[26,167369,167370,167373,167376,167379,167382],{},[29,167371,167372],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[29,167374,167375],{},"输入一句话，统计每个字符出现次数。",[29,167377,167378],{},"使用集合去除列表中的重复元素。",[29,167380,167381],{},"使用字典保存一个学生的信息，并实现修改成绩。",[29,167383,167384],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1903,167386,167387],{},"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":63,"searchDepth":191,"depth":191,"links":167389},[167390,167391,167392,167393,167394,167395,167396,167397,167398,167399,167400,167401,167402,167403,167404,167405,167406],{"id":164370,"depth":191,"text":164371},{"id":164487,"depth":191,"text":164488},{"id":164577,"depth":191,"text":164578},{"id":164701,"depth":191,"text":164702},{"id":165064,"depth":191,"text":165065},{"id":165251,"depth":191,"text":165252},{"id":165370,"depth":191,"text":165371},{"id":165512,"depth":191,"text":165513},{"id":165699,"depth":191,"text":165700},{"id":165943,"depth":191,"text":165944},{"id":166153,"depth":191,"text":166154},{"id":166238,"depth":191,"text":166239},{"id":166536,"depth":191,"text":166537},{"id":166818,"depth":191,"text":166819},{"id":167010,"depth":191,"text":167011},{"id":167333,"depth":191,"text":167334},{"id":167366,"depth":191,"text":167367},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164362,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167413,"title":167414,"body":167415,"description":25173,"extension":1930,"meta":169587,"navigation":630,"path":169588,"seo":169589,"stem":169590,"__hash__":169591},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167416,"toc":169562},[167417,167420,167424,167427,167507,167510,167531,167534,167538,167541,167603,167606,167623,167627,167630,167675,167677,167685,167689,167692,167774,167777,167780,167805,167808,167831,167835,167838,167840,167902,167905,167907,167958,167962,167966,167972,168077,168081,168087,168158,168162,168165,168233,168236,168316,168320,168326,168362,168365,168368,168478,168484,168488,168491,168563,168566,168570,168574,168579,168641,168645,168650,168718,168722,168727,168843,168847,168850,168930,168933,168937,168940,169044,169046,169061,169064,169068,169206,169214,169218,169220,169231,169233,169491,169495,169527,169531,169559],[10,167418,167414],{"id":167419},"_7-函数进阶",[14,167421,167423],{"id":167422},"_71-多返回值","7.1 多返回值",[19,167425,167426],{},"Python 函数可以返回多个值，本质上返回的是元组。",[58,167428,167430],{"className":60,"code":167429,"language":62,"meta":63,"style":63},"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",[32,167431,167432,167441,167449,167457,167466,167473,167477,167481,167490,167496],{"__ignoreMap":63},[67,167433,167434,167436,167439],{"class":69,"line":70},[67,167435,801],{"class":84},[67,167437,167438],{"class":110}," get_info",[67,167440,33723],{"class":73},[67,167442,167443,167445,167447],{"class":69,"line":191},[67,167444,153808],{"class":73},[67,167446,85],{"class":84},[67,167448,150791],{"class":114},[67,167450,167451,167453,167455],{"class":69,"line":202},[67,167452,153824],{"class":73},[67,167454,85],{"class":84},[67,167456,147989],{"class":77},[67,167458,167459,167461,167463],{"class":69,"line":641},[67,167460,153839],{"class":73},[67,167462,85],{"class":84},[67,167464,167465],{"class":77}," 95\n",[67,167467,167468,167470],{"class":69,"line":655},[67,167469,5910],{"class":84},[67,167471,167472],{"class":73}," name, age, score\n",[67,167474,167475],{"class":69,"line":660},[67,167476,631],{"emptyLinePlaceholder":630},[67,167478,167479],{"class":69,"line":665},[67,167480,631],{"emptyLinePlaceholder":630},[67,167482,167483,167485,167487],{"class":69,"line":677},[67,167484,162744],{"class":73},[67,167486,85],{"class":84},[67,167488,167489],{"class":73}," get_info()\n",[67,167491,167492,167494],{"class":69,"line":683},[67,167493,1626],{"class":77},[67,167495,78345],{"class":73},[67,167497,167498,167500,167502,167504],{"class":69,"line":689},[67,167499,1626],{"class":77},[67,167501,854],{"class":73},[67,167503,104791],{"class":77},[67,167505,167506],{"class":73},"(result))\n",[19,167508,167509],{},"可以直接解包：",[58,167511,167513],{"className":60,"code":167512,"language":62,"meta":63,"style":63},"name, age, score = get_info()\nprint(name, age, score)\n",[32,167514,167515,167524],{"__ignoreMap":63},[67,167516,167517,167520,167522],{"class":69,"line":70},[67,167518,167519],{"class":73},"name, age, score ",[67,167521,85],{"class":84},[67,167523,167489],{"class":73},[67,167525,167526,167528],{"class":69,"line":191},[67,167527,1626],{"class":77},[67,167529,167530],{"class":73},"(name, age, score)\n",[19,167532,167533],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167535,167537],{"id":167536},"_72-位置参数","7.2 位置参数",[19,167539,167540],{},"位置参数按顺序传递。",[58,167542,167544],{"className":60,"code":167543,"language":62,"meta":63,"style":63},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[32,167545,167546,167554,167582,167586,167590],{"__ignoreMap":63},[67,167547,167548,167550,167552],{"class":69,"line":70},[67,167549,801],{"class":84},[67,167551,150810],{"class":110},[67,167553,150813],{"class":73},[67,167555,167556,167558,167560,167562,167564,167566,167568,167570,167572,167574,167576,167578,167580],{"class":69,"line":191},[67,167557,851],{"class":77},[67,167559,854],{"class":73},[67,167561,2052],{"class":84},[67,167563,150824],{"class":114},[67,167565,2885],{"class":77},[67,167567,81570],{"class":73},[67,167569,2934],{"class":77},[67,167571,150833],{"class":114},[67,167573,2885],{"class":77},[67,167575,71981],{"class":73},[67,167577,2934],{"class":77},[67,167579,150842],{"class":114},[67,167581,829],{"class":73},[67,167583,167584],{"class":69,"line":202},[67,167585,631],{"emptyLinePlaceholder":630},[67,167587,167588],{"class":69,"line":641},[67,167589,631],{"emptyLinePlaceholder":630},[67,167591,167592,167595,167597,167599,167601],{"class":69,"line":655},[67,167593,167594],{"class":73},"introduce(",[67,167596,151326],{"class":114},[67,167598,1868],{"class":73},[67,167600,2639],{"class":77},[67,167602,829],{"class":73},[19,167604,167605],{},"顺序错了就会得到错误含义：",[58,167607,167609],{"className":60,"code":167608,"language":62,"meta":63,"style":63},"introduce(18, \"小明\")\n",[32,167610,167611],{"__ignoreMap":63},[67,167612,167613,167615,167617,167619,167621],{"class":69,"line":70},[67,167614,167594],{"class":73},[67,167616,2639],{"class":77},[67,167618,1868],{"class":73},[67,167620,151326],{"class":114},[67,167622,829],{"class":73},[14,167624,167626],{"id":167625},"_73-关键字参数","7.3 关键字参数",[19,167628,167629],{},"关键字参数按参数名传递。",[58,167631,167633],{"className":60,"code":167632,"language":62,"meta":63,"style":63},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[32,167634,167635,167655],{"__ignoreMap":63},[67,167636,167637,167639,167641,167643,167645,167647,167649,167651,167653],{"class":69,"line":70},[67,167638,167594],{"class":73},[67,167640,81570],{"class":7033},[67,167642,85],{"class":84},[67,167644,151326],{"class":114},[67,167646,1868],{"class":73},[67,167648,71981],{"class":7033},[67,167650,85],{"class":84},[67,167652,2639],{"class":77},[67,167654,829],{"class":73},[67,167656,167657,167659,167661,167663,167665,167667,167669,167671,167673],{"class":69,"line":191},[67,167658,167594],{"class":73},[67,167660,71981],{"class":7033},[67,167662,85],{"class":84},[67,167664,2639],{"class":77},[67,167666,1868],{"class":73},[67,167668,81570],{"class":7033},[67,167670,85],{"class":84},[67,167672,151326],{"class":114},[67,167674,829],{"class":73},[19,167676,119372],{},[26,167678,167679,167682],{},[29,167680,167681],{},"顺序不容易错。",[29,167683,167684],{},"调用时可读性更强。",[14,167686,167688],{"id":167687},"_74-默认参数","7.4 默认参数",[19,167690,167691],{},"默认参数给参数设置默认值。",[58,167693,167695],{"className":60,"code":167694,"language":62,"meta":63,"style":63},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[32,167696,167697,167713,167743,167747,167751,167761],{"__ignoreMap":63},[67,167698,167699,167701,167703,167706,167708,167711],{"class":69,"line":70},[67,167700,801],{"class":84},[67,167702,123531],{"class":110},[67,167704,167705],{"class":73},"(host, port",[67,167707,85],{"class":84},[67,167709,167710],{"class":77},"3306",[67,167712,952],{"class":73},[67,167714,167715,167717,167719,167721,167724,167726,167728,167730,167732,167734,167737,167739,167741],{"class":69,"line":191},[67,167716,851],{"class":77},[67,167718,854],{"class":73},[67,167720,2052],{"class":84},[67,167722,167723],{"class":114},"\"连接",[67,167725,2885],{"class":77},[67,167727,29181],{"class":73},[67,167729,2934],{"class":77},[67,167731,2848],{"class":114},[67,167733,2885],{"class":77},[67,167735,167736],{"class":73},"port",[67,167738,2934],{"class":77},[67,167740,2243],{"class":114},[67,167742,829],{"class":73},[67,167744,167745],{"class":69,"line":202},[67,167746,631],{"emptyLinePlaceholder":630},[67,167748,167749],{"class":69,"line":641},[67,167750,631],{"emptyLinePlaceholder":630},[67,167752,167753,167756,167759],{"class":69,"line":655},[67,167754,167755],{"class":73},"connect(",[67,167757,167758],{"class":114},"\"localhost\"",[67,167760,829],{"class":73},[67,167762,167763,167765,167767,167769,167772],{"class":69,"line":660},[67,167764,167755],{"class":73},[67,167766,167758],{"class":114},[67,167768,1868],{"class":73},[67,167770,167771],{"class":77},"6379",[67,167773,829],{"class":73},[19,167775,167776],{},"注意：默认参数必须放在非默认参数后面。",[19,167778,167779],{},"错误：",[58,167781,167783],{"className":60,"code":167782,"language":62,"meta":63,"style":63},"def connect(port=3306, host):\n    pass\n",[32,167784,167785,167801],{"__ignoreMap":63},[67,167786,167787,167789,167791,167794,167796,167798],{"class":69,"line":70},[67,167788,801],{"class":84},[67,167790,123531],{"class":110},[67,167792,167793],{"class":73},"(port",[67,167795,85],{"class":84},[67,167797,167710],{"class":77},[67,167799,167800],{"class":73},", host):\n",[67,167802,167803],{"class":69,"line":191},[67,167804,150975],{"class":84},[19,167806,167807],{},"正确：",[58,167809,167811],{"className":60,"code":167810,"language":62,"meta":63,"style":63},"def connect(host, port=3306):\n    pass\n",[32,167812,167813,167827],{"__ignoreMap":63},[67,167814,167815,167817,167819,167821,167823,167825],{"class":69,"line":70},[67,167816,801],{"class":84},[67,167818,123531],{"class":110},[67,167820,167705],{"class":73},[67,167822,85],{"class":84},[67,167824,167710],{"class":77},[67,167826,952],{"class":73},[67,167828,167829],{"class":69,"line":191},[67,167830,150975],{"class":84},[14,167832,167834],{"id":167833},"_75-默认参数的坑","7.5 默认参数的坑",[19,167836,167837],{},"不要使用可变对象作为默认参数。",[19,167839,159061],{},[58,167841,167843],{"className":60,"code":167842,"language":62,"meta":63,"style":63},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[32,167844,167845,167860,167865,167872,167876,167880,167891],{"__ignoreMap":63},[67,167846,167847,167849,167852,167855,167857],{"class":69,"line":70},[67,167848,801],{"class":84},[67,167850,167851],{"class":110}," add_item",[67,167853,167854],{"class":73},"(item, items",[67,167856,85],{"class":84},[67,167858,167859],{"class":73},"[]):\n",[67,167861,167862],{"class":69,"line":191},[67,167863,167864],{"class":73},"    items.append(item)\n",[67,167866,167867,167869],{"class":69,"line":202},[67,167868,5910],{"class":84},[67,167870,167871],{"class":73}," items\n",[67,167873,167874],{"class":69,"line":641},[67,167875,631],{"emptyLinePlaceholder":630},[67,167877,167878],{"class":69,"line":655},[67,167879,631],{"emptyLinePlaceholder":630},[67,167881,167882,167884,167887,167889],{"class":69,"line":660},[67,167883,1626],{"class":77},[67,167885,167886],{"class":73},"(add_item(",[67,167888,166763],{"class":114},[67,167890,1050],{"class":73},[67,167892,167893,167895,167897,167900],{"class":69,"line":665},[67,167894,1626],{"class":77},[67,167896,167886],{"class":73},[67,167898,167899],{"class":114},"\"b\"",[67,167901,1050],{"class":73},[19,167903,167904],{},"第二次调用会复用第一次的列表。",[19,167906,157326],{},[58,167908,167910],{"className":60,"code":167909,"language":62,"meta":63,"style":63},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[32,167911,167912,167926,167939,167948,167952],{"__ignoreMap":63},[67,167913,167914,167916,167918,167920,167922,167924],{"class":69,"line":70},[67,167915,801],{"class":84},[67,167917,167851],{"class":110},[67,167919,167854],{"class":73},[67,167921,85],{"class":84},[67,167923,810],{"class":77},[67,167925,952],{"class":73},[67,167927,167928,167930,167933,167935,167937],{"class":69,"line":191},[67,167929,897],{"class":84},[67,167931,167932],{"class":73}," items ",[67,167934,40695],{"class":84},[67,167936,40701],{"class":77},[67,167938,813],{"class":73},[67,167940,167941,167944,167946],{"class":69,"line":202},[67,167942,167943],{"class":73},"        items ",[67,167945,85],{"class":84},[67,167947,53603],{"class":73},[67,167949,167950],{"class":69,"line":641},[67,167951,167864],{"class":73},[67,167953,167954,167956],{"class":69,"line":655},[67,167955,5910],{"class":84},[67,167957,167871],{"class":73},[14,167959,167961],{"id":167960},"_76-不定长参数","7.6 不定长参数",[391,167963,167965],{"id":167964},"_761-args","7.6.1 *args",[19,167967,167968,167971],{},[32,167969,167970],{},"*args"," 接收任意数量的位置参数，得到元组。",[58,167973,167975],{"className":60,"code":167974,"language":62,"meta":63,"style":63},"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",[32,167976,167977,167990,167998,168009,168018,168024,168028,168032,168051],{"__ignoreMap":63},[67,167978,167979,167981,167983,167985,167987],{"class":69,"line":70},[67,167980,801],{"class":84},[67,167982,7026],{"class":110},[67,167984,854],{"class":73},[67,167986,965],{"class":84},[67,167988,167989],{"class":73},"args):\n",[67,167991,167992,167994,167996],{"class":69,"line":191},[67,167993,160745],{"class":73},[67,167995,85],{"class":84},[67,167997,49101],{"class":77},[67,167999,168000,168002,168004,168006],{"class":69,"line":202},[67,168001,935],{"class":84},[67,168003,157618],{"class":73},[67,168005,941],{"class":84},[67,168007,168008],{"class":73}," args:\n",[67,168010,168011,168013,168015],{"class":69,"line":641},[67,168012,161420],{"class":73},[67,168014,11283],{"class":84},[67,168016,168017],{"class":73}," num\n",[67,168019,168020,168022],{"class":69,"line":655},[67,168021,5910],{"class":84},[67,168023,163725],{"class":73},[67,168025,168026],{"class":69,"line":660},[67,168027,631],{"emptyLinePlaceholder":630},[67,168029,168030],{"class":69,"line":665},[67,168031,631],{"emptyLinePlaceholder":630},[67,168033,168034,168036,168039,168041,168043,168045,168047,168049],{"class":69,"line":677},[67,168035,1626],{"class":77},[67,168037,168038],{"class":73},"(add(",[67,168040,2209],{"class":77},[67,168042,1868],{"class":73},[67,168044,2077],{"class":77},[67,168046,1868],{"class":73},[67,168048,2071],{"class":77},[67,168050,1050],{"class":73},[67,168052,168053,168055,168057,168059,168061,168063,168065,168067,168069,168071,168073,168075],{"class":69,"line":683},[67,168054,1626],{"class":77},[67,168056,168038],{"class":73},[67,168058,2209],{"class":77},[67,168060,1868],{"class":73},[67,168062,2077],{"class":77},[67,168064,1868],{"class":73},[67,168066,2071],{"class":77},[67,168068,1868],{"class":73},[67,168070,1047],{"class":77},[67,168072,1868],{"class":73},[67,168074,2310],{"class":77},[67,168076,1050],{"class":73},[391,168078,168080],{"id":168079},"_762-kwargs","7.6.2 **kwargs",[19,168082,168083,168086],{},[32,168084,168085],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[58,168088,168090],{"className":60,"code":168089,"language":62,"meta":63,"style":63},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[32,168091,168092,168105,168116,168122,168126,168130],{"__ignoreMap":63},[67,168093,168094,168096,168098,168100,168102],{"class":69,"line":70},[67,168095,801],{"class":84},[67,168097,163383],{"class":110},[67,168099,854],{"class":73},[67,168101,12461],{"class":84},[67,168103,168104],{"class":73},"kwargs):\n",[67,168106,168107,168109,168111,168113],{"class":69,"line":191},[67,168108,935],{"class":84},[67,168110,166223],{"class":73},[67,168112,941],{"class":84},[67,168114,168115],{"class":73}," kwargs.items():\n",[67,168117,168118,168120],{"class":69,"line":202},[67,168119,34220],{"class":77},[67,168121,166235],{"class":73},[67,168123,168124],{"class":69,"line":641},[67,168125,631],{"emptyLinePlaceholder":630},[67,168127,168128],{"class":69,"line":655},[67,168129,631],{"emptyLinePlaceholder":630},[67,168131,168132,168134,168136,168138,168140,168142,168144,168146,168148,168150,168152,168154,168156],{"class":69,"line":660},[67,168133,163448],{"class":73},[67,168135,81570],{"class":7033},[67,168137,85],{"class":84},[67,168139,151326],{"class":114},[67,168141,1868],{"class":73},[67,168143,71981],{"class":7033},[67,168145,85],{"class":84},[67,168147,2639],{"class":77},[67,168149,1868],{"class":73},[67,168151,72032],{"class":7033},[67,168153,85],{"class":84},[67,168155,71029],{"class":114},[67,168157,829],{"class":73},[14,168159,168161],{"id":168160},"_77-参数解包","7.7 参数解包",[19,168163,168164],{},"列表或元组解包为位置参数：",[58,168166,168168],{"className":60,"code":168167,"language":62,"meta":63,"style":63},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[32,168169,168170,168179,168194,168198,168202,168222],{"__ignoreMap":63},[67,168171,168172,168174,168176],{"class":69,"line":70},[67,168173,801],{"class":84},[67,168175,7026],{"class":110},[67,168177,168178],{"class":73},"(a, b, c):\n",[67,168180,168181,168183,168185,168187,168189,168191],{"class":69,"line":191},[67,168182,5910],{"class":84},[67,168184,12669],{"class":73},[67,168186,2471],{"class":84},[67,168188,12682],{"class":73},[67,168190,2471],{"class":84},[67,168192,168193],{"class":73}," c\n",[67,168195,168196],{"class":69,"line":202},[67,168197,631],{"emptyLinePlaceholder":630},[67,168199,168200],{"class":69,"line":641},[67,168201,631],{"emptyLinePlaceholder":630},[67,168203,168204,168206,168208,168210,168212,168214,168216,168218,168220],{"class":69,"line":655},[67,168205,165538],{"class":73},[67,168207,85],{"class":84},[67,168209,53990],{"class":73},[67,168211,2209],{"class":77},[67,168213,1868],{"class":73},[67,168215,2077],{"class":77},[67,168217,1868],{"class":73},[67,168219,2071],{"class":77},[67,168221,35015],{"class":73},[67,168223,168224,168226,168228,168230],{"class":69,"line":660},[67,168225,1626],{"class":77},[67,168227,168038],{"class":73},[67,168229,965],{"class":84},[67,168231,168232],{"class":73},"nums))\n",[19,168234,168235],{},"字典解包为关键字参数：",[58,168237,168239],{"className":60,"code":168238,"language":62,"meta":63,"style":63},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[32,168240,168241,168249,168275,168279,168283,168307],{"__ignoreMap":63},[67,168242,168243,168245,168247],{"class":69,"line":70},[67,168244,801],{"class":84},[67,168246,150810],{"class":110},[67,168248,150813],{"class":73},[67,168250,168251,168253,168255,168257,168259,168261,168263,168265,168267,168269,168271,168273],{"class":69,"line":191},[67,168252,851],{"class":77},[67,168254,854],{"class":73},[67,168256,2052],{"class":84},[67,168258,2243],{"class":114},[67,168260,2885],{"class":77},[67,168262,81570],{"class":73},[67,168264,2934],{"class":77},[67,168266,6267],{"class":77},[67,168268,71981],{"class":73},[67,168270,2934],{"class":77},[67,168272,2243],{"class":114},[67,168274,829],{"class":73},[67,168276,168277],{"class":69,"line":202},[67,168278,631],{"emptyLinePlaceholder":630},[67,168280,168281],{"class":69,"line":641},[67,168282,631],{"emptyLinePlaceholder":630},[67,168284,168285,168287,168289,168291,168293,168295,168297,168299,168301,168303,168305],{"class":69,"line":655},[67,168286,117752],{"class":73},[67,168288,85],{"class":84},[67,168290,6267],{"class":73},[67,168292,64439],{"class":114},[67,168294,53203],{"class":73},[67,168296,151326],{"class":114},[67,168298,1868],{"class":73},[67,168300,70884],{"class":114},[67,168302,53203],{"class":73},[67,168304,2639],{"class":77},[67,168306,3419],{"class":73},[67,168308,168309,168311,168313],{"class":69,"line":660},[67,168310,167594],{"class":73},[67,168312,12461],{"class":84},[67,168314,168315],{"class":73},"info)\n",[14,168317,168319],{"id":168318},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168321,168322,168325],{},[32,168323,168324],{},"lambda"," 用于定义简单匿名函数。",[58,168327,168329],{"className":60,"code":168328,"language":62,"meta":63,"style":63},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[32,168330,168331,168348],{"__ignoreMap":63},[67,168332,168333,168336,168338,168341,168344,168346],{"class":69,"line":70},[67,168334,168335],{"class":73},"add ",[67,168337,85],{"class":84},[67,168339,168340],{"class":84}," lambda",[67,168342,168343],{"class":73}," a, b: a ",[67,168345,2471],{"class":84},[67,168347,152542],{"class":73},[67,168349,168350,168352,168354,168356,168358,168360],{"class":69,"line":191},[67,168351,1626],{"class":77},[67,168353,168038],{"class":73},[67,168355,2209],{"class":77},[67,168357,1868],{"class":73},[67,168359,2077],{"class":77},[67,168361,1050],{"class":73},[19,168363,168364],{},"常和排序、过滤等函数一起使用。",[19,168366,168367],{},"按分数排序：",[58,168369,168371],{"className":60,"code":168370,"language":62,"meta":63,"style":63},"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",[32,168372,168373,168381,168401,168421,168441,168445,168449,168472],{"__ignoreMap":63},[67,168374,168375,168377,168379],{"class":69,"line":70},[67,168376,161154],{"class":73},[67,168378,85],{"class":84},[67,168380,57208],{"class":73},[67,168382,168383,168385,168387,168389,168391,168393,168395,168397,168399],{"class":69,"line":191},[67,168384,149823],{"class":73},[67,168386,64439],{"class":114},[67,168388,53203],{"class":73},[67,168390,151326],{"class":114},[67,168392,1868],{"class":73},[67,168394,152910],{"class":114},[67,168396,53203],{"class":73},[67,168398,2977],{"class":77},[67,168400,6749],{"class":73},[67,168402,168403,168405,168407,168409,168411,168413,168415,168417,168419],{"class":69,"line":202},[67,168404,149823],{"class":73},[67,168406,64439],{"class":114},[67,168408,53203],{"class":73},[67,168410,152374],{"class":114},[67,168412,1868],{"class":73},[67,168414,152910],{"class":114},[67,168416,53203],{"class":73},[67,168418,2800],{"class":77},[67,168420,6749],{"class":73},[67,168422,168423,168425,168427,168429,168431,168433,168435,168437,168439],{"class":69,"line":641},[67,168424,149823],{"class":73},[67,168426,64439],{"class":114},[67,168428,53203],{"class":73},[67,168430,161169],{"class":114},[67,168432,1868],{"class":73},[67,168434,152910],{"class":114},[67,168436,53203],{"class":73},[67,168438,2397],{"class":77},[67,168440,6749],{"class":73},[67,168442,168443],{"class":69,"line":655},[67,168444,35015],{"class":73},[67,168446,168447],{"class":69,"line":660},[67,168448,631],{"emptyLinePlaceholder":630},[67,168450,168451,168454,168456,168458,168460,168462,168464,168466,168468,168470],{"class":69,"line":665},[67,168452,168453],{"class":73},"students.sort(",[67,168455,155384],{"class":7033},[67,168457,155387],{"class":84},[67,168459,155390],{"class":73},[67,168461,152910],{"class":114},[67,168463,113640],{"class":73},[67,168465,164966],{"class":7033},[67,168467,85],{"class":84},[67,168469,33248],{"class":77},[67,168471,829],{"class":73},[67,168473,168474,168476],{"class":69,"line":677},[67,168475,1626],{"class":77},[67,168477,166433],{"class":73},[19,168479,168480,168481,168483],{},"如果逻辑复杂，不要硬写 ",[32,168482,168324],{},"，定义普通函数更清晰。",[14,168485,168487],{"id":168486},"_79-函数作为参数","7.9 函数作为参数",[19,168489,168490],{},"函数可以作为参数传给另一个函数。",[58,168492,168494],{"className":60,"code":168493,"language":62,"meta":63,"style":63},"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",[32,168495,168496,168504,168514,168518,168522,168532,168539,168543,168547],{"__ignoreMap":63},[67,168497,168498,168500,168502],{"class":69,"line":70},[67,168499,801],{"class":84},[67,168501,7026],{"class":110},[67,168503,152531],{"class":73},[67,168505,168506,168508,168510,168512],{"class":69,"line":191},[67,168507,5910],{"class":84},[67,168509,12669],{"class":73},[67,168511,2471],{"class":84},[67,168513,152542],{"class":73},[67,168515,168516],{"class":69,"line":202},[67,168517,631],{"emptyLinePlaceholder":630},[67,168519,168520],{"class":69,"line":641},[67,168521,631],{"emptyLinePlaceholder":630},[67,168523,168524,168526,168529],{"class":69,"line":655},[67,168525,801],{"class":84},[67,168527,168528],{"class":110}," calculate",[67,168530,168531],{"class":73},"(a, b, func):\n",[67,168533,168534,168536],{"class":69,"line":660},[67,168535,5910],{"class":84},[67,168537,168538],{"class":73}," func(a, b)\n",[67,168540,168541],{"class":69,"line":665},[67,168542,631],{"emptyLinePlaceholder":630},[67,168544,168545],{"class":69,"line":677},[67,168546,631],{"emptyLinePlaceholder":630},[67,168548,168549,168551,168554,168556,168558,168560],{"class":69,"line":683},[67,168550,1626],{"class":77},[67,168552,168553],{"class":73},"(calculate(",[67,168555,2437],{"class":77},[67,168557,1868],{"class":73},[67,168559,2689],{"class":77},[67,168561,168562],{"class":73},", add))\n",[19,168564,168565],{},"这种思想在排序、回调、框架中经常出现。",[14,168567,168569],{"id":168568},"_710-mapfiltersorted","7.10 map、filter、sorted",[391,168571,168573],{"id":168572},"_7101-map","7.10.1 map",[19,168575,168576,168578],{},[32,168577,75804],{}," 对每个元素执行函数。",[58,168580,168582],{"className":60,"code":168581,"language":62,"meta":63,"style":63},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[32,168583,168584,168608,168631],{"__ignoreMap":63},[67,168585,168586,168588,168590,168592,168594,168596,168598,168600,168602,168604,168606],{"class":69,"line":70},[67,168587,165538],{"class":73},[67,168589,85],{"class":84},[67,168591,53990],{"class":73},[67,168593,2209],{"class":77},[67,168595,1868],{"class":73},[67,168597,2077],{"class":77},[67,168599,1868],{"class":73},[67,168601,2071],{"class":77},[67,168603,1868],{"class":73},[67,168605,1047],{"class":77},[67,168607,35015],{"class":73},[67,168609,168610,168612,168614,168617,168619,168621,168624,168626,168628],{"class":69,"line":191},[67,168611,162744],{"class":73},[67,168613,85],{"class":84},[67,168615,168616],{"class":77}," map",[67,168618,854],{"class":73},[67,168620,168324],{"class":84},[67,168622,168623],{"class":73}," x: x ",[67,168625,965],{"class":84},[67,168627,16553],{"class":77},[67,168629,168630],{"class":73},", nums)\n",[67,168632,168633,168635,168637,168639],{"class":69,"line":202},[67,168634,1626],{"class":77},[67,168636,854],{"class":73},[67,168638,155508],{"class":77},[67,168640,167506],{"class":73},[391,168642,168644],{"id":168643},"_7102-filter","7.10.2 filter",[19,168646,168647,168649],{},[32,168648,81811],{}," 保留满足条件的元素。",[58,168651,168653],{"className":60,"code":168652,"language":62,"meta":63,"style":63},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[32,168654,168655,168683,168708],{"__ignoreMap":63},[67,168656,168657,168659,168661,168663,168665,168667,168669,168671,168673,168675,168677,168679,168681],{"class":69,"line":70},[67,168658,165538],{"class":73},[67,168660,85],{"class":84},[67,168662,53990],{"class":73},[67,168664,2209],{"class":77},[67,168666,1868],{"class":73},[67,168668,2077],{"class":77},[67,168670,1868],{"class":73},[67,168672,2071],{"class":77},[67,168674,1868],{"class":73},[67,168676,1047],{"class":77},[67,168678,1868],{"class":73},[67,168680,2310],{"class":77},[67,168682,35015],{"class":73},[67,168684,168685,168687,168689,168692,168694,168696,168698,168700,168702,168704,168706],{"class":69,"line":191},[67,168686,162744],{"class":73},[67,168688,85],{"class":84},[67,168690,168691],{"class":77}," filter",[67,168693,854],{"class":73},[67,168695,168324],{"class":84},[67,168697,168623],{"class":73},[67,168699,2319],{"class":84},[67,168701,16553],{"class":77},[67,168703,1102],{"class":84},[67,168705,5913],{"class":77},[67,168707,168630],{"class":73},[67,168709,168710,168712,168714,168716],{"class":69,"line":202},[67,168711,1626],{"class":77},[67,168713,854],{"class":73},[67,168715,155508],{"class":77},[67,168717,167506],{"class":73},[391,168719,168721],{"id":168720},"_7103-sorted","7.10.3 sorted",[19,168723,168724,168726],{},[32,168725,166674],{}," 返回排序后的新列表。",[58,168728,168730],{"className":60,"code":168729,"language":62,"meta":63,"style":63},"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",[32,168731,168732,168740,168760,168780,168800,168804,168808,168837],{"__ignoreMap":63},[67,168733,168734,168736,168738],{"class":69,"line":70},[67,168735,161154],{"class":73},[67,168737,85],{"class":84},[67,168739,57208],{"class":73},[67,168741,168742,168744,168746,168748,168750,168752,168754,168756,168758],{"class":69,"line":191},[67,168743,149823],{"class":73},[67,168745,64439],{"class":114},[67,168747,53203],{"class":73},[67,168749,151326],{"class":114},[67,168751,1868],{"class":73},[67,168753,152910],{"class":114},[67,168755,53203],{"class":73},[67,168757,2977],{"class":77},[67,168759,6749],{"class":73},[67,168761,168762,168764,168766,168768,168770,168772,168774,168776,168778],{"class":69,"line":202},[67,168763,149823],{"class":73},[67,168765,64439],{"class":114},[67,168767,53203],{"class":73},[67,168769,152374],{"class":114},[67,168771,1868],{"class":73},[67,168773,152910],{"class":114},[67,168775,53203],{"class":73},[67,168777,2800],{"class":77},[67,168779,6749],{"class":73},[67,168781,168782,168784,168786,168788,168790,168792,168794,168796,168798],{"class":69,"line":641},[67,168783,149823],{"class":73},[67,168785,64439],{"class":114},[67,168787,53203],{"class":73},[67,168789,161169],{"class":114},[67,168791,1868],{"class":73},[67,168793,152910],{"class":114},[67,168795,53203],{"class":73},[67,168797,2397],{"class":77},[67,168799,6749],{"class":73},[67,168801,168802],{"class":69,"line":655},[67,168803,35015],{"class":73},[67,168805,168806],{"class":69,"line":660},[67,168807,631],{"emptyLinePlaceholder":630},[67,168809,168810,168812,168814,168816,168819,168821,168823,168825,168827,168829,168831,168833,168835],{"class":69,"line":665},[67,168811,162744],{"class":73},[67,168813,85],{"class":84},[67,168815,165042],{"class":77},[67,168817,168818],{"class":73},"(students, ",[67,168820,155384],{"class":7033},[67,168822,155387],{"class":84},[67,168824,155390],{"class":73},[67,168826,152910],{"class":114},[67,168828,113640],{"class":73},[67,168830,164966],{"class":7033},[67,168832,85],{"class":84},[67,168834,33248],{"class":77},[67,168836,829],{"class":73},[67,168838,168839,168841],{"class":69,"line":677},[67,168840,1626],{"class":77},[67,168842,78345],{"class":73},[14,168844,168846],{"id":168845},"_711-闭包入门","7.11 闭包入门",[19,168848,168849],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[58,168851,168853],{"className":60,"code":168852,"language":62,"meta":63,"style":63},"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",[32,168854,168855,168865,168875,168886,168890,168897,168901,168905,168919],{"__ignoreMap":63},[67,168856,168857,168859,168862],{"class":69,"line":70},[67,168858,801],{"class":84},[67,168860,168861],{"class":110}," outer",[67,168863,168864],{"class":73},"(base):\n",[67,168866,168867,168869,168872],{"class":69,"line":191},[67,168868,32578],{"class":84},[67,168870,168871],{"class":110}," inner",[67,168873,168874],{"class":73},"(num):\n",[67,168876,168877,168879,168882,168884],{"class":69,"line":202},[67,168878,16550],{"class":84},[67,168880,168881],{"class":73}," base ",[67,168883,2471],{"class":84},[67,168885,168017],{"class":73},[67,168887,168888],{"class":69,"line":641},[67,168889,631],{"emptyLinePlaceholder":630},[67,168891,168892,168894],{"class":69,"line":655},[67,168893,5910],{"class":84},[67,168895,168896],{"class":73}," inner\n",[67,168898,168899],{"class":69,"line":660},[67,168900,631],{"emptyLinePlaceholder":630},[67,168902,168903],{"class":69,"line":665},[67,168904,631],{"emptyLinePlaceholder":630},[67,168906,168907,168910,168912,168915,168917],{"class":69,"line":677},[67,168908,168909],{"class":73},"add_10 ",[67,168911,85],{"class":84},[67,168913,168914],{"class":73}," outer(",[67,168916,2437],{"class":77},[67,168918,829],{"class":73},[67,168920,168921,168923,168926,168928],{"class":69,"line":683},[67,168922,1626],{"class":77},[67,168924,168925],{"class":73},"(add_10(",[67,168927,2310],{"class":77},[67,168929,1050],{"class":73},[19,168931,168932],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168934,168936],{"id":168935},"_712-装饰器入门","7.12 装饰器入门",[19,168938,168939],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[58,168941,168943],{"className":60,"code":168942,"language":62,"meta":63,"style":63},"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",[32,168944,168945,168954,168963,168974,168979,168990,168994,169001,169005,169009,169014,169022,169032,169036,169040],{"__ignoreMap":63},[67,168946,168947,168949,168951],{"class":69,"line":70},[67,168948,801],{"class":84},[67,168950,88950],{"class":110},[67,168952,168953],{"class":73},"(func):\n",[67,168955,168956,168958,168961],{"class":69,"line":191},[67,168957,32578],{"class":84},[67,168959,168960],{"class":110}," wrapper",[67,168962,33723],{"class":73},[67,168964,168965,168967,168969,168972],{"class":69,"line":202},[67,168966,34220],{"class":77},[67,168968,854],{"class":73},[67,168970,168971],{"class":114},"\"函数开始执行\"",[67,168973,829],{"class":73},[67,168975,168976],{"class":69,"line":641},[67,168977,168978],{"class":73},"        func()\n",[67,168980,168981,168983,168985,168988],{"class":69,"line":655},[67,168982,34220],{"class":77},[67,168984,854],{"class":73},[67,168986,168987],{"class":114},"\"函数执行结束\"",[67,168989,829],{"class":73},[67,168991,168992],{"class":69,"line":660},[67,168993,631],{"emptyLinePlaceholder":630},[67,168995,168996,168998],{"class":69,"line":665},[67,168997,5910],{"class":84},[67,168999,169000],{"class":73}," wrapper\n",[67,169002,169003],{"class":69,"line":677},[67,169004,631],{"emptyLinePlaceholder":630},[67,169006,169007],{"class":69,"line":683},[67,169008,631],{"emptyLinePlaceholder":630},[67,169010,169011],{"class":69,"line":689},[67,169012,169013],{"class":110},"@log\n",[67,169015,169016,169018,169020],{"class":69,"line":694},[67,169017,801],{"class":84},[67,169019,162434],{"class":110},[67,169021,33723],{"class":73},[67,169023,169024,169026,169028,169030],{"class":69,"line":700},[67,169025,851],{"class":77},[67,169027,854],{"class":73},[67,169029,7661],{"class":114},[67,169031,829],{"class":73},[67,169033,169034],{"class":69,"line":706},[67,169035,631],{"emptyLinePlaceholder":630},[67,169037,169038],{"class":69,"line":712},[67,169039,631],{"emptyLinePlaceholder":630},[67,169041,169042],{"class":69,"line":717},[67,169043,162469],{"class":73},[19,169045,159712],{},[58,169047,169049],{"className":60,"code":169048,"language":62,"meta":63,"style":63},"say_hello = log(say_hello)\n",[32,169050,169051],{"__ignoreMap":63},[67,169052,169053,169056,169058],{"class":69,"line":70},[67,169054,169055],{"class":73},"say_hello ",[67,169057,85],{"class":84},[67,169059,169060],{"class":73}," log(say_hello)\n",[19,169062,169063],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169065,169067],{"id":169066},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[58,169069,169071],{"className":60,"code":169070,"language":62,"meta":63,"style":63},"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",[32,169072,169073,169081,169098,169108,169127,169137,169144,169148,169154,169158,169162,169166,169174,169184,169188,169192],{"__ignoreMap":63},[67,169074,169075,169077,169079],{"class":69,"line":70},[67,169076,801],{"class":84},[67,169078,88950],{"class":110},[67,169080,168953],{"class":73},[67,169082,169083,169085,169087,169089,169091,169094,169096],{"class":69,"line":191},[67,169084,32578],{"class":84},[67,169086,168960],{"class":110},[67,169088,854],{"class":73},[67,169090,965],{"class":84},[67,169092,169093],{"class":73},"args, ",[67,169095,12461],{"class":84},[67,169097,168104],{"class":73},[67,169099,169100,169102,169104,169106],{"class":69,"line":202},[67,169101,34220],{"class":77},[67,169103,854],{"class":73},[67,169105,168971],{"class":114},[67,169107,829],{"class":73},[67,169109,169110,169113,169115,169118,169120,169122,169124],{"class":69,"line":641},[67,169111,169112],{"class":73},"        result ",[67,169114,85],{"class":84},[67,169116,169117],{"class":73}," func(",[67,169119,965],{"class":84},[67,169121,169093],{"class":73},[67,169123,12461],{"class":84},[67,169125,169126],{"class":73},"kwargs)\n",[67,169128,169129,169131,169133,169135],{"class":69,"line":655},[67,169130,34220],{"class":77},[67,169132,854],{"class":73},[67,169134,168987],{"class":114},[67,169136,829],{"class":73},[67,169138,169139,169141],{"class":69,"line":660},[67,169140,16550],{"class":84},[67,169142,169143],{"class":73}," result\n",[67,169145,169146],{"class":69,"line":665},[67,169147,631],{"emptyLinePlaceholder":630},[67,169149,169150,169152],{"class":69,"line":677},[67,169151,5910],{"class":84},[67,169153,169000],{"class":73},[67,169155,169156],{"class":69,"line":683},[67,169157,631],{"emptyLinePlaceholder":630},[67,169159,169160],{"class":69,"line":689},[67,169161,631],{"emptyLinePlaceholder":630},[67,169163,169164],{"class":69,"line":694},[67,169165,169013],{"class":110},[67,169167,169168,169170,169172],{"class":69,"line":700},[67,169169,801],{"class":84},[67,169171,7026],{"class":110},[67,169173,152531],{"class":73},[67,169175,169176,169178,169180,169182],{"class":69,"line":706},[67,169177,5910],{"class":84},[67,169179,12669],{"class":73},[67,169181,2471],{"class":84},[67,169183,152542],{"class":73},[67,169185,169186],{"class":69,"line":712},[67,169187,631],{"emptyLinePlaceholder":630},[67,169189,169190],{"class":69,"line":717},[67,169191,631],{"emptyLinePlaceholder":630},[67,169193,169194,169196,169198,169200,169202,169204],{"class":69,"line":723},[67,169195,1626],{"class":77},[67,169197,168038],{"class":73},[67,169199,2437],{"class":77},[67,169201,1868],{"class":73},[67,169203,2689],{"class":77},[67,169205,1050],{"class":73},[19,169207,169208,169209,1264,169211,169213],{},"这个写法使用 ",[32,169210,167970],{},[32,169212,168085],{}," 接收原函数的所有参数。",[14,169215,169217],{"id":169216},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169219,124730],{},[26,169221,169222,169225,169228],{},[29,169223,169224],{},"给定一组学生数据。",[29,169226,169227],{},"封装函数，根据传入规则筛选学生。",[29,169229,169230],{},"筛选及格、优秀、未成年学生。",[19,169232,11835],{},[58,169234,169236],{"className":60,"code":169235,"language":62,"meta":63,"style":63},"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",[32,169237,169238,169246,169274,169302,169330,169334,169338,169342,169352,169360,169370,169377,169382,169388,169392,169396,169420,169443,169466,169470,169477,169484],{"__ignoreMap":63},[67,169239,169240,169242,169244],{"class":69,"line":70},[67,169241,161154],{"class":73},[67,169243,85],{"class":84},[67,169245,57208],{"class":73},[67,169247,169248,169250,169252,169254,169256,169258,169260,169262,169264,169266,169268,169270,169272],{"class":69,"line":191},[67,169249,149823],{"class":73},[67,169251,64439],{"class":114},[67,169253,53203],{"class":73},[67,169255,151326],{"class":114},[67,169257,1868],{"class":73},[67,169259,70884],{"class":114},[67,169261,53203],{"class":73},[67,169263,2639],{"class":77},[67,169265,1868],{"class":73},[67,169267,152910],{"class":114},[67,169269,53203],{"class":73},[67,169271,2977],{"class":77},[67,169273,6749],{"class":73},[67,169275,169276,169278,169280,169282,169284,169286,169288,169290,169292,169294,169296,169298,169300],{"class":69,"line":202},[67,169277,149823],{"class":73},[67,169279,64439],{"class":114},[67,169281,53203],{"class":73},[67,169283,152374],{"class":114},[67,169285,1868],{"class":73},[67,169287,70884],{"class":114},[67,169289,53203],{"class":73},[67,169291,2614],{"class":77},[67,169293,1868],{"class":73},[67,169295,152910],{"class":114},[67,169297,53203],{"class":73},[67,169299,2800],{"class":77},[67,169301,6749],{"class":73},[67,169303,169304,169306,169308,169310,169312,169314,169316,169318,169320,169322,169324,169326,169328],{"class":69,"line":641},[67,169305,149823],{"class":73},[67,169307,64439],{"class":114},[67,169309,53203],{"class":73},[67,169311,161169],{"class":114},[67,169313,1868],{"class":73},[67,169315,70884],{"class":114},[67,169317,53203],{"class":73},[67,169319,2664],{"class":77},[67,169321,1868],{"class":73},[67,169323,152910],{"class":114},[67,169325,53203],{"class":73},[67,169327,2871],{"class":77},[67,169329,6749],{"class":73},[67,169331,169332],{"class":69,"line":655},[67,169333,35015],{"class":73},[67,169335,169336],{"class":69,"line":660},[67,169337,631],{"emptyLinePlaceholder":630},[67,169339,169340],{"class":69,"line":665},[67,169341,631],{"emptyLinePlaceholder":630},[67,169343,169344,169346,169349],{"class":69,"line":677},[67,169345,801],{"class":84},[67,169347,169348],{"class":110}," filter_students",[67,169350,169351],{"class":73},"(students, condition):\n",[67,169353,169354,169356,169358],{"class":69,"line":683},[67,169355,162661],{"class":73},[67,169357,85],{"class":84},[67,169359,53603],{"class":73},[67,169361,169362,169364,169366,169368],{"class":69,"line":689},[67,169363,935],{"class":84},[67,169365,153575],{"class":73},[67,169367,941],{"class":84},[67,169369,153580],{"class":73},[67,169371,169372,169374],{"class":69,"line":694},[67,169373,4329],{"class":84},[67,169375,169376],{"class":73}," condition(student):\n",[67,169378,169379],{"class":69,"line":700},[67,169380,169381],{"class":73},"            result.append(student)\n",[67,169383,169384,169386],{"class":69,"line":706},[67,169385,5910],{"class":84},[67,169387,169143],{"class":73},[67,169389,169390],{"class":69,"line":712},[67,169391,631],{"emptyLinePlaceholder":630},[67,169393,169394],{"class":69,"line":717},[67,169395,631],{"emptyLinePlaceholder":630},[67,169397,169398,169400,169402,169405,169407,169410,169412,169414,169416,169418],{"class":69,"line":723},[67,169399,167139],{"class":73},[67,169401,85],{"class":84},[67,169403,169404],{"class":73}," filter_students(students, ",[67,169406,168324],{"class":84},[67,169408,169409],{"class":73}," s: s[",[67,169411,152910],{"class":114},[67,169413,81],{"class":73},[67,169415,3553],{"class":84},[67,169417,159275],{"class":77},[67,169419,829],{"class":73},[67,169421,169422,169425,169427,169429,169431,169433,169435,169437,169439,169441],{"class":69,"line":729},[67,169423,169424],{"class":73},"excellent ",[67,169426,85],{"class":84},[67,169428,169404],{"class":73},[67,169430,168324],{"class":84},[67,169432,169409],{"class":73},[67,169434,152910],{"class":114},[67,169436,81],{"class":73},[67,169438,3553],{"class":84},[67,169440,159226],{"class":77},[67,169442,829],{"class":73},[67,169444,169445,169448,169450,169452,169454,169456,169458,169460,169462,169464],{"class":69,"line":735},[67,169446,169447],{"class":73},"under_age ",[67,169449,85],{"class":84},[67,169451,169404],{"class":73},[67,169453,168324],{"class":84},[67,169455,169409],{"class":73},[67,169457,70884],{"class":114},[67,169459,81],{"class":73},[67,169461,259],{"class":84},[67,169463,157723],{"class":77},[67,169465,829],{"class":73},[67,169467,169468],{"class":69,"line":741},[67,169469,631],{"emptyLinePlaceholder":630},[67,169471,169472,169474],{"class":69,"line":747},[67,169473,1626],{"class":77},[67,169475,169476],{"class":73},"(passed)\n",[67,169478,169479,169481],{"class":69,"line":753},[67,169480,1626],{"class":77},[67,169482,169483],{"class":73},"(excellent)\n",[67,169485,169486,169488],{"class":69,"line":758},[67,169487,1626],{"class":77},[67,169489,169490],{"class":73},"(under_age)\n",[14,169492,169494],{"id":169493},"_715-易错点","7.15 易错点",[26,169496,169497,169500,169508,169513,169524],{},[29,169498,169499],{},"默认参数不要写可变对象。",[29,169501,169502,169504,169505,169507],{},[32,169503,167970],{}," 是元组，",[32,169506,168085],{}," 是字典。",[29,169509,169510,169512],{},[32,169511,168324],{}," 只适合简单表达式。",[29,169514,169515,1264,169517,169519,169520,169523],{},[32,169516,75804],{},[32,169518,81811],{}," 的结果是迭代器，常用 ",[32,169521,169522],{},"list()"," 转换查看。",[29,169525,169526],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169528,169530],{"id":169529},"_716-本章练习","7.16 本章练习",[26,169532,169533,169540,169546,169551,169556],{},[29,169534,169535,169536,169539],{},"写函数 ",[32,169537,169538],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[29,169541,169535,169542,169545],{},[32,169543,169544],{},"print_user(**kwargs)","，输出用户所有字段。",[29,169547,106039,169548,169550],{},[32,169549,168324],{}," 对学生列表按年龄排序。",[29,169552,106039,169553,169555],{},[32,169554,81811],{}," 找出成绩不及格的学生。",[29,169557,169558],{},"写一个装饰器，统计函数执行前后的提示信息。",[1903,169560,169561],{},"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":63,"searchDepth":191,"depth":191,"links":169563},[169564,169565,169566,169567,169568,169569,169573,169574,169575,169576,169581,169582,169583,169584,169585,169586],{"id":167422,"depth":191,"text":167423},{"id":167536,"depth":191,"text":167537},{"id":167625,"depth":191,"text":167626},{"id":167687,"depth":191,"text":167688},{"id":167833,"depth":191,"text":167834},{"id":167960,"depth":191,"text":167961,"children":169570},[169571,169572],{"id":167964,"depth":202,"text":167965},{"id":168079,"depth":202,"text":168080},{"id":168160,"depth":191,"text":168161},{"id":168318,"depth":191,"text":168319},{"id":168486,"depth":191,"text":168487},{"id":168568,"depth":191,"text":168569,"children":169577},[169578,169579,169580],{"id":168572,"depth":202,"text":168573},{"id":168643,"depth":202,"text":168644},{"id":168720,"depth":202,"text":168721},{"id":168845,"depth":191,"text":168846},{"id":168935,"depth":191,"text":168936},{"id":169066,"depth":191,"text":169067},{"id":169216,"depth":191,"text":169217},{"id":169493,"depth":191,"text":169494},{"id":169529,"depth":191,"text":169530},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167414,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169593,"title":169594,"body":169595,"description":25173,"extension":1930,"meta":172114,"navigation":630,"path":172115,"seo":172116,"stem":172117,"__hash__":172118},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169596,"toc":172089},[169597,169600,169604,169607,169610,169641,169645,169649,169652,169679,169683,169686,169737,169740,169755,169758,169793,169797,169799,169823,169826,169886,169890,169894,169897,169954,169957,169977,169981,169984,170047,170051,170054,170110,170117,170141,170145,170148,170211,170215,170220,170271,170274,170278,170283,170350,170353,170435,170439,170444,170495,170498,170502,170505,170508,170516,170519,170565,170568,170614,170618,170624,170668,170671,170717,170720,170760,170763,170824,170828,170831,170921,170924,171066,171069,171136,171140,171143,171146,171287,171290,171368,171371,171547,171551,171553,171564,171566,171765,171769,172013,172017,172051,172055,172086],[10,169598,169594],{"id":169599},"_8-文件操作",[14,169601,169603],{"id":169602},"_81-文件操作的意义","8.1 文件操作的意义",[19,169605,169606],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169608,169609],{},"常见文件类型：",[26,169611,169612,169618,169624,169630,169636],{},[29,169613,169614,169617],{},[32,169615,169616],{},".txt","：普通文本。",[29,169619,169620,169623],{},[32,169621,169622],{},".csv","：表格文本。",[29,169625,169626,169629],{},[32,169627,169628],{},".json","：结构化数据。",[29,169631,169632,169635],{},[32,169633,169634],{},".log","：日志文件。",[29,169637,169638,169640],{},[32,169639,147790],{},"：Python 源代码。",[14,169642,169644],{"id":169643},"_82-路径","8.2 路径",[391,169646,169648],{"id":169647},"_821-相对路径","8.2.1 相对路径",[19,169650,169651],{},"相对当前运行目录：",[58,169653,169655],{"className":60,"code":169654,"language":62,"meta":63,"style":63},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[32,169656,169657],{"__ignoreMap":63},[67,169658,169659,169661,169663,169665,169667,169669,169671,169673,169675,169677],{"class":69,"line":70},[67,169660,88674],{"class":77},[67,169662,854],{"class":73},[67,169664,148234],{"class":114},[67,169666,1868],{"class":73},[67,169668,148239],{"class":114},[67,169670,1868],{"class":73},[67,169672,148244],{"class":7033},[67,169674,85],{"class":84},[67,169676,148249],{"class":114},[67,169678,829],{"class":73},[391,169680,169682],{"id":169681},"_822-绝对路径","8.2.2 绝对路径",[19,169684,169685],{},"从根目录或盘符开始：",[58,169687,169689],{"className":60,"code":169688,"language":62,"meta":63,"style":63},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[32,169690,169691,169714],{"__ignoreMap":63},[67,169692,169693,169695,169697,169700,169702,169704,169706,169708,169710,169712],{"class":69,"line":70},[67,169694,88674],{"class":77},[67,169696,854],{"class":73},[67,169698,169699],{"class":114},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[67,169701,1868],{"class":73},[67,169703,148239],{"class":114},[67,169705,1868],{"class":73},[67,169707,148244],{"class":7033},[67,169709,85],{"class":84},[67,169711,148249],{"class":114},[67,169713,829],{"class":73},[67,169715,169716,169718,169720,169723,169725,169727,169729,169731,169733,169735],{"class":69,"line":191},[67,169717,88674],{"class":77},[67,169719,854],{"class":73},[67,169721,169722],{"class":114},"\"D:\u002Fdata\u002Fdata.txt\"",[67,169724,1868],{"class":73},[67,169726,148239],{"class":114},[67,169728,1868],{"class":73},[67,169730,148244],{"class":7033},[67,169732,85],{"class":84},[67,169734,148249],{"class":114},[67,169736,829],{"class":73},[19,169738,169739],{},"Windows 路径建议写成：",[58,169741,169743],{"className":60,"code":169742,"language":62,"meta":63,"style":63},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[32,169744,169745],{"__ignoreMap":63},[67,169746,169747,169750,169752],{"class":69,"line":70},[67,169748,169749],{"class":73},"path ",[67,169751,85],{"class":84},[67,169753,169754],{"class":114}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169756,169757],{},"或原始字符串：",[58,169759,169761],{"className":60,"code":169760,"language":62,"meta":63,"style":63},"path = r\"D:\\data\\data.txt\"\n",[32,169762,169763],{"__ignoreMap":63},[67,169764,169765,169767,169769,169771,169773,169776,169779,169782,169784,169786,169788,169791],{"class":69,"line":70},[67,169766,169749],{"class":73},[67,169768,85],{"class":84},[67,169770,18918],{"class":84},[67,169772,2243],{"class":114},[67,169774,169775],{"class":49745},"D:",[67,169777,169778],{"class":77},"\\d",[67,169780,169781],{"class":49745},"ata",[67,169783,169778],{"class":77},[67,169785,169781],{"class":49745},[67,169787,2547],{"class":77},[67,169789,169790],{"class":49745},"txt",[67,169792,26923],{"class":114},[14,169794,169796],{"id":169795},"_83-open函数","8.3 open函数",[19,169798,7000],{},[58,169800,169802],{"className":60,"code":169801,"language":62,"meta":63,"style":63},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[32,169803,169804],{"__ignoreMap":63},[67,169805,169806,169808,169810,169812,169815,169817,169819,169821],{"class":69,"line":70},[67,169807,47122],{"class":7033},[67,169809,671],{"class":84},[67,169811,148229],{"class":77},[67,169813,169814],{"class":73},"(文件路径, 打开模式, ",[67,169816,148244],{"class":7033},[67,169818,85],{"class":84},[67,169820,148249],{"class":114},[67,169822,829],{"class":73},[19,169824,169825],{},"常见模式：",[399,169827,169828,169837],{},[402,169829,169830],{},[405,169831,169832,169835],{},[408,169833,169834],{},"模式",[408,169836,27658],{},[419,169838,169839,169848,169857,169866,169876],{},[405,169840,169841,169845],{},[424,169842,169843],{},[32,169844,2659],{},[424,169846,169847],{},"只读，文件不存在会报错",[405,169849,169850,169854],{},[424,169851,169852],{},[32,169853,2784],{},[424,169855,169856],{},"只写，文件不存在会创建，存在会清空",[405,169858,169859,169863],{},[424,169860,169861],{},[32,169862,2230],{},[424,169864,169865],{},"追加，文件不存在会创建",[405,169867,169868,169873],{},[424,169869,169870],{},[32,169871,169872],{},"rb",[424,169874,169875],{},"二进制只读",[405,169877,169878,169883],{},[424,169879,169880],{},[32,169881,169882],{},"wb",[424,169884,169885],{},"二进制只写",[14,169887,169889],{"id":169888},"_84-读取文件","8.4 读取文件",[391,169891,169893],{"id":169892},"_841-read","8.4.1 read",[19,169895,169896],{},"一次读取全部内容：",[58,169898,169900],{"className":60,"code":169899,"language":62,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[32,169901,169902,169928,169940,169947],{"__ignoreMap":63},[67,169903,169904,169906,169908,169910,169912,169914,169916,169918,169920,169922,169924,169926],{"class":69,"line":70},[67,169905,47122],{"class":7033},[67,169907,671],{"class":84},[67,169909,148229],{"class":77},[67,169911,854],{"class":73},[67,169913,148234],{"class":114},[67,169915,1868],{"class":73},[67,169917,148239],{"class":114},[67,169919,1868],{"class":73},[67,169921,148244],{"class":7033},[67,169923,85],{"class":84},[67,169925,148249],{"class":114},[67,169927,829],{"class":73},[67,169929,169930,169933,169935,169937],{"class":69,"line":191},[67,169931,169932],{"class":73},"content ",[67,169934,85],{"class":84},[67,169936,149591],{"class":7033},[67,169938,169939],{"class":73},".read()\n",[67,169941,169942,169944],{"class":69,"line":202},[67,169943,1626],{"class":77},[67,169945,169946],{"class":73},"(content)\n",[67,169948,169949,169951],{"class":69,"line":641},[67,169950,47122],{"class":7033},[67,169952,169953],{"class":73},".close()\n",[19,169955,169956],{},"可以指定读取字符数：",[58,169958,169960],{"className":60,"code":169959,"language":62,"meta":63,"style":63},"content = file.read(10)\n",[32,169961,169962],{"__ignoreMap":63},[67,169963,169964,169966,169968,169970,169973,169975],{"class":69,"line":70},[67,169965,169932],{"class":73},[67,169967,85],{"class":84},[67,169969,149591],{"class":7033},[67,169971,169972],{"class":73},".read(",[67,169974,2437],{"class":77},[67,169976,829],{"class":73},[391,169978,169980],{"id":169979},"_842-readline","8.4.2 readline",[19,169982,169983],{},"一次读取一行：",[58,169985,169987],{"className":60,"code":169986,"language":62,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[32,169988,169989,170015,170019,170030,170037,170041],{"__ignoreMap":63},[67,169990,169991,169993,169995,169997,169999,170001,170003,170005,170007,170009,170011,170013],{"class":69,"line":70},[67,169992,47122],{"class":7033},[67,169994,671],{"class":84},[67,169996,148229],{"class":77},[67,169998,854],{"class":73},[67,170000,148234],{"class":114},[67,170002,1868],{"class":73},[67,170004,148239],{"class":114},[67,170006,1868],{"class":73},[67,170008,148244],{"class":7033},[67,170010,85],{"class":84},[67,170012,148249],{"class":114},[67,170014,829],{"class":73},[67,170016,170017],{"class":69,"line":191},[67,170018,631],{"emptyLinePlaceholder":630},[67,170020,170021,170023,170025,170027],{"class":69,"line":202},[67,170022,148690],{"class":73},[67,170024,85],{"class":84},[67,170026,149591],{"class":7033},[67,170028,170029],{"class":73},".readline()\n",[67,170031,170032,170034],{"class":69,"line":641},[67,170033,1626],{"class":77},[67,170035,170036],{"class":73},"(line)\n",[67,170038,170039],{"class":69,"line":655},[67,170040,631],{"emptyLinePlaceholder":630},[67,170042,170043,170045],{"class":69,"line":660},[67,170044,47122],{"class":7033},[67,170046,169953],{"class":73},[391,170048,170050],{"id":170049},"_843-readlines","8.4.3 readlines",[19,170052,170053],{},"读取所有行，返回列表：",[58,170055,170057],{"className":60,"code":170056,"language":62,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[32,170058,170059,170085,170097,170104],{"__ignoreMap":63},[67,170060,170061,170063,170065,170067,170069,170071,170073,170075,170077,170079,170081,170083],{"class":69,"line":70},[67,170062,47122],{"class":7033},[67,170064,671],{"class":84},[67,170066,148229],{"class":77},[67,170068,854],{"class":73},[67,170070,148234],{"class":114},[67,170072,1868],{"class":73},[67,170074,148239],{"class":114},[67,170076,1868],{"class":73},[67,170078,148244],{"class":7033},[67,170080,85],{"class":84},[67,170082,148249],{"class":114},[67,170084,829],{"class":73},[67,170086,170087,170090,170092,170094],{"class":69,"line":191},[67,170088,170089],{"class":73},"lines ",[67,170091,85],{"class":84},[67,170093,149591],{"class":7033},[67,170095,170096],{"class":73},".readlines()\n",[67,170098,170099,170101],{"class":69,"line":202},[67,170100,1626],{"class":77},[67,170102,170103],{"class":73},"(lines)\n",[67,170105,170106,170108],{"class":69,"line":641},[67,170107,47122],{"class":7033},[67,170109,169953],{"class":73},[19,170111,170112,170113,170116],{},"每一行通常带有换行符，可以用 ",[32,170114,170115],{},"strip()"," 去掉：",[58,170118,170120],{"className":60,"code":170119,"language":62,"meta":63,"style":63},"for line in lines:\n    print(line.strip())\n",[32,170121,170122,170134],{"__ignoreMap":63},[67,170123,170124,170126,170129,170131],{"class":69,"line":70},[67,170125,1512],{"class":84},[67,170127,170128],{"class":73}," line ",[67,170130,941],{"class":84},[67,170132,170133],{"class":73}," lines:\n",[67,170135,170136,170138],{"class":69,"line":191},[67,170137,851],{"class":77},[67,170139,170140],{"class":73},"(line.strip())\n",[391,170142,170144],{"id":170143},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170146,170147],{},"推荐读取大文件时使用：",[58,170149,170151],{"className":60,"code":170150,"language":62,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[32,170152,170153,170179,170183,170195,170201,170205],{"__ignoreMap":63},[67,170154,170155,170157,170159,170161,170163,170165,170167,170169,170171,170173,170175,170177],{"class":69,"line":70},[67,170156,47122],{"class":7033},[67,170158,671],{"class":84},[67,170160,148229],{"class":77},[67,170162,854],{"class":73},[67,170164,148234],{"class":114},[67,170166,1868],{"class":73},[67,170168,148239],{"class":114},[67,170170,1868],{"class":73},[67,170172,148244],{"class":7033},[67,170174,85],{"class":84},[67,170176,148249],{"class":114},[67,170178,829],{"class":73},[67,170180,170181],{"class":69,"line":191},[67,170182,631],{"emptyLinePlaceholder":630},[67,170184,170185,170187,170189,170191,170193],{"class":69,"line":202},[67,170186,1512],{"class":84},[67,170188,170128],{"class":73},[67,170190,941],{"class":84},[67,170192,149591],{"class":7033},[67,170194,813],{"class":73},[67,170196,170197,170199],{"class":69,"line":641},[67,170198,851],{"class":77},[67,170200,170140],{"class":73},[67,170202,170203],{"class":69,"line":655},[67,170204,631],{"emptyLinePlaceholder":630},[67,170206,170207,170209],{"class":69,"line":660},[67,170208,47122],{"class":7033},[67,170210,169953],{"class":73},[14,170212,170214],{"id":170213},"_85-with语句","8.5 with语句",[19,170216,170217,170219],{},[32,170218,109271],{}," 会自动关闭文件，推荐使用。",[58,170221,170223],{"className":60,"code":170222,"language":62,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[32,170224,170225,170255,170265],{"__ignoreMap":63},[67,170226,170227,170229,170231,170233,170235,170237,170239,170241,170243,170245,170247,170249,170251,170253],{"class":69,"line":70},[67,170228,109271],{"class":84},[67,170230,148229],{"class":77},[67,170232,854],{"class":73},[67,170234,148234],{"class":114},[67,170236,1868],{"class":73},[67,170238,148239],{"class":114},[67,170240,1868],{"class":73},[67,170242,148244],{"class":7033},[67,170244,85],{"class":84},[67,170246,148249],{"class":114},[67,170248,15512],{"class":73},[67,170250,649],{"class":84},[67,170252,149591],{"class":7033},[67,170254,813],{"class":73},[67,170256,170257,170259,170261,170263],{"class":69,"line":191},[67,170258,148261],{"class":73},[67,170260,85],{"class":84},[67,170262,149591],{"class":7033},[67,170264,169939],{"class":73},[67,170266,170267,170269],{"class":69,"line":202},[67,170268,851],{"class":77},[67,170270,169946],{"class":73},[19,170272,170273],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170275,170277],{"id":170276},"_86-写入文件","8.6 写入文件",[19,170279,170280,170282],{},[32,170281,2784],{}," 模式会清空原文件。",[58,170284,170286],{"className":60,"code":170285,"language":62,"meta":63,"style":63},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[32,170287,170288,170318,170335],{"__ignoreMap":63},[67,170289,170290,170292,170294,170296,170298,170300,170302,170304,170306,170308,170310,170312,170314,170316],{"class":69,"line":70},[67,170291,109271],{"class":84},[67,170293,148229],{"class":77},[67,170295,854],{"class":73},[67,170297,148234],{"class":114},[67,170299,1868],{"class":73},[67,170301,153414],{"class":114},[67,170303,1868],{"class":73},[67,170305,148244],{"class":7033},[67,170307,85],{"class":84},[67,170309,148249],{"class":114},[67,170311,15512],{"class":73},[67,170313,649],{"class":84},[67,170315,149591],{"class":7033},[67,170317,813],{"class":73},[67,170319,170320,170323,170326,170329,170331,170333],{"class":69,"line":191},[67,170321,170322],{"class":7033},"    file",[67,170324,170325],{"class":73},".write(",[67,170327,170328],{"class":114},"\"hello",[67,170330,157963],{"class":77},[67,170332,2243],{"class":114},[67,170334,829],{"class":73},[67,170336,170337,170339,170341,170344,170346,170348],{"class":69,"line":202},[67,170338,170322],{"class":7033},[67,170340,170325],{"class":73},[67,170342,170343],{"class":114},"\"python",[67,170345,157963],{"class":77},[67,170347,2243],{"class":114},[67,170349,829],{"class":73},[19,170351,170352],{},"写入多行：",[58,170354,170356],{"className":60,"code":170355,"language":62,"meta":63,"style":63},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[32,170357,170358,170393,170397,170428],{"__ignoreMap":63},[67,170359,170360,170362,170364,170366,170369,170371,170373,170375,170378,170380,170382,170384,170387,170389,170391],{"class":69,"line":70},[67,170361,170089],{"class":73},[67,170363,85],{"class":84},[67,170365,53990],{"class":73},[67,170367,170368],{"class":114},"\"小明,18",[67,170370,157963],{"class":77},[67,170372,2243],{"class":114},[67,170374,1868],{"class":73},[67,170376,170377],{"class":114},"\"小红,17",[67,170379,157963],{"class":77},[67,170381,2243],{"class":114},[67,170383,1868],{"class":73},[67,170385,170386],{"class":114},"\"小刚,19",[67,170388,157963],{"class":77},[67,170390,2243],{"class":114},[67,170392,35015],{"class":73},[67,170394,170395],{"class":69,"line":191},[67,170396,631],{"emptyLinePlaceholder":630},[67,170398,170399,170401,170403,170405,170408,170410,170412,170414,170416,170418,170420,170422,170424,170426],{"class":69,"line":202},[67,170400,109271],{"class":84},[67,170402,148229],{"class":77},[67,170404,854],{"class":73},[67,170406,170407],{"class":114},"\"students.txt\"",[67,170409,1868],{"class":73},[67,170411,153414],{"class":114},[67,170413,1868],{"class":73},[67,170415,148244],{"class":7033},[67,170417,85],{"class":84},[67,170419,148249],{"class":114},[67,170421,15512],{"class":73},[67,170423,649],{"class":84},[67,170425,149591],{"class":7033},[67,170427,813],{"class":73},[67,170429,170430,170432],{"class":69,"line":641},[67,170431,170322],{"class":7033},[67,170433,170434],{"class":73},".writelines(lines)\n",[14,170436,170438],{"id":170437},"_87-追加文件","8.7 追加文件",[19,170440,170441,170443],{},[32,170442,2230],{}," 模式不会清空原内容，而是在末尾追加。",[58,170445,170447],{"className":60,"code":170446,"language":62,"meta":63,"style":63},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[32,170448,170449,170480],{"__ignoreMap":63},[67,170450,170451,170453,170455,170457,170460,170462,170464,170466,170468,170470,170472,170474,170476,170478],{"class":69,"line":70},[67,170452,109271],{"class":84},[67,170454,148229],{"class":77},[67,170456,854],{"class":73},[67,170458,170459],{"class":114},"\"log.txt\"",[67,170461,1868],{"class":73},[67,170463,166763],{"class":114},[67,170465,1868],{"class":73},[67,170467,148244],{"class":7033},[67,170469,85],{"class":84},[67,170471,148249],{"class":114},[67,170473,15512],{"class":73},[67,170475,649],{"class":84},[67,170477,149591],{"class":7033},[67,170479,813],{"class":73},[67,170481,170482,170484,170486,170489,170491,170493],{"class":69,"line":191},[67,170483,170322],{"class":7033},[67,170485,170325],{"class":73},[67,170487,170488],{"class":114},"\"程序启动",[67,170490,157963],{"class":77},[67,170492,2243],{"class":114},[67,170494,829],{"class":73},[19,170496,170497],{},"日志类文件常用追加模式。",[14,170499,170501],{"id":170500},"_88-文件编码","8.8 文件编码",[19,170503,170504],{},"编码决定文字如何保存为字节。",[19,170506,170507],{},"常见编码：",[26,170509,170510,170513],{},[29,170511,170512],{},"UTF-8：推荐。",[29,170514,170515],{},"GBK：部分 Windows 中文文件常见。",[19,170517,170518],{},"读取文件乱码时，可以尝试：",[58,170520,170522],{"className":60,"code":170521,"language":62,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[32,170523,170524,170555],{"__ignoreMap":63},[67,170525,170526,170528,170530,170532,170534,170536,170538,170540,170542,170544,170547,170549,170551,170553],{"class":69,"line":70},[67,170527,109271],{"class":84},[67,170529,148229],{"class":77},[67,170531,854],{"class":73},[67,170533,148234],{"class":114},[67,170535,1868],{"class":73},[67,170537,148239],{"class":114},[67,170539,1868],{"class":73},[67,170541,148244],{"class":7033},[67,170543,85],{"class":84},[67,170545,170546],{"class":114},"\"gbk\"",[67,170548,15512],{"class":73},[67,170550,649],{"class":84},[67,170552,149591],{"class":7033},[67,170554,813],{"class":73},[67,170556,170557,170559,170561,170563],{"class":69,"line":191},[67,170558,148261],{"class":73},[67,170560,85],{"class":84},[67,170562,149591],{"class":7033},[67,170564,169939],{"class":73},[19,170566,170567],{},"写文件时建议统一 UTF-8：",[58,170569,170571],{"className":60,"code":170570,"language":62,"meta":63,"style":63},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[32,170572,170573,170603],{"__ignoreMap":63},[67,170574,170575,170577,170579,170581,170583,170585,170587,170589,170591,170593,170595,170597,170599,170601],{"class":69,"line":70},[67,170576,109271],{"class":84},[67,170578,148229],{"class":77},[67,170580,854],{"class":73},[67,170582,148234],{"class":114},[67,170584,1868],{"class":73},[67,170586,153414],{"class":114},[67,170588,1868],{"class":73},[67,170590,148244],{"class":7033},[67,170592,85],{"class":84},[67,170594,148249],{"class":114},[67,170596,15512],{"class":73},[67,170598,649],{"class":84},[67,170600,149591],{"class":7033},[67,170602,813],{"class":73},[67,170604,170605,170607,170609,170612],{"class":69,"line":191},[67,170606,170322],{"class":7033},[67,170608,170325],{"class":73},[67,170610,170611],{"class":114},"\"中文内容\"",[67,170613,829],{"class":73},[14,170615,170617],{"id":170616},"_89-pathlib","8.9 pathlib",[19,170619,170620,170623],{},[32,170621,170622],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[58,170625,170627],{"className":60,"code":170626,"language":62,"meta":63,"style":63},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[32,170628,170629,170639,170643,170661],{"__ignoreMap":63},[67,170630,170631,170633,170635,170637],{"class":69,"line":70},[67,170632,32515],{"class":84},[67,170634,109749],{"class":73},[67,170636,622],{"class":84},[67,170638,109754],{"class":73},[67,170640,170641],{"class":69,"line":191},[67,170642,631],{"emptyLinePlaceholder":630},[67,170644,170645,170647,170649,170651,170654,170656,170658],{"class":69,"line":202},[67,170646,169749],{"class":73},[67,170648,85],{"class":84},[67,170650,109983],{"class":73},[67,170652,170653],{"class":114},"\"data\"",[67,170655,15512],{"class":73},[67,170657,2573],{"class":84},[67,170659,170660],{"class":114}," \"students.txt\"\n",[67,170662,170663,170665],{"class":69,"line":641},[67,170664,1626],{"class":77},[67,170666,170667],{"class":73},"(path)\n",[19,170669,170670],{},"创建目录：",[58,170672,170674],{"className":60,"code":170673,"language":62,"meta":63,"style":63},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[32,170675,170676,170686,170690,170703],{"__ignoreMap":63},[67,170677,170678,170680,170682,170684],{"class":69,"line":70},[67,170679,32515],{"class":84},[67,170681,109749],{"class":73},[67,170683,622],{"class":84},[67,170685,109754],{"class":73},[67,170687,170688],{"class":69,"line":191},[67,170689,631],{"emptyLinePlaceholder":630},[67,170691,170692,170695,170697,170699,170701],{"class":69,"line":202},[67,170693,170694],{"class":73},"data_dir ",[67,170696,85],{"class":84},[67,170698,109983],{"class":73},[67,170700,170653],{"class":114},[67,170702,829],{"class":73},[67,170704,170705,170708,170711,170713,170715],{"class":69,"line":641},[67,170706,170707],{"class":73},"data_dir.mkdir(",[67,170709,170710],{"class":7033},"exist_ok",[67,170712,85],{"class":84},[67,170714,33248],{"class":77},[67,170716,829],{"class":73},[19,170718,170719],{},"判断文件是否存在：",[58,170721,170723],{"className":60,"code":170722,"language":62,"meta":63,"style":63},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[32,170724,170725,170738,170742,170749],{"__ignoreMap":63},[67,170726,170727,170729,170731,170733,170736],{"class":69,"line":70},[67,170728,169749],{"class":73},[67,170730,85],{"class":84},[67,170732,109983],{"class":73},[67,170734,170735],{"class":114},"\"data\u002Fstudents.txt\"",[67,170737,829],{"class":73},[67,170739,170740],{"class":69,"line":191},[67,170741,631],{"emptyLinePlaceholder":630},[67,170743,170744,170746],{"class":69,"line":202},[67,170745,1096],{"class":84},[67,170747,170748],{"class":73}," path.exists():\n",[67,170750,170751,170753,170755,170758],{"class":69,"line":641},[67,170752,851],{"class":77},[67,170754,854],{"class":73},[67,170756,170757],{"class":114},"\"文件存在\"",[67,170759,829],{"class":73},[19,170761,170762],{},"读写文本：",[58,170764,170766],{"className":60,"code":170765,"language":62,"meta":63,"style":63},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[32,170767,170768,170780,170784,170801,170818],{"__ignoreMap":63},[67,170769,170770,170772,170774,170776,170778],{"class":69,"line":70},[67,170771,169749],{"class":73},[67,170773,85],{"class":84},[67,170775,109983],{"class":73},[67,170777,148234],{"class":114},[67,170779,829],{"class":73},[67,170781,170782],{"class":69,"line":191},[67,170783,631],{"emptyLinePlaceholder":630},[67,170785,170786,170789,170791,170793,170795,170797,170799],{"class":69,"line":202},[67,170787,170788],{"class":73},"path.write_text(",[67,170790,147314],{"class":114},[67,170792,1868],{"class":73},[67,170794,148244],{"class":7033},[67,170796,85],{"class":84},[67,170798,148249],{"class":114},[67,170800,829],{"class":73},[67,170802,170803,170805,170807,170810,170812,170814,170816],{"class":69,"line":641},[67,170804,169932],{"class":73},[67,170806,85],{"class":84},[67,170808,170809],{"class":73}," path.read_text(",[67,170811,148244],{"class":7033},[67,170813,85],{"class":84},[67,170815,148249],{"class":114},[67,170817,829],{"class":73},[67,170819,170820,170822],{"class":69,"line":655},[67,170821,1626],{"class":77},[67,170823,169946],{"class":73},[14,170825,170827],{"id":170826},"_810-json文件","8.10 JSON文件",[19,170829,170830],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[58,170832,170834],{"className":60,"code":170833,"language":62,"meta":63,"style":63},"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",[32,170835,170836,170842,170846,170854,170864,170874,170882,170886,170890,170915],{"__ignoreMap":63},[67,170837,170838,170840],{"class":69,"line":70},[67,170839,622],{"class":84},[67,170841,148529],{"class":73},[67,170843,170844],{"class":69,"line":191},[67,170845,631],{"emptyLinePlaceholder":630},[67,170847,170848,170850,170852],{"class":69,"line":202},[67,170849,150919],{"class":73},[67,170851,85],{"class":84},[67,170853,17369],{"class":73},[67,170855,170856,170858,170860,170862],{"class":69,"line":641},[67,170857,148458],{"class":114},[67,170859,53203],{"class":73},[67,170861,151326],{"class":114},[67,170863,33238],{"class":73},[67,170865,170866,170868,170870,170872],{"class":69,"line":655},[67,170867,165975],{"class":114},[67,170869,53203],{"class":73},[67,170871,2639],{"class":77},[67,170873,33238],{"class":73},[67,170875,170876,170878,170880],{"class":69,"line":660},[67,170877,165986],{"class":114},[67,170879,53203],{"class":73},[67,170881,165991],{"class":77},[67,170883,170884],{"class":69,"line":665},[67,170885,3419],{"class":73},[67,170887,170888],{"class":69,"line":677},[67,170889,631],{"emptyLinePlaceholder":630},[67,170891,170892,170894,170896,170899,170901,170903,170905,170907,170909,170911,170913],{"class":69,"line":683},[67,170893,157882],{"class":73},[67,170895,85],{"class":84},[67,170897,170898],{"class":73}," json.dumps(student, ",[67,170900,148575],{"class":7033},[67,170902,85],{"class":84},[67,170904,35756],{"class":77},[67,170906,1868],{"class":73},[67,170908,153450],{"class":7033},[67,170910,85],{"class":84},[67,170912,2077],{"class":77},[67,170914,829],{"class":73},[67,170916,170917,170919],{"class":69,"line":689},[67,170918,1626],{"class":77},[67,170920,165509],{"class":73},[19,170922,170923],{},"写入 JSON 文件：",[58,170925,170927],{"className":60,"code":170926,"language":62,"meta":63,"style":63},"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",[32,170928,170929,170935,170939,170947,170975,171003,171007,171011,171041],{"__ignoreMap":63},[67,170930,170931,170933],{"class":69,"line":70},[67,170932,622],{"class":84},[67,170934,148529],{"class":73},[67,170936,170937],{"class":69,"line":191},[67,170938,631],{"emptyLinePlaceholder":630},[67,170940,170941,170943,170945],{"class":69,"line":202},[67,170942,161154],{"class":73},[67,170944,85],{"class":84},[67,170946,57208],{"class":73},[67,170948,170949,170951,170953,170955,170957,170959,170961,170963,170965,170967,170969,170971,170973],{"class":69,"line":641},[67,170950,149823],{"class":73},[67,170952,64439],{"class":114},[67,170954,53203],{"class":73},[67,170956,151326],{"class":114},[67,170958,1868],{"class":73},[67,170960,70884],{"class":114},[67,170962,53203],{"class":73},[67,170964,2639],{"class":77},[67,170966,1868],{"class":73},[67,170968,152910],{"class":114},[67,170970,53203],{"class":73},[67,170972,2977],{"class":77},[67,170974,6749],{"class":73},[67,170976,170977,170979,170981,170983,170985,170987,170989,170991,170993,170995,170997,170999,171001],{"class":69,"line":655},[67,170978,149823],{"class":73},[67,170980,64439],{"class":114},[67,170982,53203],{"class":73},[67,170984,152374],{"class":114},[67,170986,1868],{"class":73},[67,170988,70884],{"class":114},[67,170990,53203],{"class":73},[67,170992,2614],{"class":77},[67,170994,1868],{"class":73},[67,170996,152910],{"class":114},[67,170998,53203],{"class":73},[67,171000,2800],{"class":77},[67,171002,6749],{"class":73},[67,171004,171005],{"class":69,"line":660},[67,171006,35015],{"class":73},[67,171008,171009],{"class":69,"line":665},[67,171010,631],{"emptyLinePlaceholder":630},[67,171012,171013,171015,171017,171019,171021,171023,171025,171027,171029,171031,171033,171035,171037,171039],{"class":69,"line":677},[67,171014,109271],{"class":84},[67,171016,148229],{"class":77},[67,171018,854],{"class":73},[67,171020,153269],{"class":114},[67,171022,1868],{"class":73},[67,171024,153414],{"class":114},[67,171026,1868],{"class":73},[67,171028,148244],{"class":7033},[67,171030,85],{"class":84},[67,171032,148249],{"class":114},[67,171034,15512],{"class":73},[67,171036,649],{"class":84},[67,171038,149591],{"class":7033},[67,171040,813],{"class":73},[67,171042,171043,171046,171048,171050,171052,171054,171056,171058,171060,171062,171064],{"class":69,"line":683},[67,171044,171045],{"class":73},"    json.dump(students, ",[67,171047,47122],{"class":7033},[67,171049,1868],{"class":73},[67,171051,148575],{"class":7033},[67,171053,85],{"class":84},[67,171055,35756],{"class":77},[67,171057,1868],{"class":73},[67,171059,153450],{"class":7033},[67,171061,85],{"class":84},[67,171063,2077],{"class":77},[67,171065,829],{"class":73},[19,171067,171068],{},"读取 JSON 文件：",[58,171070,171072],{"className":60,"code":171071,"language":62,"meta":63,"style":63},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[32,171073,171074,171080,171084,171114,171126,171130],{"__ignoreMap":63},[67,171075,171076,171078],{"class":69,"line":70},[67,171077,622],{"class":84},[67,171079,148529],{"class":73},[67,171081,171082],{"class":69,"line":191},[67,171083,631],{"emptyLinePlaceholder":630},[67,171085,171086,171088,171090,171092,171094,171096,171098,171100,171102,171104,171106,171108,171110,171112],{"class":69,"line":202},[67,171087,109271],{"class":84},[67,171089,148229],{"class":77},[67,171091,854],{"class":73},[67,171093,153269],{"class":114},[67,171095,1868],{"class":73},[67,171097,148239],{"class":114},[67,171099,1868],{"class":73},[67,171101,148244],{"class":7033},[67,171103,85],{"class":84},[67,171105,148249],{"class":114},[67,171107,15512],{"class":73},[67,171109,649],{"class":84},[67,171111,149591],{"class":7033},[67,171113,813],{"class":73},[67,171115,171116,171118,171120,171122,171124],{"class":69,"line":641},[67,171117,154475],{"class":73},[67,171119,85],{"class":84},[67,171121,149602],{"class":73},[67,171123,47122],{"class":7033},[67,171125,829],{"class":73},[67,171127,171128],{"class":69,"line":655},[67,171129,631],{"emptyLinePlaceholder":630},[67,171131,171132,171134],{"class":69,"line":660},[67,171133,1626],{"class":77},[67,171135,166433],{"class":73},[14,171137,171139],{"id":171138},"_811-csv文件","8.11 CSV文件",[19,171141,171142],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171144,171145],{},"写入 CSV：",[58,171147,171149],{"className":60,"code":171148,"language":62,"meta":63,"style":63},"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",[32,171150,171151,171158,171162,171170,171188,171204,171220,171224,171228,171268,171282],{"__ignoreMap":63},[67,171152,171153,171155],{"class":69,"line":70},[67,171154,622],{"class":84},[67,171156,171157],{"class":73}," csv\n",[67,171159,171160],{"class":69,"line":191},[67,171161,631],{"emptyLinePlaceholder":630},[67,171163,171164,171166,171168],{"class":69,"line":202},[67,171165,161154],{"class":73},[67,171167,85],{"class":84},[67,171169,57208],{"class":73},[67,171171,171172,171175,171177,171179,171181,171183,171186],{"class":69,"line":641},[67,171173,171174],{"class":73},"    [",[67,171176,74859],{"class":114},[67,171178,1868],{"class":73},[67,171180,74892],{"class":114},[67,171182,1868],{"class":73},[67,171184,171185],{"class":114},"\"成绩\"",[67,171187,89595],{"class":73},[67,171189,171190,171192,171194,171196,171198,171200,171202],{"class":69,"line":655},[67,171191,171174],{"class":73},[67,171193,151326],{"class":114},[67,171195,1868],{"class":73},[67,171197,2639],{"class":77},[67,171199,1868],{"class":73},[67,171201,2977],{"class":77},[67,171203,89595],{"class":73},[67,171205,171206,171208,171210,171212,171214,171216,171218],{"class":69,"line":660},[67,171207,171174],{"class":73},[67,171209,152374],{"class":114},[67,171211,1868],{"class":73},[67,171213,2614],{"class":77},[67,171215,1868],{"class":73},[67,171217,2800],{"class":77},[67,171219,89595],{"class":73},[67,171221,171222],{"class":69,"line":665},[67,171223,35015],{"class":73},[67,171225,171226],{"class":69,"line":677},[67,171227,631],{"emptyLinePlaceholder":630},[67,171229,171230,171232,171234,171236,171239,171241,171243,171245,171247,171249,171251,171253,171256,171258,171260,171262,171264,171266],{"class":69,"line":683},[67,171231,109271],{"class":84},[67,171233,148229],{"class":77},[67,171235,854],{"class":73},[67,171237,171238],{"class":114},"\"students.csv\"",[67,171240,1868],{"class":73},[67,171242,153414],{"class":114},[67,171244,1868],{"class":73},[67,171246,148244],{"class":7033},[67,171248,85],{"class":84},[67,171250,148249],{"class":114},[67,171252,1868],{"class":73},[67,171254,171255],{"class":7033},"newline",[67,171257,85],{"class":84},[67,171259,9468],{"class":114},[67,171261,15512],{"class":73},[67,171263,649],{"class":84},[67,171265,149591],{"class":7033},[67,171267,813],{"class":73},[67,171269,171270,171273,171275,171278,171280],{"class":69,"line":689},[67,171271,171272],{"class":73},"    writer ",[67,171274,85],{"class":84},[67,171276,171277],{"class":73}," csv.writer(",[67,171279,47122],{"class":7033},[67,171281,829],{"class":73},[67,171283,171284],{"class":69,"line":694},[67,171285,171286],{"class":73},"    writer.writerows(students)\n",[19,171288,171289],{},"读取 CSV：",[58,171291,171293],{"className":60,"code":171292,"language":62,"meta":63,"style":63},"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",[32,171294,171295,171301,171305,171335,171349,171361],{"__ignoreMap":63},[67,171296,171297,171299],{"class":69,"line":70},[67,171298,622],{"class":84},[67,171300,171157],{"class":73},[67,171302,171303],{"class":69,"line":191},[67,171304,631],{"emptyLinePlaceholder":630},[67,171306,171307,171309,171311,171313,171315,171317,171319,171321,171323,171325,171327,171329,171331,171333],{"class":69,"line":202},[67,171308,109271],{"class":84},[67,171310,148229],{"class":77},[67,171312,854],{"class":73},[67,171314,171238],{"class":114},[67,171316,1868],{"class":73},[67,171318,148239],{"class":114},[67,171320,1868],{"class":73},[67,171322,148244],{"class":7033},[67,171324,85],{"class":84},[67,171326,148249],{"class":114},[67,171328,15512],{"class":73},[67,171330,649],{"class":84},[67,171332,149591],{"class":7033},[67,171334,813],{"class":73},[67,171336,171337,171340,171342,171345,171347],{"class":69,"line":641},[67,171338,171339],{"class":73},"    reader ",[67,171341,85],{"class":84},[67,171343,171344],{"class":73}," csv.reader(",[67,171346,47122],{"class":7033},[67,171348,829],{"class":73},[67,171350,171351,171353,171356,171358],{"class":69,"line":655},[67,171352,935],{"class":84},[67,171354,171355],{"class":73}," row ",[67,171357,941],{"class":84},[67,171359,171360],{"class":73}," reader:\n",[67,171362,171363,171365],{"class":69,"line":660},[67,171364,34220],{"class":77},[67,171366,171367],{"class":73},"(row)\n",[19,171369,171370],{},"使用字典写入：",[58,171372,171374],{"className":60,"code":171373,"language":62,"meta":63,"style":63},"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",[32,171375,171376,171382,171386,171394,171422,171450,171454,171458,171496,171517,171538,171543],{"__ignoreMap":63},[67,171377,171378,171380],{"class":69,"line":70},[67,171379,622],{"class":84},[67,171381,171157],{"class":73},[67,171383,171384],{"class":69,"line":191},[67,171385,631],{"emptyLinePlaceholder":630},[67,171387,171388,171390,171392],{"class":69,"line":202},[67,171389,161154],{"class":73},[67,171391,85],{"class":84},[67,171393,57208],{"class":73},[67,171395,171396,171398,171400,171402,171404,171406,171408,171410,171412,171414,171416,171418,171420],{"class":69,"line":641},[67,171397,149823],{"class":73},[67,171399,64439],{"class":114},[67,171401,53203],{"class":73},[67,171403,151326],{"class":114},[67,171405,1868],{"class":73},[67,171407,70884],{"class":114},[67,171409,53203],{"class":73},[67,171411,2639],{"class":77},[67,171413,1868],{"class":73},[67,171415,152910],{"class":114},[67,171417,53203],{"class":73},[67,171419,2977],{"class":77},[67,171421,6749],{"class":73},[67,171423,171424,171426,171428,171430,171432,171434,171436,171438,171440,171442,171444,171446,171448],{"class":69,"line":655},[67,171425,149823],{"class":73},[67,171427,64439],{"class":114},[67,171429,53203],{"class":73},[67,171431,152374],{"class":114},[67,171433,1868],{"class":73},[67,171435,70884],{"class":114},[67,171437,53203],{"class":73},[67,171439,2614],{"class":77},[67,171441,1868],{"class":73},[67,171443,152910],{"class":114},[67,171445,53203],{"class":73},[67,171447,2800],{"class":77},[67,171449,6749],{"class":73},[67,171451,171452],{"class":69,"line":660},[67,171453,35015],{"class":73},[67,171455,171456],{"class":69,"line":665},[67,171457,631],{"emptyLinePlaceholder":630},[67,171459,171460,171462,171464,171466,171468,171470,171472,171474,171476,171478,171480,171482,171484,171486,171488,171490,171492,171494],{"class":69,"line":677},[67,171461,109271],{"class":84},[67,171463,148229],{"class":77},[67,171465,854],{"class":73},[67,171467,171238],{"class":114},[67,171469,1868],{"class":73},[67,171471,153414],{"class":114},[67,171473,1868],{"class":73},[67,171475,148244],{"class":7033},[67,171477,85],{"class":84},[67,171479,148249],{"class":114},[67,171481,1868],{"class":73},[67,171483,171255],{"class":7033},[67,171485,85],{"class":84},[67,171487,9468],{"class":114},[67,171489,15512],{"class":73},[67,171491,649],{"class":84},[67,171493,149591],{"class":7033},[67,171495,813],{"class":73},[67,171497,171498,171501,171503,171505,171507,171509,171511,171513,171515],{"class":69,"line":683},[67,171499,171500],{"class":73},"    fieldnames ",[67,171502,85],{"class":84},[67,171504,53990],{"class":73},[67,171506,64439],{"class":114},[67,171508,1868],{"class":73},[67,171510,70884],{"class":114},[67,171512,1868],{"class":73},[67,171514,152910],{"class":114},[67,171516,35015],{"class":73},[67,171518,171519,171521,171523,171526,171528,171530,171533,171535],{"class":69,"line":689},[67,171520,171272],{"class":73},[67,171522,85],{"class":84},[67,171524,171525],{"class":73}," csv.DictWriter(",[67,171527,47122],{"class":7033},[67,171529,1868],{"class":73},[67,171531,171532],{"class":7033},"fieldnames",[67,171534,85],{"class":84},[67,171536,171537],{"class":73},"fieldnames)\n",[67,171539,171540],{"class":69,"line":694},[67,171541,171542],{"class":73},"    writer.writeheader()\n",[67,171544,171545],{"class":69,"line":700},[67,171546,171286],{"class":73},[14,171548,171550],{"id":171549},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171552,124730],{},[26,171554,171555,171558,171561],{},[29,171556,171557],{},"读取文本文件。",[29,171559,171560],{},"统计每个单词出现次数。",[29,171562,171563],{},"输出出现次数最多的前 10 个单词。",[19,171565,11835],{},[58,171567,171569],{"className":60,"code":171568,"language":62,"meta":63,"style":63},"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",[32,171570,171571,171581,171585,171598,171614,171618,171628,171637,171641,171653,171673,171682,171686,171704,171708,171738,171742,171758],{"__ignoreMap":63},[67,171572,171573,171575,171577,171579],{"class":69,"line":70},[67,171574,32515],{"class":84},[67,171576,109749],{"class":73},[67,171578,622],{"class":84},[67,171580,109754],{"class":73},[67,171582,171583],{"class":69,"line":191},[67,171584,631],{"emptyLinePlaceholder":630},[67,171586,171587,171589,171591,171593,171596],{"class":69,"line":202},[67,171588,169749],{"class":73},[67,171590,85],{"class":84},[67,171592,109983],{"class":73},[67,171594,171595],{"class":114},"\"article.txt\"",[67,171597,829],{"class":73},[67,171599,171600,171602,171604,171606,171608,171610,171612],{"class":69,"line":641},[67,171601,169932],{"class":73},[67,171603,85],{"class":84},[67,171605,170809],{"class":73},[67,171607,148244],{"class":7033},[67,171609,85],{"class":84},[67,171611,148249],{"class":114},[67,171613,829],{"class":73},[67,171615,171616],{"class":69,"line":655},[67,171617,631],{"emptyLinePlaceholder":630},[67,171619,171620,171623,171625],{"class":69,"line":660},[67,171621,171622],{"class":73},"words ",[67,171624,85],{"class":84},[67,171626,171627],{"class":73}," content.lower().split()\n",[67,171629,171630,171633,171635],{"class":69,"line":665},[67,171631,171632],{"class":73},"counter ",[67,171634,85],{"class":84},[67,171636,89627],{"class":73},[67,171638,171639],{"class":69,"line":677},[67,171640,631],{"emptyLinePlaceholder":630},[67,171642,171643,171645,171648,171650],{"class":69,"line":683},[67,171644,1512],{"class":84},[67,171646,171647],{"class":73}," word ",[67,171649,941],{"class":84},[67,171651,171652],{"class":73}," words:\n",[67,171654,171655,171658,171660,171663,171666,171668,171671],{"class":69,"line":689},[67,171656,171657],{"class":73},"    word ",[67,171659,85],{"class":84},[67,171661,171662],{"class":73}," word.strip(",[67,171664,171665],{"class":114},"\".,!?;:",[67,171667,157933],{"class":77},[67,171669,171670],{"class":114},"'()[]\"",[67,171672,829],{"class":73},[67,171674,171675,171677,171679],{"class":69,"line":694},[67,171676,897],{"class":84},[67,171678,40698],{"class":84},[67,171680,171681],{"class":73}," word:\n",[67,171683,171684],{"class":69,"line":700},[67,171685,149950],{"class":84},[67,171687,171688,171691,171693,171696,171698,171700,171702],{"class":69,"line":706},[67,171689,171690],{"class":73},"    counter[word] ",[67,171692,85],{"class":84},[67,171694,171695],{"class":73}," counter.get(word, ",[67,171697,78],{"class":77},[67,171699,15512],{"class":73},[67,171701,2471],{"class":84},[67,171703,57460],{"class":77},[67,171705,171706],{"class":69,"line":712},[67,171707,631],{"emptyLinePlaceholder":630},[67,171709,171710,171713,171715,171717,171720,171722,171724,171726,171728,171730,171732,171734,171736],{"class":69,"line":717},[67,171711,171712],{"class":73},"items ",[67,171714,85],{"class":84},[67,171716,165042],{"class":77},[67,171718,171719],{"class":73},"(counter.items(), ",[67,171721,155384],{"class":7033},[67,171723,155387],{"class":84},[67,171725,155390],{"class":73},[67,171727,2209],{"class":77},[67,171729,113640],{"class":73},[67,171731,164966],{"class":7033},[67,171733,85],{"class":84},[67,171735,33248],{"class":77},[67,171737,829],{"class":73},[67,171739,171740],{"class":69,"line":723},[67,171741,631],{"emptyLinePlaceholder":630},[67,171743,171744,171746,171749,171751,171754,171756],{"class":69,"line":729},[67,171745,1512],{"class":84},[67,171747,171748],{"class":73}," word, count ",[67,171750,941],{"class":84},[67,171752,171753],{"class":73}," items[:",[67,171755,2437],{"class":77},[67,171757,167193],{"class":73},[67,171759,171760,171762],{"class":69,"line":735},[67,171761,851],{"class":77},[67,171763,171764],{"class":73},"(word, count)\n",[14,171766,171768],{"id":171767},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[58,171770,171772],{"className":60,"code":171771,"language":62,"meta":63,"style":63},"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",[32,171773,171774,171780,171790,171794,171806,171810,171814,171822,171832,171838,171842,171872,171882,171886,171890,171898,171928,171952,171956,171960,171968,171997,172002],{"__ignoreMap":63},[67,171775,171776,171778],{"class":69,"line":70},[67,171777,622],{"class":84},[67,171779,148529],{"class":73},[67,171781,171782,171784,171786,171788],{"class":69,"line":191},[67,171783,32515],{"class":84},[67,171785,109749],{"class":73},[67,171787,622],{"class":84},[67,171789,109754],{"class":73},[67,171791,171792],{"class":69,"line":202},[67,171793,631],{"emptyLinePlaceholder":630},[67,171795,171796,171798,171800,171802,171804],{"class":69,"line":641},[67,171797,153262],{"class":77},[67,171799,671],{"class":84},[67,171801,109983],{"class":73},[67,171803,153269],{"class":114},[67,171805,829],{"class":73},[67,171807,171808],{"class":69,"line":655},[67,171809,631],{"emptyLinePlaceholder":630},[67,171811,171812],{"class":69,"line":660},[67,171813,631],{"emptyLinePlaceholder":630},[67,171815,171816,171818,171820],{"class":69,"line":665},[67,171817,801],{"class":84},[67,171819,153286],{"class":110},[67,171821,33723],{"class":73},[67,171823,171824,171826,171828,171830],{"class":69,"line":677},[67,171825,897],{"class":84},[67,171827,40698],{"class":84},[67,171829,153297],{"class":77},[67,171831,153300],{"class":73},[67,171833,171834,171836],{"class":69,"line":683},[67,171835,16550],{"class":84},[67,171837,53603],{"class":73},[67,171839,171840],{"class":69,"line":689},[67,171841,631],{"emptyLinePlaceholder":630},[67,171843,171844,171846,171848,171850,171852,171854,171856,171858,171860,171862,171864,171866,171868,171870],{"class":69,"line":694},[67,171845,35947],{"class":84},[67,171847,148229],{"class":77},[67,171849,854],{"class":73},[67,171851,153262],{"class":77},[67,171853,1868],{"class":73},[67,171855,148239],{"class":114},[67,171857,1868],{"class":73},[67,171859,148244],{"class":7033},[67,171861,85],{"class":84},[67,171863,148249],{"class":114},[67,171865,15512],{"class":73},[67,171867,649],{"class":84},[67,171869,149591],{"class":7033},[67,171871,813],{"class":73},[67,171873,171874,171876,171878,171880],{"class":69,"line":700},[67,171875,16550],{"class":84},[67,171877,149602],{"class":73},[67,171879,47122],{"class":7033},[67,171881,829],{"class":73},[67,171883,171884],{"class":69,"line":706},[67,171885,631],{"emptyLinePlaceholder":630},[67,171887,171888],{"class":69,"line":712},[67,171889,631],{"emptyLinePlaceholder":630},[67,171891,171892,171894,171896],{"class":69,"line":717},[67,171893,801],{"class":84},[67,171895,153396],{"class":110},[67,171897,153399],{"class":73},[67,171899,171900,171902,171904,171906,171908,171910,171912,171914,171916,171918,171920,171922,171924,171926],{"class":69,"line":723},[67,171901,35947],{"class":84},[67,171903,148229],{"class":77},[67,171905,854],{"class":73},[67,171907,153262],{"class":77},[67,171909,1868],{"class":73},[67,171911,153414],{"class":114},[67,171913,1868],{"class":73},[67,171915,148244],{"class":7033},[67,171917,85],{"class":84},[67,171919,148249],{"class":114},[67,171921,15512],{"class":73},[67,171923,649],{"class":84},[67,171925,149591],{"class":7033},[67,171927,813],{"class":73},[67,171929,171930,171932,171934,171936,171938,171940,171942,171944,171946,171948,171950],{"class":69,"line":729},[67,171931,153435],{"class":73},[67,171933,47122],{"class":7033},[67,171935,1868],{"class":73},[67,171937,148575],{"class":7033},[67,171939,85],{"class":84},[67,171941,35756],{"class":77},[67,171943,1868],{"class":73},[67,171945,153450],{"class":7033},[67,171947,85],{"class":84},[67,171949,2077],{"class":77},[67,171951,829],{"class":73},[67,171953,171954],{"class":69,"line":735},[67,171955,631],{"emptyLinePlaceholder":630},[67,171957,171958],{"class":69,"line":741},[67,171959,631],{"emptyLinePlaceholder":630},[67,171961,171962,171964,171966],{"class":69,"line":747},[67,171963,161154],{"class":73},[67,171965,85],{"class":84},[67,171967,154480],{"class":73},[67,171969,171970,171973,171975,171977,171979,171981,171983,171985,171987,171989,171991,171993,171995],{"class":69,"line":753},[67,171971,171972],{"class":73},"students.append({",[67,171974,64439],{"class":114},[67,171976,53203],{"class":73},[67,171978,151326],{"class":114},[67,171980,1868],{"class":73},[67,171982,70884],{"class":114},[67,171984,53203],{"class":73},[67,171986,2639],{"class":77},[67,171988,1868],{"class":73},[67,171990,152910],{"class":114},[67,171992,53203],{"class":73},[67,171994,2977],{"class":77},[67,171996,166590],{"class":73},[67,171998,171999],{"class":69,"line":758},[67,172000,172001],{"class":73},"save_students(students)\n",[67,172003,172004,172006,172008,172011],{"class":69,"line":764},[67,172005,1626],{"class":77},[67,172007,854],{"class":73},[67,172009,172010],{"class":114},"\"保存成功\"",[67,172012,829],{"class":73},[14,172014,172016],{"id":172015},"_814-易错点","8.14 易错点",[26,172018,172019,172023,172029,172034,172041,172048],{},[29,172020,172021,170282],{},[32,172022,2784],{},[29,172024,172025,172026,230],{},"读写中文要指定 ",[32,172027,172028],{},"encoding=\"utf-8\"",[29,172030,172031,172032,230],{},"打开文件后要关闭，推荐使用 ",[32,172033,109271],{},[29,172035,172036,172037,172040],{},"读取大文件不要直接 ",[32,172038,172039],{},"read()"," 全部内容。",[29,172042,172043,172044,172047],{},"Windows 写 CSV 时建议加 ",[32,172045,172046],{},"newline=\"\"","，避免空行。",[29,172049,172050],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172052,172054],{"id":172053},"_815-本章练习","8.15 本章练习",[26,172056,172057,172064,172069,172072,172075],{},[29,172058,172059,172060,172063],{},"写入一个 ",[32,172061,172062],{},"students.txt","，每行保存一个学生姓名。",[29,172065,106028,172066,172068],{},[32,172067,172062],{}," 并输出所有学生。",[29,172070,172071],{},"把学生列表保存为 JSON 文件。",[29,172073,172074],{},"从 JSON 文件读取学生数据，计算平均分。",[29,172076,172077,172078,172081,172082,172085],{},"写一个日志函数 ",[32,172079,172080],{},"write_log(message)","，每次调用向 ",[32,172083,172084],{},"app.log"," 追加一行。",[1903,172087,172088],{},"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":63,"searchDepth":191,"depth":191,"links":172090},[172091,172092,172096,172097,172103,172104,172105,172106,172107,172108,172109,172110,172111,172112,172113],{"id":169602,"depth":191,"text":169603},{"id":169643,"depth":191,"text":169644,"children":172093},[172094,172095],{"id":169647,"depth":202,"text":169648},{"id":169681,"depth":202,"text":169682},{"id":169795,"depth":191,"text":169796},{"id":169888,"depth":191,"text":169889,"children":172098},[172099,172100,172101,172102],{"id":169892,"depth":202,"text":169893},{"id":169979,"depth":202,"text":169980},{"id":170049,"depth":202,"text":170050},{"id":170143,"depth":202,"text":170144},{"id":170213,"depth":191,"text":170214},{"id":170276,"depth":191,"text":170277},{"id":170437,"depth":191,"text":170438},{"id":170500,"depth":191,"text":170501},{"id":170616,"depth":191,"text":170617},{"id":170826,"depth":191,"text":170827},{"id":171138,"depth":191,"text":171139},{"id":171549,"depth":191,"text":171550},{"id":171767,"depth":191,"text":171768},{"id":172015,"depth":191,"text":172016},{"id":172053,"depth":191,"text":172054},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169594,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172120,"title":172121,"body":172122,"description":25173,"extension":1930,"meta":174308,"navigation":630,"path":174309,"seo":174310,"stem":174311,"__hash__":174312},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172123,"toc":174275},[172124,172127,172131,172134,172137,172229,172231,172250,172255,172259,172262,172265,172294,172301,172304,172308,172311,172340,172342,172394,172400,172453,172457,172555,172558,172625,172629,172686,172688,172694,172698,172703,172709,172800,172805,172809,172812,172890,172893,172931,172935,173053,173056,173060,173063,173108,173111,173115,173120,173126,173176,173179,173210,173214,173218,173248,173252,173287,173291,173326,173366,173370,173386,173389,173393,173397,173476,173480,173521,173525,173580,173584,173618,173622,173652,173661,173668,173674,173731,173734,173742,173745,173749,173756,173759,173765,173768,173785,173790,173794,173800,173813,173816,173853,173856,173867,173870,173884,173887,173901,173905,173912,173945,173948,173950,173956,173959,173963,173965,173971,173976,174149,174153,174216,174220,174244,174248,174272],[10,172125,172121],{"id":172126},"_9-异常模块与包",[14,172128,172130],{"id":172129},"_91-什么是异常","9.1 什么是异常",[19,172132,172133],{},"异常是程序运行过程中出现的错误。",[19,172135,172136],{},"常见异常：",[399,172138,172139,172148],{},[402,172140,172141],{},[405,172142,172143,172146],{},[408,172144,172145],{},"异常",[408,172147,27658],{},[419,172149,172150,172160,172170,172179,172189,172199,172209,172219],{},[405,172151,172152,172157],{},[424,172153,172154],{},[32,172155,172156],{},"NameError",[424,172158,172159],{},"使用了未定义变量",[405,172161,172162,172167],{},[424,172163,172164],{},[32,172165,172166],{},"TypeError",[424,172168,172169],{},"类型不匹配",[405,172171,172172,172176],{},[424,172173,172174],{},[32,172175,156272],{},[424,172177,172178],{},"值不合法",[405,172180,172181,172186],{},[424,172182,172183],{},[32,172184,172185],{},"IndexError",[424,172187,172188],{},"列表索引越界",[405,172190,172191,172196],{},[424,172192,172193],{},[32,172194,172195],{},"KeyError",[424,172197,172198],{},"字典 key 不存在",[405,172200,172201,172206],{},[424,172202,172203],{},[32,172204,172205],{},"FileNotFoundError",[424,172207,172208],{},"文件不存在",[405,172210,172211,172216],{},[424,172212,172213],{},[32,172214,172215],{},"ZeroDivisionError",[424,172217,172218],{},"除数为 0",[405,172220,172221,172226],{},[424,172222,172223],{},[32,172224,172225],{},"ImportError",[424,172227,172228],{},"导入失败",[19,172230,16932],{},[58,172232,172234],{"className":60,"code":172233,"language":62,"meta":63,"style":63},"num = int(\"abc\")\n",[32,172235,172236],{"__ignoreMap":63},[67,172237,172238,172240,172242,172244,172246,172248],{"class":69,"line":70},[67,172239,157225],{"class":73},[67,172241,85],{"class":84},[67,172243,4215],{"class":77},[67,172245,854],{"class":73},[67,172247,157318],{"class":114},[67,172249,829],{"class":73},[19,172251,172252,172253,230],{},"会触发 ",[32,172254,156272],{},[14,172256,172258],{"id":172257},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172260,172261],{},"如果不处理异常，程序会直接终止。",[19,172263,172264],{},"例如用户输入年龄：",[58,172266,172268],{"className":60,"code":172267,"language":62,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[32,172269,172270,172288],{"__ignoreMap":63},[67,172271,172272,172274,172276,172278,172280,172282,172284,172286],{"class":69,"line":70},[67,172273,147984],{"class":73},[67,172275,85],{"class":84},[67,172277,4215],{"class":77},[67,172279,854],{"class":73},[67,172281,55583],{"class":77},[67,172283,854],{"class":73},[67,172285,153832],{"class":114},[67,172287,1050],{"class":73},[67,172289,172290,172292],{"class":69,"line":191},[67,172291,1626],{"class":77},[67,172293,157199],{"class":73},[19,172295,172296,172297,172300],{},"用户输入 ",[32,172298,172299],{},"abc","，程序就会报错退出。",[19,172302,172303],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172305,172307],{"id":172306},"_93-try-except","9.3 try except",[19,172309,172310],{},"基础语法：",[58,172312,172314],{"className":60,"code":172313,"language":62,"meta":63,"style":63},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[32,172315,172316,172323,172328,172335],{"__ignoreMap":63},[67,172317,172318,172321],{"class":69,"line":70},[67,172319,172320],{"class":84},"try",[67,172322,813],{"class":73},[67,172324,172325],{"class":69,"line":191},[67,172326,172327],{"class":73},"    可能出错的代码\n",[67,172329,172330,172333],{"class":69,"line":202},[67,172331,172332],{"class":84},"except",[67,172334,813],{"class":73},[67,172336,172337],{"class":69,"line":641},[67,172338,172339],{"class":73},"    出错后的处理代码\n",[19,172341,16932],{},[58,172343,172345],{"className":60,"code":172344,"language":62,"meta":63,"style":63},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[32,172346,172347,172353,172371,172377,172383],{"__ignoreMap":63},[67,172348,172349,172351],{"class":69,"line":70},[67,172350,172320],{"class":84},[67,172352,813],{"class":73},[67,172354,172355,172357,172359,172361,172363,172365,172367,172369],{"class":69,"line":191},[67,172356,153824],{"class":73},[67,172358,85],{"class":84},[67,172360,4215],{"class":77},[67,172362,854],{"class":73},[67,172364,55583],{"class":77},[67,172366,854],{"class":73},[67,172368,153832],{"class":114},[67,172370,1050],{"class":73},[67,172372,172373,172375],{"class":69,"line":202},[67,172374,851],{"class":77},[67,172376,157199],{"class":73},[67,172378,172379,172381],{"class":69,"line":641},[67,172380,172332],{"class":84},[67,172382,813],{"class":73},[67,172384,172385,172387,172389,172392],{"class":69,"line":655},[67,172386,851],{"class":77},[67,172388,854],{"class":73},[67,172390,172391],{"class":114},"\"年龄必须是数字\"",[67,172393,829],{"class":73},[19,172395,172396,172397,172399],{},"不建议裸写 ",[32,172398,172332],{},"，最好指定异常类型。",[58,172401,172403],{"className":60,"code":172402,"language":62,"meta":63,"style":63},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[32,172404,172405,172411,172429,172435,172443],{"__ignoreMap":63},[67,172406,172407,172409],{"class":69,"line":70},[67,172408,172320],{"class":84},[67,172410,813],{"class":73},[67,172412,172413,172415,172417,172419,172421,172423,172425,172427],{"class":69,"line":191},[67,172414,153824],{"class":73},[67,172416,85],{"class":84},[67,172418,4215],{"class":77},[67,172420,854],{"class":73},[67,172422,55583],{"class":77},[67,172424,854],{"class":73},[67,172426,153832],{"class":114},[67,172428,1050],{"class":73},[67,172430,172431,172433],{"class":69,"line":202},[67,172432,851],{"class":77},[67,172434,157199],{"class":73},[67,172436,172437,172439,172441],{"class":69,"line":641},[67,172438,172332],{"class":84},[67,172440,153664],{"class":77},[67,172442,813],{"class":73},[67,172444,172445,172447,172449,172451],{"class":69,"line":655},[67,172446,851],{"class":77},[67,172448,854],{"class":73},[67,172450,172391],{"class":114},[67,172452,829],{"class":73},[14,172454,172456],{"id":172455},"_94-捕获多个异常","9.4 捕获多个异常",[58,172458,172460],{"className":60,"code":172459,"language":62,"meta":63,"style":63},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[32,172461,172462,172468,172489,172509,172516,172524,172535,172544],{"__ignoreMap":63},[67,172463,172464,172466],{"class":69,"line":70},[67,172465,172320],{"class":84},[67,172467,813],{"class":73},[67,172469,172470,172473,172475,172477,172479,172481,172483,172485,172487],{"class":69,"line":191},[67,172471,172472],{"class":73},"    nums ",[67,172474,85],{"class":84},[67,172476,53990],{"class":73},[67,172478,2209],{"class":77},[67,172480,1868],{"class":73},[67,172482,2077],{"class":77},[67,172484,1868],{"class":73},[67,172486,2071],{"class":77},[67,172488,35015],{"class":73},[67,172490,172491,172494,172496,172498,172500,172502,172504,172507],{"class":69,"line":202},[67,172492,172493],{"class":73},"    index ",[67,172495,85],{"class":84},[67,172497,4215],{"class":77},[67,172499,854],{"class":73},[67,172501,55583],{"class":77},[67,172503,854],{"class":73},[67,172505,172506],{"class":114},"\"请输入索引:\"",[67,172508,1050],{"class":73},[67,172510,172511,172513],{"class":69,"line":641},[67,172512,851],{"class":77},[67,172514,172515],{"class":73},"(nums[index])\n",[67,172517,172518,172520,172522],{"class":69,"line":655},[67,172519,172332],{"class":84},[67,172521,153664],{"class":77},[67,172523,813],{"class":73},[67,172525,172526,172528,172530,172533],{"class":69,"line":660},[67,172527,851],{"class":77},[67,172529,854],{"class":73},[67,172531,172532],{"class":114},"\"索引必须是整数\"",[67,172534,829],{"class":73},[67,172536,172537,172539,172542],{"class":69,"line":665},[67,172538,172332],{"class":84},[67,172540,172541],{"class":77}," IndexError",[67,172543,813],{"class":73},[67,172545,172546,172548,172550,172553],{"class":69,"line":677},[67,172547,851],{"class":77},[67,172549,854],{"class":73},[67,172551,172552],{"class":114},"\"索引越界\"",[67,172554,829],{"class":73},[19,172556,172557],{},"多个异常使用相同处理逻辑：",[58,172559,172561],{"className":60,"code":172560,"language":62,"meta":63,"style":63},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[32,172562,172563,172569,172587,172600,172614],{"__ignoreMap":63},[67,172564,172565,172567],{"class":69,"line":70},[67,172566,172320],{"class":84},[67,172568,813],{"class":73},[67,172570,172571,172573,172575,172577,172579,172581,172583,172585],{"class":69,"line":191},[67,172572,47361],{"class":73},[67,172574,85],{"class":84},[67,172576,4215],{"class":77},[67,172578,854],{"class":73},[67,172580,55583],{"class":77},[67,172582,854],{"class":73},[67,172584,157234],{"class":114},[67,172586,1050],{"class":73},[67,172588,172589,172591,172593,172595,172597],{"class":69,"line":202},[67,172590,851],{"class":77},[67,172592,854],{"class":73},[67,172594,2437],{"class":77},[67,172596,157484],{"class":84},[67,172598,172599],{"class":73}," num)\n",[67,172601,172602,172604,172606,172608,172610,172612],{"class":69,"line":641},[67,172603,172332],{"class":84},[67,172605,3505],{"class":73},[67,172607,156272],{"class":77},[67,172609,1868],{"class":73},[67,172611,172215],{"class":77},[67,172613,952],{"class":73},[67,172615,172616,172618,172620,172623],{"class":69,"line":655},[67,172617,851],{"class":77},[67,172619,854],{"class":73},[67,172621,172622],{"class":114},"\"输入不合法\"",[67,172624,829],{"class":73},[14,172626,172628],{"id":172627},"_95-获取异常信息","9.5 获取异常信息",[58,172630,172632],{"className":60,"code":172631,"language":62,"meta":63,"style":63},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[32,172633,172634,172640,172654,172665],{"__ignoreMap":63},[67,172635,172636,172638],{"class":69,"line":70},[67,172637,172320],{"class":84},[67,172639,813],{"class":73},[67,172641,172642,172644,172646,172648,172650,172652],{"class":69,"line":191},[67,172643,47361],{"class":73},[67,172645,85],{"class":84},[67,172647,4215],{"class":77},[67,172649,854],{"class":73},[67,172651,157318],{"class":114},[67,172653,829],{"class":73},[67,172655,172656,172658,172660,172662],{"class":69,"line":202},[67,172657,172332],{"class":84},[67,172659,153664],{"class":77},[67,172661,66364],{"class":84},[67,172663,172664],{"class":73}," e:\n",[67,172666,172667,172669,172671,172673,172676,172678,172680,172682,172684],{"class":69,"line":641},[67,172668,851],{"class":77},[67,172670,854],{"class":73},[67,172672,2052],{"class":84},[67,172674,172675],{"class":114},"\"出错了:",[67,172677,2885],{"class":77},[67,172679,2074],{"class":73},[67,172681,2934],{"class":77},[67,172683,2243],{"class":114},[67,172685,829],{"class":73},[19,172687,147895],{},[58,172689,172692],{"className":172690,"code":172691,"language":603,"meta":63},[601],"出错了:invalid literal for int() with base 10: 'abc'\n",[32,172693,172691],{"__ignoreMap":63},[14,172695,172697],{"id":172696},"_96-else和finally","9.6 else和finally",[19,172699,172700,172702],{},[32,172701,3544],{},"：没有异常时执行。",[19,172704,172705,172708],{},[32,172706,172707],{},"finally","：无论是否异常都会执行。",[58,172710,172712],{"className":60,"code":172711,"language":62,"meta":63,"style":63},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[32,172713,172714,172720,172738,172746,172756,172762,172783,172789],{"__ignoreMap":63},[67,172715,172716,172718],{"class":69,"line":70},[67,172717,172320],{"class":84},[67,172719,813],{"class":73},[67,172721,172722,172724,172726,172728,172730,172732,172734,172736],{"class":69,"line":191},[67,172723,47361],{"class":73},[67,172725,85],{"class":84},[67,172727,4215],{"class":77},[67,172729,854],{"class":73},[67,172731,55583],{"class":77},[67,172733,854],{"class":73},[67,172735,157234],{"class":114},[67,172737,1050],{"class":73},[67,172739,172740,172742,172744],{"class":69,"line":202},[67,172741,172332],{"class":84},[67,172743,153664],{"class":77},[67,172745,813],{"class":73},[67,172747,172748,172750,172752,172754],{"class":69,"line":641},[67,172749,851],{"class":77},[67,172751,854],{"class":73},[67,172753,154652],{"class":114},[67,172755,829],{"class":73},[67,172757,172758,172760],{"class":69,"line":655},[67,172759,3544],{"class":84},[67,172761,813],{"class":73},[67,172763,172764,172766,172768,172770,172773,172775,172777,172779,172781],{"class":69,"line":660},[67,172765,851],{"class":77},[67,172767,854],{"class":73},[67,172769,2052],{"class":84},[67,172771,172772],{"class":114},"\"输入正确:",[67,172774,2885],{"class":77},[67,172776,3512],{"class":73},[67,172778,2934],{"class":77},[67,172780,2243],{"class":114},[67,172782,829],{"class":73},[67,172784,172785,172787],{"class":69,"line":665},[67,172786,172707],{"class":84},[67,172788,813],{"class":73},[67,172790,172791,172793,172795,172798],{"class":69,"line":677},[67,172792,851],{"class":77},[67,172794,854],{"class":73},[67,172796,172797],{"class":114},"\"程序结束\"",[67,172799,829],{"class":73},[19,172801,172802,172804],{},[32,172803,172707],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172806,172808],{"id":172807},"_97-抛出异常","9.7 抛出异常",[19,172810,172811],{},"程序可以主动抛出异常。",[58,172813,172815],{"className":60,"code":172814,"language":62,"meta":63,"style":63},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[32,172816,172817,172826,172838,172851,172871,172875,172879],{"__ignoreMap":63},[67,172818,172819,172821,172824],{"class":69,"line":70},[67,172820,801],{"class":84},[67,172822,172823],{"class":110}," set_age",[67,172825,162853],{"class":73},[67,172827,172828,172830,172832,172834,172836],{"class":69,"line":191},[67,172829,897],{"class":84},[67,172831,17504],{"class":73},[67,172833,259],{"class":84},[67,172835,5913],{"class":77},[67,172837,813],{"class":73},[67,172839,172840,172842,172844,172846,172849],{"class":69,"line":202},[67,172841,914],{"class":84},[67,172843,153664],{"class":77},[67,172845,854],{"class":73},[67,172847,172848],{"class":114},"\"年龄不能为负数\"",[67,172850,829],{"class":73},[67,172852,172853,172855,172857,172859,172861,172863,172865,172867,172869],{"class":69,"line":641},[67,172854,851],{"class":77},[67,172856,854],{"class":73},[67,172858,2052],{"class":84},[67,172860,163421],{"class":114},[67,172862,2885],{"class":77},[67,172864,71981],{"class":73},[67,172866,2934],{"class":77},[67,172868,2243],{"class":114},[67,172870,829],{"class":73},[67,172872,172873],{"class":69,"line":655},[67,172874,631],{"emptyLinePlaceholder":630},[67,172876,172877],{"class":69,"line":660},[67,172878,631],{"emptyLinePlaceholder":630},[67,172880,172881,172884,172886,172888],{"class":69,"line":665},[67,172882,172883],{"class":73},"set_age(",[67,172885,1863],{"class":84},[67,172887,2209],{"class":77},[67,172889,829],{"class":73},[19,172891,172892],{},"调用者可以捕获：",[58,172894,172896],{"className":60,"code":172895,"language":62,"meta":63,"style":63},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[32,172897,172898,172904,172915,172925],{"__ignoreMap":63},[67,172899,172900,172902],{"class":69,"line":70},[67,172901,172320],{"class":84},[67,172903,813],{"class":73},[67,172905,172906,172909,172911,172913],{"class":69,"line":191},[67,172907,172908],{"class":73},"    set_age(",[67,172910,1863],{"class":84},[67,172912,2209],{"class":77},[67,172914,829],{"class":73},[67,172916,172917,172919,172921,172923],{"class":69,"line":202},[67,172918,172332],{"class":84},[67,172920,153664],{"class":77},[67,172922,66364],{"class":84},[67,172924,172664],{"class":73},[67,172926,172927,172929],{"class":69,"line":641},[67,172928,851],{"class":77},[67,172930,68759],{"class":73},[14,172932,172934],{"id":172933},"_98-自定义异常","9.8 自定义异常",[58,172936,172938],{"className":60,"code":172937,"language":62,"meta":63,"style":63},"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",[32,172939,172940,172954,172958,172962,172966,172974,172984,172995,173005,173009,173013,173019,173036,173047],{"__ignoreMap":63},[67,172941,172942,172944,172947,172949,172952],{"class":69,"line":70},[67,172943,16492],{"class":84},[67,172945,172946],{"class":110}," BalanceNotEnoughError",[67,172948,854],{"class":73},[67,172950,172951],{"class":77},"Exception",[67,172953,952],{"class":73},[67,172955,172956],{"class":69,"line":191},[67,172957,150975],{"class":84},[67,172959,172960],{"class":69,"line":202},[67,172961,631],{"emptyLinePlaceholder":630},[67,172963,172964],{"class":69,"line":641},[67,172965,631],{"emptyLinePlaceholder":630},[67,172967,172968,172970,172972],{"class":69,"line":655},[67,172969,801],{"class":84},[67,172971,151624],{"class":110},[67,172973,164250],{"class":73},[67,172975,172976,172978,172980,172982],{"class":69,"line":660},[67,172977,897],{"class":84},[67,172979,151580],{"class":73},[67,172981,2948],{"class":84},[67,172983,164027],{"class":73},[67,172985,172986,172988,172991,172993],{"class":69,"line":665},[67,172987,914],{"class":84},[67,172989,172990],{"class":73}," BalanceNotEnoughError(",[67,172992,151675],{"class":114},[67,172994,829],{"class":73},[67,172996,172997,172999,173001,173003],{"class":69,"line":677},[67,172998,5910],{"class":84},[67,173000,164257],{"class":73},[67,173002,1863],{"class":84},[67,173004,151613],{"class":73},[67,173006,173007],{"class":69,"line":683},[67,173008,631],{"emptyLinePlaceholder":630},[67,173010,173011],{"class":69,"line":689},[67,173012,631],{"emptyLinePlaceholder":630},[67,173014,173015,173017],{"class":69,"line":694},[67,173016,172320],{"class":84},[67,173018,813],{"class":73},[67,173020,173021,173023,173025,173028,173030,173032,173034],{"class":69,"line":700},[67,173022,163928],{"class":73},[67,173024,85],{"class":84},[67,173026,173027],{"class":73}," withdraw(",[67,173029,2302],{"class":77},[67,173031,1868],{"class":73},[67,173033,3565],{"class":77},[67,173035,829],{"class":73},[67,173037,173038,173040,173043,173045],{"class":69,"line":706},[67,173039,172332],{"class":84},[67,173041,173042],{"class":73}," BalanceNotEnoughError ",[67,173044,649],{"class":84},[67,173046,172664],{"class":73},[67,173048,173049,173051],{"class":69,"line":712},[67,173050,851],{"class":77},[67,173052,68759],{"class":73},[19,173054,173055],{},"入门阶段大多数情况使用内置异常即可。",[14,173057,173059],{"id":173058},"_99-traceback","9.9 traceback",[19,173061,173062],{},"调试时可以输出完整异常堆栈。",[58,173064,173066],{"className":60,"code":173065,"language":62,"meta":63,"style":63},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[32,173067,173068,173075,173079,173085,173095,173103],{"__ignoreMap":63},[67,173069,173070,173072],{"class":69,"line":70},[67,173071,622],{"class":84},[67,173073,173074],{"class":73}," traceback\n",[67,173076,173077],{"class":69,"line":191},[67,173078,631],{"emptyLinePlaceholder":630},[67,173080,173081,173083],{"class":69,"line":202},[67,173082,172320],{"class":84},[67,173084,813],{"class":73},[67,173086,173087,173089,173091,173093],{"class":69,"line":641},[67,173088,3818],{"class":77},[67,173090,854],{"class":73},[67,173092,157318],{"class":114},[67,173094,829],{"class":73},[67,173096,173097,173099,173101],{"class":69,"line":655},[67,173098,172332],{"class":84},[67,173100,153664],{"class":77},[67,173102,813],{"class":73},[67,173104,173105],{"class":69,"line":660},[67,173106,173107],{"class":73},"    traceback.print_exc()\n",[19,173109,173110],{},"日志系统中常把异常堆栈记录到文件。",[14,173112,173114],{"id":173113},"_910-什么是模块","9.10 什么是模块",[19,173116,173117,173118,127421],{},"模块就是一个 ",[32,173119,147790],{},[19,173121,173122,173123,26410],{},"例如创建 ",[32,173124,173125],{},"my_math.py",[58,173127,173129],{"className":60,"code":173128,"language":62,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[32,173130,173131,173139,173149,173153,173157,173166],{"__ignoreMap":63},[67,173132,173133,173135,173137],{"class":69,"line":70},[67,173134,801],{"class":84},[67,173136,7026],{"class":110},[67,173138,152531],{"class":73},[67,173140,173141,173143,173145,173147],{"class":69,"line":191},[67,173142,5910],{"class":84},[67,173144,12669],{"class":73},[67,173146,2471],{"class":84},[67,173148,152542],{"class":73},[67,173150,173151],{"class":69,"line":202},[67,173152,631],{"emptyLinePlaceholder":630},[67,173154,173155],{"class":69,"line":641},[67,173156,631],{"emptyLinePlaceholder":630},[67,173158,173159,173161,173164],{"class":69,"line":655},[67,173160,801],{"class":84},[67,173162,173163],{"class":110}," sub",[67,173165,152531],{"class":73},[67,173167,173168,173170,173172,173174],{"class":69,"line":660},[67,173169,5910],{"class":84},[67,173171,12669],{"class":73},[67,173173,1863],{"class":84},[67,173175,152542],{"class":73},[19,173177,173178],{},"在另一个文件中导入：",[58,173180,173182],{"className":60,"code":173181,"language":62,"meta":63,"style":63},"import my_math\n\nprint(my_math.add(1, 2))\n",[32,173183,173184,173191,173195],{"__ignoreMap":63},[67,173185,173186,173188],{"class":69,"line":70},[67,173187,622],{"class":84},[67,173189,173190],{"class":73}," my_math\n",[67,173192,173193],{"class":69,"line":191},[67,173194,631],{"emptyLinePlaceholder":630},[67,173196,173197,173199,173202,173204,173206,173208],{"class":69,"line":202},[67,173198,1626],{"class":77},[67,173200,173201],{"class":73},"(my_math.add(",[67,173203,2209],{"class":77},[67,173205,1868],{"class":73},[67,173207,2077],{"class":77},[67,173209,1050],{"class":73},[14,173211,173213],{"id":173212},"_911-import导入","9.11 import导入",[391,173215,173217],{"id":173216},"_9111-导入模块","9.11.1 导入模块",[58,173219,173221],{"className":60,"code":173220,"language":62,"meta":63,"style":63},"import random\n\nprint(random.randint(1, 10))\n",[32,173222,173223,173229,173233],{"__ignoreMap":63},[67,173224,173225,173227],{"class":69,"line":70},[67,173226,622],{"class":84},[67,173228,47096],{"class":73},[67,173230,173231],{"class":69,"line":191},[67,173232,631],{"emptyLinePlaceholder":630},[67,173234,173235,173237,173240,173242,173244,173246],{"class":69,"line":202},[67,173236,1626],{"class":77},[67,173238,173239],{"class":73},"(random.randint(",[67,173241,2209],{"class":77},[67,173243,1868],{"class":73},[67,173245,2437],{"class":77},[67,173247,1050],{"class":73},[391,173249,173251],{"id":173250},"_9112-导入指定内容","9.11.2 导入指定内容",[58,173253,173255],{"className":60,"code":173254,"language":62,"meta":63,"style":63},"from random import randint\n\nprint(randint(1, 10))\n",[32,173256,173257,173268,173272],{"__ignoreMap":63},[67,173258,173259,173261,173263,173265],{"class":69,"line":70},[67,173260,32515],{"class":84},[67,173262,59557],{"class":73},[67,173264,622],{"class":84},[67,173266,173267],{"class":73}," randint\n",[67,173269,173270],{"class":69,"line":191},[67,173271,631],{"emptyLinePlaceholder":630},[67,173273,173274,173276,173279,173281,173283,173285],{"class":69,"line":202},[67,173275,1626],{"class":77},[67,173277,173278],{"class":73},"(randint(",[67,173280,2209],{"class":77},[67,173282,1868],{"class":73},[67,173284,2437],{"class":77},[67,173286,1050],{"class":73},[391,173288,173290],{"id":173289},"_9113-起别名","9.11.3 起别名",[58,173292,173294],{"className":60,"code":173293,"language":62,"meta":63,"style":63},"import random as rd\n\nprint(rd.randint(1, 10))\n",[32,173295,173296,173307,173311],{"__ignoreMap":63},[67,173297,173298,173300,173302,173304],{"class":69,"line":70},[67,173299,622],{"class":84},[67,173301,59557],{"class":73},[67,173303,649],{"class":84},[67,173305,173306],{"class":73}," rd\n",[67,173308,173309],{"class":69,"line":191},[67,173310,631],{"emptyLinePlaceholder":630},[67,173312,173313,173315,173318,173320,173322,173324],{"class":69,"line":202},[67,173314,1626],{"class":77},[67,173316,173317],{"class":73},"(rd.randint(",[67,173319,2209],{"class":77},[67,173321,1868],{"class":73},[67,173323,2437],{"class":77},[67,173325,1050],{"class":73},[58,173327,173329],{"className":60,"code":173328,"language":62,"meta":63,"style":63},"from random import randint as rint\n\nprint(rint(1, 10))\n",[32,173330,173331,173347,173351],{"__ignoreMap":63},[67,173332,173333,173335,173337,173339,173342,173344],{"class":69,"line":70},[67,173334,32515],{"class":84},[67,173336,59557],{"class":73},[67,173338,622],{"class":84},[67,173340,173341],{"class":73}," randint ",[67,173343,649],{"class":84},[67,173345,173346],{"class":73}," rint\n",[67,173348,173349],{"class":69,"line":191},[67,173350,631],{"emptyLinePlaceholder":630},[67,173352,173353,173355,173358,173360,173362,173364],{"class":69,"line":202},[67,173354,1626],{"class":77},[67,173356,173357],{"class":73},"(rint(",[67,173359,2209],{"class":77},[67,173361,1868],{"class":73},[67,173363,2437],{"class":77},[67,173365,1050],{"class":73},[391,173367,173369],{"id":173368},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[58,173371,173373],{"className":60,"code":173372,"language":62,"meta":63,"style":63},"from random import *\n",[32,173374,173375],{"__ignoreMap":63},[67,173376,173377,173379,173381,173383],{"class":69,"line":70},[67,173378,32515],{"class":84},[67,173380,59557],{"class":73},[67,173382,622],{"class":84},[67,173384,173385],{"class":84}," *\n",[19,173387,173388],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173390,173392],{"id":173391},"_912-常用内置模块","9.12 常用内置模块",[391,173394,173396],{"id":173395},"_9121-random","9.12.1 random",[58,173398,173400],{"className":60,"code":173399,"language":62,"meta":63,"style":63},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[32,173401,173402,173408,173412,173426,173445],{"__ignoreMap":63},[67,173403,173404,173406],{"class":69,"line":70},[67,173405,622],{"class":84},[67,173407,47096],{"class":73},[67,173409,173410],{"class":69,"line":191},[67,173411,631],{"emptyLinePlaceholder":630},[67,173413,173414,173416,173418,173420,173422,173424],{"class":69,"line":202},[67,173415,1626],{"class":77},[67,173417,173239],{"class":73},[67,173419,2209],{"class":77},[67,173421,1868],{"class":73},[67,173423,2437],{"class":77},[67,173425,1050],{"class":73},[67,173427,173428,173430,173433,173435,173437,173439,173441,173443],{"class":69,"line":641},[67,173429,1626],{"class":77},[67,173431,173432],{"class":73},"(random.choice([",[67,173434,151326],{"class":114},[67,173436,1868],{"class":73},[67,173438,152374],{"class":114},[67,173440,1868],{"class":73},[67,173442,161169],{"class":114},[67,173444,34912],{"class":73},[67,173446,173447,173449,173452,173454,173456,173458,173460,173462,173464,173466,173468,173470,173472,173474],{"class":69,"line":655},[67,173448,1626],{"class":77},[67,173450,173451],{"class":73},"(random.sample([",[67,173453,2209],{"class":77},[67,173455,1868],{"class":73},[67,173457,2077],{"class":77},[67,173459,1868],{"class":73},[67,173461,2071],{"class":77},[67,173463,1868],{"class":73},[67,173465,1047],{"class":77},[67,173467,1868],{"class":73},[67,173469,2310],{"class":77},[67,173471,113640],{"class":73},[67,173473,2077],{"class":77},[67,173475,1050],{"class":73},[391,173477,173479],{"id":173478},"_9122-time","9.12.2 time",[58,173481,173483],{"className":60,"code":173482,"language":62,"meta":63,"style":63},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[32,173484,173485,173491,173495,173502,173510],{"__ignoreMap":63},[67,173486,173487,173489],{"class":69,"line":70},[67,173488,622],{"class":84},[67,173490,33600],{"class":73},[67,173492,173493],{"class":69,"line":191},[67,173494,631],{"emptyLinePlaceholder":630},[67,173496,173497,173499],{"class":69,"line":202},[67,173498,1626],{"class":77},[67,173500,173501],{"class":73},"(time.time())\n",[67,173503,173504,173506,173508],{"class":69,"line":641},[67,173505,96830],{"class":73},[67,173507,2209],{"class":77},[67,173509,829],{"class":73},[67,173511,173512,173514,173516,173519],{"class":69,"line":655},[67,173513,1626],{"class":77},[67,173515,854],{"class":73},[67,173517,173518],{"class":114},"\"1秒后执行\"",[67,173520,829],{"class":73},[391,173522,173524],{"id":173523},"_9123-datetime","9.12.3 datetime",[58,173526,173528],{"className":60,"code":173527,"language":62,"meta":63,"style":63},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[32,173529,173530,173542,173546,173556,173563],{"__ignoreMap":63},[67,173531,173532,173534,173537,173539],{"class":69,"line":70},[67,173533,32515],{"class":84},[67,173535,173536],{"class":73}," datetime ",[67,173538,622],{"class":84},[67,173540,173541],{"class":73}," datetime\n",[67,173543,173544],{"class":69,"line":191},[67,173545,631],{"emptyLinePlaceholder":630},[67,173547,173548,173551,173553],{"class":69,"line":202},[67,173549,173550],{"class":73},"now ",[67,173552,85],{"class":84},[67,173554,173555],{"class":73}," datetime.now()\n",[67,173557,173558,173560],{"class":69,"line":641},[67,173559,1626],{"class":77},[67,173561,173562],{"class":73},"(now)\n",[67,173564,173565,173567,173570,173573,173575,173578],{"class":69,"line":655},[67,173566,1626],{"class":77},[67,173568,173569],{"class":73},"(now.strftime(",[67,173571,173572],{"class":114},"\"%Y-%m-",[67,173574,158129],{"class":77},[67,173576,173577],{"class":114}," %H:%M:%S\"",[67,173579,1050],{"class":73},[391,173581,173583],{"id":173582},"_9124-os","9.12.4 os",[58,173585,173587],{"className":60,"code":173586,"language":62,"meta":63,"style":63},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[32,173588,173589,173595,173599,173606],{"__ignoreMap":63},[67,173590,173591,173593],{"class":69,"line":70},[67,173592,622],{"class":84},[67,173594,47073],{"class":73},[67,173596,173597],{"class":69,"line":191},[67,173598,631],{"emptyLinePlaceholder":630},[67,173600,173601,173603],{"class":69,"line":202},[67,173602,1626],{"class":77},[67,173604,173605],{"class":73},"(os.getcwd())\n",[67,173607,173608,173610,173613,173616],{"class":69,"line":641},[67,173609,1626],{"class":77},[67,173611,173612],{"class":73},"(os.listdir(",[67,173614,173615],{"class":114},"\".\"",[67,173617,1050],{"class":73},[391,173619,173621],{"id":173620},"_9125-sys","9.12.5 sys",[58,173623,173625],{"className":60,"code":173624,"language":62,"meta":63,"style":63},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[32,173626,173627,173634,173638,173645],{"__ignoreMap":63},[67,173628,173629,173631],{"class":69,"line":70},[67,173630,622],{"class":84},[67,173632,173633],{"class":73}," sys\n",[67,173635,173636],{"class":69,"line":191},[67,173637,631],{"emptyLinePlaceholder":630},[67,173639,173640,173642],{"class":69,"line":202},[67,173641,1626],{"class":77},[67,173643,173644],{"class":73},"(sys.version)\n",[67,173646,173647,173649],{"class":69,"line":641},[67,173648,1626],{"class":77},[67,173650,173651],{"class":73},"(sys.path)\n",[14,173653,173655,173656,173658,173659,2243],{"id":173654},"_913-if-name-main","9.13 if ",[2144,173657,81570],{}," == \"",[2144,173660,103761],{},[19,173662,173663,173664,173667],{},"模块被直接运行和被导入时，",[32,173665,173666],{},"__name__"," 的值不同。",[19,173669,173670,173671,26410],{},"创建 ",[32,173672,173673],{},"my_module.py",[58,173675,173677],{"className":60,"code":173676,"language":62,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[32,173678,173679,173687,173697,173701,173705,173717],{"__ignoreMap":63},[67,173680,173681,173683,173685],{"class":69,"line":70},[67,173682,801],{"class":84},[67,173684,7026],{"class":110},[67,173686,152531],{"class":73},[67,173688,173689,173691,173693,173695],{"class":69,"line":191},[67,173690,5910],{"class":84},[67,173692,12669],{"class":73},[67,173694,2471],{"class":84},[67,173696,152542],{"class":73},[67,173698,173699],{"class":69,"line":202},[67,173700,631],{"emptyLinePlaceholder":630},[67,173702,173703],{"class":69,"line":641},[67,173704,631],{"emptyLinePlaceholder":630},[67,173706,173707,173709,173711,173713,173715],{"class":69,"line":655},[67,173708,1096],{"class":84},[67,173710,1099],{"class":77},[67,173712,1102],{"class":84},[67,173714,1105],{"class":114},[67,173716,813],{"class":73},[67,173718,173719,173721,173723,173725,173727,173729],{"class":69,"line":660},[67,173720,851],{"class":77},[67,173722,168038],{"class":73},[67,173724,2209],{"class":77},[67,173726,1868],{"class":73},[67,173728,2077],{"class":77},[67,173730,1050],{"class":73},[19,173732,173733],{},"作用：",[26,173735,173736,173739],{},[29,173737,173738],{},"直接运行该文件时，执行测试代码。",[29,173740,173741],{},"被其他文件导入时，不执行测试代码。",[19,173743,173744],{},"这是写模块时很常用的习惯。",[14,173746,173748],{"id":173747},"_914-包","9.14 包",[19,173750,173751,173752,173755],{},"包是包含 ",[32,173753,173754],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173757,173758],{},"目录结构：",[58,173760,173763],{"className":173761,"code":173762,"language":603,"meta":63},[601],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[32,173764,173762],{"__ignoreMap":63},[19,173766,173767],{},"导入：",[58,173769,173771],{"className":60,"code":173770,"language":62,"meta":63,"style":63},"from utils.file_utils import read_file\n",[32,173772,173773],{"__ignoreMap":63},[67,173774,173775,173777,173780,173782],{"class":69,"line":70},[67,173776,32515],{"class":84},[67,173778,173779],{"class":73}," utils.file_utils ",[67,173781,622],{"class":84},[67,173783,173784],{"class":73}," read_file\n",[19,173786,173787,173789],{},[32,173788,173754],{}," 可以为空，也可以写包初始化逻辑。",[14,173791,173793],{"id":173792},"_915-第三方包","9.15 第三方包",[19,173795,173796,173797,173799],{},"第三方包通过 ",[32,173798,149],{}," 安装。",[58,173801,173803],{"className":101,"code":173802,"language":103,"meta":63,"style":63},"pip install requests\n",[32,173804,173805],{"__ignoreMap":63},[67,173806,173807,173809,173811],{"class":69,"line":70},[67,173808,149],{"class":110},[67,173810,118],{"class":114},[67,173812,147536],{"class":114},[19,173814,173815],{},"使用：",[58,173817,173819],{"className":60,"code":173818,"language":62,"meta":63,"style":63},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[32,173820,173821,173827,173831,173846],{"__ignoreMap":63},[67,173822,173823,173825],{"class":69,"line":70},[67,173824,622],{"class":84},[67,173826,147536],{"class":73},[67,173828,173829],{"class":69,"line":191},[67,173830,631],{"emptyLinePlaceholder":630},[67,173832,173833,173836,173838,173841,173844],{"class":69,"line":202},[67,173834,173835],{"class":73},"response ",[67,173837,85],{"class":84},[67,173839,173840],{"class":73}," requests.get(",[67,173842,173843],{"class":114},"\"https:\u002F\u002Fwww.example.com\"",[67,173845,829],{"class":73},[67,173847,173848,173850],{"class":69,"line":641},[67,173849,1626],{"class":77},[67,173851,173852],{"class":73},"(response.status_code)\n",[19,173854,173855],{},"查看已安装包：",[58,173857,173859],{"className":101,"code":173858,"language":103,"meta":63,"style":63},"pip list\n",[32,173860,173861],{"__ignoreMap":63},[67,173862,173863,173865],{"class":69,"line":70},[67,173864,149],{"class":110},[67,173866,120393],{"class":114},[19,173868,173869],{},"导出项目依赖：",[58,173871,173872],{"className":101,"code":147731,"language":103,"meta":63,"style":63},[32,173873,173874],{"__ignoreMap":63},[67,173875,173876,173878,173880,173882],{"class":69,"line":70},[67,173877,149],{"class":110},[67,173879,147740],{"class":114},[67,173881,28010],{"class":84},[67,173883,147745],{"class":114},[19,173885,173886],{},"安装项目依赖：",[58,173888,173889],{"className":101,"code":147751,"language":103,"meta":63,"style":63},[32,173890,173891],{"__ignoreMap":63},[67,173892,173893,173895,173897,173899],{"class":69,"line":70},[67,173894,149],{"class":110},[67,173896,118],{"class":114},[67,173898,121077],{"class":77},[67,173900,147745],{"class":114},[14,173902,173904],{"id":173903},"_916-模块搜索路径","9.16 模块搜索路径",[19,173906,173907,173908,173911],{},"Python 导入模块时会在 ",[32,173909,173910],{},"sys.path"," 中查找。",[58,173913,173915],{"className":60,"code":173914,"language":62,"meta":63,"style":63},"import sys\n\nfor path in sys.path:\n    print(path)\n",[32,173916,173917,173923,173927,173939],{"__ignoreMap":63},[67,173918,173919,173921],{"class":69,"line":70},[67,173920,622],{"class":84},[67,173922,173633],{"class":73},[67,173924,173925],{"class":69,"line":191},[67,173926,631],{"emptyLinePlaceholder":630},[67,173928,173929,173931,173934,173936],{"class":69,"line":202},[67,173930,1512],{"class":84},[67,173932,173933],{"class":73}," path ",[67,173935,941],{"class":84},[67,173937,173938],{"class":73}," sys.path:\n",[67,173940,173941,173943],{"class":69,"line":641},[67,173942,851],{"class":77},[67,173944,170667],{"class":73},[19,173946,173947],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173949,159061],{},[58,173951,173954],{"className":173952,"code":173953,"language":603,"meta":63},[601],"random.py\njson.py\ntime.py\n",[32,173955,173953],{"__ignoreMap":63},[19,173957,173958],{},"这些文件名可能导致导入异常。",[14,173960,173962],{"id":173961},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173964,173758],{},[58,173966,173969],{"className":173967,"code":173968,"language":603,"meta":63},[601],"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",[32,173970,173968],{"__ignoreMap":63},[19,173972,173973,26410],{},[32,173974,173975],{},"utils\u002Ffile_utils.py",[58,173977,173979],{"className":60,"code":173978,"language":62,"meta":63,"style":63},"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",[32,173980,173981,173987,173997,174001,174005,174015,174025,174033,174039,174043,174070,174080,174084,174088,174098,174124],{"__ignoreMap":63},[67,173982,173983,173985],{"class":69,"line":70},[67,173984,622],{"class":84},[67,173986,148529],{"class":73},[67,173988,173989,173991,173993,173995],{"class":69,"line":191},[67,173990,32515],{"class":84},[67,173992,109749],{"class":73},[67,173994,622],{"class":84},[67,173996,109754],{"class":73},[67,173998,173999],{"class":69,"line":202},[67,174000,631],{"emptyLinePlaceholder":630},[67,174002,174003],{"class":69,"line":641},[67,174004,631],{"emptyLinePlaceholder":630},[67,174006,174007,174009,174012],{"class":69,"line":655},[67,174008,801],{"class":84},[67,174010,174011],{"class":110}," read_json",[67,174013,174014],{"class":73},"(path):\n",[67,174016,174017,174020,174022],{"class":69,"line":660},[67,174018,174019],{"class":73},"    path ",[67,174021,85],{"class":84},[67,174023,174024],{"class":73}," Path(path)\n",[67,174026,174027,174029,174031],{"class":69,"line":665},[67,174028,897],{"class":84},[67,174030,40698],{"class":84},[67,174032,170748],{"class":73},[67,174034,174035,174037],{"class":69,"line":677},[67,174036,16550],{"class":84},[67,174038,53603],{"class":73},[67,174040,174041],{"class":69,"line":683},[67,174042,631],{"emptyLinePlaceholder":630},[67,174044,174045,174047,174049,174052,174054,174056,174058,174060,174062,174064,174066,174068],{"class":69,"line":689},[67,174046,35947],{"class":84},[67,174048,148229],{"class":77},[67,174050,174051],{"class":73},"(path, ",[67,174053,148239],{"class":114},[67,174055,1868],{"class":73},[67,174057,148244],{"class":7033},[67,174059,85],{"class":84},[67,174061,148249],{"class":114},[67,174063,15512],{"class":73},[67,174065,649],{"class":84},[67,174067,149591],{"class":7033},[67,174069,813],{"class":73},[67,174071,174072,174074,174076,174078],{"class":69,"line":694},[67,174073,16550],{"class":84},[67,174075,149602],{"class":73},[67,174077,47122],{"class":7033},[67,174079,829],{"class":73},[67,174081,174082],{"class":69,"line":700},[67,174083,631],{"emptyLinePlaceholder":630},[67,174085,174086],{"class":69,"line":706},[67,174087,631],{"emptyLinePlaceholder":630},[67,174089,174090,174092,174095],{"class":69,"line":712},[67,174091,801],{"class":84},[67,174093,174094],{"class":110}," write_json",[67,174096,174097],{"class":73},"(path, data):\n",[67,174099,174100,174102,174104,174106,174108,174110,174112,174114,174116,174118,174120,174122],{"class":69,"line":717},[67,174101,35947],{"class":84},[67,174103,148229],{"class":77},[67,174105,174051],{"class":73},[67,174107,153414],{"class":114},[67,174109,1868],{"class":73},[67,174111,148244],{"class":7033},[67,174113,85],{"class":84},[67,174115,148249],{"class":114},[67,174117,15512],{"class":73},[67,174119,649],{"class":84},[67,174121,149591],{"class":7033},[67,174123,813],{"class":73},[67,174125,174126,174129,174131,174133,174135,174137,174139,174141,174143,174145,174147],{"class":69,"line":723},[67,174127,174128],{"class":73},"        json.dump(data, ",[67,174130,47122],{"class":7033},[67,174132,1868],{"class":73},[67,174134,148575],{"class":7033},[67,174136,85],{"class":84},[67,174138,35756],{"class":77},[67,174140,1868],{"class":73},[67,174142,153450],{"class":7033},[67,174144,85],{"class":84},[67,174146,2077],{"class":77},[67,174148,829],{"class":73},[19,174150,174151,26410],{},[32,174152,156045],{},[58,174154,174156],{"className":60,"code":174155,"language":62,"meta":63,"style":63},"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",[32,174157,174158,174169,174173,174186,174206],{"__ignoreMap":63},[67,174159,174160,174162,174164,174166],{"class":69,"line":70},[67,174161,32515],{"class":84},[67,174163,173779],{"class":73},[67,174165,622],{"class":84},[67,174167,174168],{"class":73}," read_json, write_json\n",[67,174170,174171],{"class":69,"line":191},[67,174172,631],{"emptyLinePlaceholder":630},[67,174174,174175,174177,174179,174182,174184],{"class":69,"line":202},[67,174176,161154],{"class":73},[67,174178,85],{"class":84},[67,174180,174181],{"class":73}," read_json(",[67,174183,153269],{"class":114},[67,174185,829],{"class":73},[67,174187,174188,174190,174192,174194,174196,174198,174200,174202,174204],{"class":69,"line":641},[67,174189,171972],{"class":73},[67,174191,64439],{"class":114},[67,174193,53203],{"class":73},[67,174195,151326],{"class":114},[67,174197,1868],{"class":73},[67,174199,152910],{"class":114},[67,174201,53203],{"class":73},[67,174203,2977],{"class":77},[67,174205,166590],{"class":73},[67,174207,174208,174211,174213],{"class":69,"line":655},[67,174209,174210],{"class":73},"write_json(",[67,174212,153269],{"class":114},[67,174214,174215],{"class":73},", students)\n",[14,174217,174219],{"id":174218},"_918-易错点","9.18 易错点",[26,174221,174222,174225,174230,174235,174238,174241],{},[29,174223,174224],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[29,174226,174227,174228,230],{},"能指定异常类型就不要裸写 ",[32,174229,172332],{},[29,174231,174232,174234],{},[32,174233,172707],{}," 无论是否出错都会执行。",[29,174236,174237],{},"模块文件名不要和标准库重名。",[29,174239,174240],{},"导入自己写的模块时，要注意运行目录。",[29,174242,174243],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174245,174247],{"id":174246},"_919-本章练习","9.19 本章练习",[26,174249,174250,174253,174256,174262,174269],{},[29,174251,174252],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[29,174254,174255],{},"写函数读取文件，如果文件不存在则返回空字符串。",[29,174257,173670,174258,174261],{},[32,174259,174260],{},"math_utils.py","，实现加减乘除函数并导入使用。",[29,174263,174264,174265,174268],{},"创建一个 ",[32,174266,174267],{},"utils"," 包，把 JSON 读写函数放进去。",[29,174270,174271],{},"写一个程序，捕获除零异常和输入格式异常。",[1903,174273,174274],{},"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":63,"searchDepth":191,"depth":191,"links":174276},[174277,174278,174279,174280,174281,174282,174283,174284,174285,174286,174287,174293,174300,174302,174303,174304,174305,174306,174307],{"id":172129,"depth":191,"text":172130},{"id":172257,"depth":191,"text":172258},{"id":172306,"depth":191,"text":172307},{"id":172455,"depth":191,"text":172456},{"id":172627,"depth":191,"text":172628},{"id":172696,"depth":191,"text":172697},{"id":172807,"depth":191,"text":172808},{"id":172933,"depth":191,"text":172934},{"id":173058,"depth":191,"text":173059},{"id":173113,"depth":191,"text":173114},{"id":173212,"depth":191,"text":173213,"children":174288},[174289,174290,174291,174292],{"id":173216,"depth":202,"text":173217},{"id":173250,"depth":202,"text":173251},{"id":173289,"depth":202,"text":173290},{"id":173368,"depth":202,"text":173369},{"id":173391,"depth":191,"text":173392,"children":174294},[174295,174296,174297,174298,174299],{"id":173395,"depth":202,"text":173396},{"id":173478,"depth":202,"text":173479},{"id":173523,"depth":202,"text":173524},{"id":173582,"depth":202,"text":173583},{"id":173620,"depth":202,"text":173621},{"id":173654,"depth":191,"text":174301},"9.13 if name == \"main\"",{"id":173747,"depth":191,"text":173748},{"id":173792,"depth":191,"text":173793},{"id":173903,"depth":191,"text":173904},{"id":173961,"depth":191,"text":173962},{"id":174218,"depth":191,"text":174219},{"id":174246,"depth":191,"text":174247},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172121,"description":25173},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174314,"title":174315,"body":174316,"description":174479,"extension":1930,"meta":174480,"navigation":630,"path":174481,"seo":174482,"stem":174483,"__hash__":174484},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174317,"toc":174474},[174318,174321,174324,174327,174338,174340,174414,174417,174420,174423,174426,174429,174432,174435,174438,174441,174444],[10,174319,174315],{"id":174320},"python教程",[19,174322,174323],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174325,174326],{},"建议学习环境：",[26,174328,174329,174332,174335],{},[29,174330,174331],{},"Python 版本：Python 3.10 及以上。",[29,174333,174334],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[29,174336,174337],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174339,118516],{"id":118516},[26,174341,174342,174348,174354,174360,174366,174372,174378,174384,174390,174396,174402,174408],{},[29,174343,174344],{},[2230,174345,174347],{"href":174346},".\u002Fch1-Python","Python环境与第一个程序",[29,174349,174350],{},[2230,174351,174353],{"href":174352},".\u002Fch2","基础语法、变量与字符串",[29,174355,174356],{},[2230,174357,174359],{"href":174358},".\u002Fch3","判断语句",[29,174361,174362],{},[2230,174363,174365],{"href":174364},".\u002Fch4","循环语句",[29,174367,174368],{},[2230,174369,174371],{"href":174370},".\u002Fch5","函数基础",[29,174373,174374],{},[2230,174375,174377],{"href":174376},".\u002Fch6","数据容器",[29,174379,174380],{},[2230,174381,174383],{"href":174382},".\u002Fch7","函数进阶",[29,174385,174386],{},[2230,174387,174389],{"href":174388},".\u002Fch8","文件操作",[29,174391,174392],{},[2230,174393,174395],{"href":174394},".\u002Fch9","异常、模块与包",[29,174397,174398],{},[2230,174399,174401],{"href":174400},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[29,174403,174404],{},[2230,174405,174407],{"href":174406},".\u002Fch11","面向对象基础",[29,174409,174410],{},[2230,174411,174413],{"href":174412},".\u002Fch12","综合案例与复习路线",[14,174415,174416],{"id":174416},"学习路线",[19,174418,174419],{},"第一阶段：能运行程序。",[19,174421,174422],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174424,174425],{},"第二阶段：能组织数据。",[19,174427,174428],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174430,174431],{},"第三阶段：能封装逻辑。",[19,174433,174434],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174436,174437],{},"第四阶段：能做小项目。",[19,174439,174440],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174442,174443],{"id":174443},"参考资料",[26,174445,174446,174453,174460,174467],{},[29,174447,174448,174449],{},"黑马程序员 Python 入门教程推荐：",[2230,174450,174451],{"href":174451,"rel":174452},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25657],[29,174454,174455,174456],{},"Python 官方中文教程：",[2230,174457,174458],{"href":174458,"rel":174459},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25657],[29,174461,174462,174463],{},"Python 标准库文档：",[2230,174464,174465],{"href":174465,"rel":174466},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25657],[29,174468,174469,174470],{},"pyecharts 文档：",[2230,174471,174472],{"href":174472,"rel":174473},"https:\u002F\u002Fpyecharts.org\u002F",[25657],{"title":63,"searchDepth":191,"depth":191,"links":174475},[174476,174477,174478],{"id":118516,"depth":191,"text":118516},{"id":174416,"depth":191,"text":174416},{"id":174443,"depth":191,"text":174443},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25175},"\u002Fwiki\u002F2024-10-10-python",{"title":174315,"description":174479},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331469688]